
数字集成电路设计
-
2023年3月5日发(作者:中国国际高新技术成果交易会)《数字集成电路综合设计》
电控学院电子科学系编制
二零一九年
实
验
指
导
书
目录
简介..................................................................................................................................................1
DC训练............................................................................................................................................2
一、工艺库...............................................................................................................................2
二、Designcompiler简介......................................................................................................3
三、实验步骤...........................................................................................................................3
1、启动工具.....................................................................................................................3
2、配置库文件.................................................................................................................4
3、设计读入.....................................................................................................................6
4、设置约束.....................................................................................................................6
5、查看报告...................................................................................................................11
6、保存文件...................................................................................................................12
7、脚本语言...................................................................................................................13
ICC训练..........................................................................................................................................14
一、ICC简介..........................................................................................................................14
二、实验教程.........................................................................................................................14
2.2布局规划(floorplan)..............................................................................................20
2.3布局..........................................................................................................................30
2.4时钟树综合..............................................................................................................31
2.5布线..........................................................................................................................32
2.6DFM与DRC和LVS验证.........................................................................................33
2.7保存设计..................................................................................................................35
1
简介
本指导书应用于微电子科学与工程专业,数字集成电路设计的集
中实践环节《数字集成电路综合设计》综合实验。
主要训练数字集成电路的前后端设计能力。核心EDA工具Design
Compiler和ICCompiler的使用。
主要练习完成数字集成电路的逻辑综合和物理综合以及版图实
现。
学生应选用老师提供的IP或者自己准备的,经过仿真验证的数
字IP,使用EDA工具完成两大任务:1、逻辑综合;2、物理综合和
版图实现。
本实验指导书分两部分:DC训练和ICC训练。
2
DC训练
一、工艺库
半导体或芯片的90nm、65nm、0.25um、0.18um等是IC工艺先进水平的
主要指标。这些数字表示制作半导体或芯片的技术节点(technologynode),也称
作工艺节点。IC生产工艺可达到的最小导线宽度,实际物理意义有“半节距”、“物
理栅长”、“制程线宽”等。线宽越小,集成的元件就越多,在同一面积上就可以集
成更多电路单元,同时功耗也越低。但是随着线宽缩小,需要的工艺设备越来越
复杂,设计难度也增加,相应增加了成本,这方面需要综合考虑。半导体业界通
常使用“半节距”、“物理栅长(MOS管栅极的长度)”和“结深”等参数来描述芯片
的集成度,这些参数越小,芯片的集成度越高。举个例子,某种芯片采用90nm
工艺,其中半节距为90nm,而晶体管的物理栅长为37nm。半节距(half-pitch),
是指芯片内部互联线间距离的一半,也即光刻间距的一半。由于历年来每一个新
的技术节点总是用于制造DRAM芯片,因此最新的技术节点往往是指DRAM的
半节距。另外,在技术文章中还有两种与“半节距”意义相近的表达方式,就是“线
宽”、“线距”和“特征尺寸”,如果线宽等于线距,则半节距就等于线宽、线距,
它们不过是对同一个数据的不同表达。
工艺库内不同的文件代表着不同的物理信息。
(1)clf文件主要是包含版图时序、功耗和寄生电容电阻参数的文件,例如
4lm、5lm是指4、5层金属所用到的文件。其它的像1P3M之类的文件指的是一
层poly,3层金属的工艺文件。tt、ff、ss指的是工艺角,t=typical,f=fast,s=slow,
tt文件主要对应典型的N型或P型MOS管模型,ff文件主要对应快速N型或P
型MOS管模型(工艺角具体内容可参考模拟CMOS集成电路设计489页,拉扎
维)。
(2)CEL文件内包含完整的版图信息;FRAM文件用于布局布线的抽象化的
版图物理信息(只有单元大小、端口名称和位置等);LM文件带有时序和功耗信
息的逻辑模型(并非必选项)。上述三个文件主要包含在ICC布局布线所必需的
milkyway参考库中。
(3)tf文件夹所包含的是工艺技术库,每种工艺对应一个唯一的工艺文件。
它包含金属层次对应的工艺参数:每个层次/via对应的编号及名字,每个层次/via
对应的物理和电学特性,每个层次/via的设计规则(最小线宽、最小线距),工
艺的介电常数,单位及精度,用于显示每层对应的颜色及模式等。
(4)Lef文件是自动布局布线工具所使用的物理版图库,它可以通过某些软
件转换成ICC所使用的milkway工艺库。
我们在之后的实验中使用到的都是SMIC90nm工艺库,smic是指中芯国际
此外一般还有TSMC(台积电)工艺库,相对来说,台积电的工艺库更好一些。
3
二、Designcompiler简介
DC(DesignCompiler)是Synopsys公司的逻辑综合工具,它已经得到全球60
多个半导体厂商的认可,并支持380多个工艺库。DC一直都是工业界标准的逻
辑综合工具,也是Synopsys公司的核心产品。IC设计者可以通过DC工具以最
快的速度最优的完成芯片的设计。它能通过设计描述和约束条件并依据特定的工
艺库自动综合出一个优化的门级电路,DC适用于多种输入格式,如HDL、
Schematics、Netlist等,并能生成多种性能报告,不仅能够大大的减少设计时间,
还能够提高设计的性能。
Synopsys公司发布的最新版本DC扩展了拓扑技术,从而提高了低功耗和测
试技术的设计收敛速度,同时也提高了生产效率和IC设计的性能。新增加的拓
扑功能能更好的辅助设计人员准确的评估芯片在综合过程中的功耗,这样便可以
在设计初期就解决掉大部分功耗问题。此外新版本还支持新的测试压缩技术,在
提高测试质量的同时,减少了测试时间和测试数据量,并且能够减少在后续物理
实现阶段可能由于测试电路带来的布线拥塞。
三、实验步骤
在开始设计前,先给出几点声明:
①脚本命令可在DC、ICC窗口命令栏输入,也可在进入软件后的终端上输入,
输入命令后按回车即可;
②在输入命令时,命令与执行内容必须要有空格,如“set_mw_sel-as1_setup”
“-”前和“as”后都要有空格,很多命令没有空格便不识别;
③本实验步骤中许多理论知识参考了“集成电路设计及EDA教程”微信公众号。
1、启动工具
右击选择openinterminal打开终端,输入dc_shell,回车输入gui_start,图形
界面如下。
图1终端命令窗口
DC的图形界面如下,最下面为命令框,用以输入TCL指令。
4
图2dc图形界面
2、配置库文件
点击DC图形界面右上角file→setup,打开如下界面。
图3setup窗口
通过link_library,target_library,symbol_library,synthetic_library和search_path
相关命令为在DC中指定链接库、目标库、符号库、综合库和库所在文件的目录。
链接库和目标库是工艺库模型,详细地说明了半导体厂家所提供的像单元名称、
单元管脚名称、管脚负载、延迟、设计规则和操作环境等类型的单元信息,这两
个库是做综合所必须的,目标库作用是将GETECH文件映射到标准文件,链接
库一般包含了各种约束信息,它内部同样包含了其他库文件。符号库定义了设计
电路图所要调取的符号,这个库通常在需要在用到DesignAnalyzer图形界面时
使用。最后,synthetic_library一般是需要用到特殊的有许可的设计工具库才使用。
表1库类型
库类型变量默认值扩展名
目标库target_library{“your_”}.db
链接库link_library{“*”,“your_”}.db
符号库symbol_library{“your_”}.sdb
设计工具库synthetic_library{}.sldb
点击图3中setup设置右边红色方框进行库的设置,删除默认的选项,进行
5
库的设置。
Searchpath:选择工艺库所在位置,如下图所示。
图4setsearchpath
一般对于90nm前的工艺,设计者只需考虑BestCase和WorstCase。用前者来检查并
修复hold违反,用后者来检查并修复setup违反。BC的pvt条件为ff工艺角、高压、低温;
WC的PVT条件为ss工艺角、低压、高温。此外,在DC综合过程中一般只考虑setuptime。
Targetlibrary:选择library→stdcel→db→ss1p08v125c中所有db文件,如下图。
图5settargetlibrary
Linklibrary:选择library→依次选择io,mem,stdcel→db→ss1p08v125c中的所有db文件,
与上述步骤类似。最后设置好的结果如下。
图6完成库设置
点击OK或apply,完成库的设置。
库的设置可以通过直接读取scripts文件完成设置,点击file→execetescripts
即可读取脚本文件(脚本语言包括但不仅限于库文件设置,也可以是包含设计命
令的脚本语言),这里就需要编写tcl脚本语言,具体脚本在教程最后附上。
6
3、设计读入
点击file→read读入你所设计的HDL文件。
图7文件读入
在read文件的时候可能会出现一些错误,这跟设计语言能否被综合有关,
在这里需要注意verilog中initial,event不能综合,智能在testbench中使用,也不
支持reg数据类型的assign或deassign进行综合(wire型可以),此外还可能出
现设计中名字重复,如模块名与内部端口名重复都可能报错,具体情况会显示错
误报告。如果设计是多模块,需要设置顶层文件,通过在DC图形界面下方输入
命令current_designtop(顶层文件名)。然后输入link(也可选择file→linkdesign),
最后再输入check_design(也可在图形界面选择DESIGN→checkdesign),可以忽
略出现的警告warning。
4、设置约束
4.1时序约束
先选择顶层文件,如图左红框,在点击symbol图形,如图上红框,得到图
7
形symbol图。
图8创建当前设计symbol
选中图形中的clk端口,点击Attributes→Specifyclock。
图9时钟设定
出现设置时钟约束的对话框,按下图设置,给时钟取名为clk,频率为50Mhz,
周期为20ns,上升沿10ns,下降沿20ns,勾选上Don’ttouchnetwork。对应的脚
本命令为create_clock-name"clk"[get_portsclk]-period20-waveform{010}。
set_dont_touch_network[get_portsclk]
图10时钟设置
4.2设置复位信号约束
在图形中选择rst端口,点击Attributes→OptimizationDirectives→InputPort
8
勾选上Don’ttouchnetwork,点击OK。
相应命令为set_dont_touch_network{rst}
图11复位信号设置
4.2设置输入信号延迟约束
选中输入端口en,fin,k_mode,点击Attributes→OperatingEnvironment→Input
Delay。max和minrise都输入12,这个数值通常为系统时钟的60%。
相应命令为set_input_delay12-clockclk-max-rise“fin{K_mode[2]}{K_mode[1]}
en{K_mode[0]}”。
set_input_delay12-clockclk-max-fall“同上”
set_input_delay12-clockclk-min-rise“同上”
set_input_delay12-clockclk-min-fall“同上”
图12输入信号延时设置
9
图13输入信号延时设置
4.3设置输出信号延迟约束
选择输出端口fout,ud,点击Attributes→OperatingEnvironment→OutputDelay,
设置输出延时为12。相应命令同上将input改为output。
图14输出信号设置
4.4设置面积约束
选择Attributes→OptimizationConstraints→DesignConstraints。设置Maxarea
的值为0,表明让DC向电路⾯积为0的⽅向来优化电路,使⾯积最小。当然,
⾯积为0是达不到的。Maxfanout为20,Maxtransition为2(这儿的值并不固定,
具体意义需要参考,我也是根据视频教程写的)。
10
图15约束设置
4.5设置驱动和负载
选中之前输入端口,选择菜单项Attributes→OperatingEnvironment→Drive
Strength,出现DriveStrength窗口。选择uselibrarycelloptions,点击红色小圈图
形选择驱动cell,显示如图17,这儿我选择的第一个对应的最后一个cellname,
然后点击clicktochooseObjects,然后点击OK,返回图16界面,点击APPLY。
图16驱动设置图17选择驱动
选中输出端口,选择菜单项Attributes→OperatingEnvironment→load,出现
load窗口,加入电容负载,如下图。
11
图18负载设置
上述设置完毕后,选择菜单项Attributes→OperatingEnvironment→wireload,选
择最后一个模型。
图19线性负载模型设置
5、查看报告
选择Design→compiledesign,出现下图界面,点击OK,进行优化后,即可
查看各种报告。
图20设计综合
12
点击Timing→reporttimingpath,选择OK即可查看时序报告,其中slack必
须为正,如果为负,则可通过修改时钟周期,输入输出延时来调整,如果无法调
整很有可能需要重新进行HDL设计。不同的时序约束综合出的报告也不同。
相应命令为report_timing。
图21时序报告选择
图22时序报告
选择Design→reportarea,选择OK即可查看面积报告,相应命令为
report_aera,如下图所示。除此之外,在Design选项下也有许多其他报告可以查
看,就不一一展示了,最后我们也可以通过命令report_qor查看整体的报告。
图23面积报告
6、保存文件
通过下述命令保存得到网表文件和时序信息文件,下次可通过打开ddc文件打开
设计:
.v
13
write_
7、脚本语言
DC设计还可以通过直接读取脚本文件(.tcl)来进行综合。
例如输入命令dc_shell-t-fdc_即可直接打开库设置文件,无
需再进行库设置,同理,在脚本文件中写入读取文件命令,时序约束命令等,在
综合时即可直接运行脚本文件,然后即可查看各种报告结果。
下面列出库设置的脚本文件,具体设计脚步文件可以在文件夹scripts中参
考。
setsearch_path"../../library/*/db/ss1p08v125c/"
setstdcel_libs"
../../library/stdcel/db/ss1p08v125c/saed90nm_max_hth_
../../library/stdcel/db/ss1p08v125c/saed90nm_max_hth_cg_
../../library/stdcel/db/ss1p08v125c/saed90nm_max_hth_cg_
../../library/stdcel/db/ss1p08v125c/saed90nm_max_
../../library/stdcel/db/ss1p08v125c/saed90nm_max_hth_
../../library/stdcel/db/ss1p08v125c/saed90nm_max_hth_
"
#memory
setmemory_libs"
../../library/mem/db/ss1p08v125c/SRAM8x1024_1rw_max_
../../library/mem/db/ss1p08v125c/SRAM22x32_max_
../../library/mem/db/ss1p08v125c/SRAM32x64_max_
../../library/mem/db/ss1p08v125c/SRAM32x256_1rw_max_
../../library/mem/db/ss1p08v125c/SRAM39x32_max_
../../library/io/db/ss1p08v125c/saed90nm_io_max_hth_
"
settarget_library"$stdcel_libs"
setlink_library"*$target_library$memory_libs"
14
ICC训练
一、ICC简介
ICCompiler,简称ICC,是Synopsys新一代布局布线系统(Astro是前
一代布局布线系统),通过将物理综合扩展到整个布局和布线过程以及Sign
off驱动的设计收敛,来保证卓越的质量并缩短设计时间。上一代解决方案
由于布局、时钟树和布线独立运行,有其局限性。ICCompiler的扩展物理
综合(XPS)技术突破了这一局限,将物理综合扩展到了整个布局和布线过程。
ICCompiler采用基于TCL的统一架构,实现了创新并利用了Synopsys的
若干最为优秀的核心技术。作为一套完整的布局布线设计系统,它包括了
实现下一代设计所必需的一切功能,如物理综合、布局、布线、时序、信
号完整性(SignalIntegrity,SI)优化、低功耗、可测性设计(DesignForTest,
DFT)和良率优化。新版ICC运行时间更快、容量更大、多角/多模优化
(MCMM)更加智能、而且具有改进的可预测性,可显著提高设计人员的生产
效率。同时,新版本还推出了支持45nm、32nm技术的物理设计。ICCompiler
正成为越来越多市场领先的IC设计公司在各种应用和广泛硅技术中的理想
选择。新版的重大技术创新将为加速其广泛应用起到重要作用。ICCompiler
引入了用于快速运行模式的新技术,在保证原有质量的情况下使运行时间
缩短了35%。新版增加了集成的、层次化的设计规划的早期介入,有助于
用户高效处理一亿门级的设计。提高生产能效的另一个关键在于物理可行
性流程,它能够使用户迅速生成和分析多次试验布局,以确定具体实现的
最佳起始值。
二、实验教程
2.1设计准备
在用ICC开始布局布线之前,应核查输入数据准备是否完备,主要包括
milkyway参考库,工艺文件(tf文件),tluplus文件(寄生RC查找表),db文
件(用于提供时序、功耗和面积),门级网表文件(.v),时序约束文件(.sdc)
和管脚排列文件(.tdf)等。一切准备妥当,即可开始布局布线。
进入虚拟机,打开终端,输入icc_shell-gui即可打开ICC。
15
打开后的界面如下所示,红色部分与DC相同,为命令窗口。
启动软件后,与DC相同,首先进行库的设置,这里依然有两种方法,
一是直接进入file→execetescripts读取写好的脚本语言,而是选择file→setup→
Applicationsetup进行设置。
在进入ApplicationSetup后,会有系统默认的库设置,这里需要全部删完,不然会和我
们所使用的工艺库产生冲突,建议进入ICC的第一步先把默认库给删除。
16
全部删除后,即可选择所需要的工艺库,这里的库设置与targetlibrary和link
library与DC设置相同,都是library→io,men,stdce→db→ss1p08v125c内的db文
件,但是searchpath除了library→io,men,stdce→db→ss1p08v125c路径外,还要
包括library→io→milkyway→saed_io_fr,
library→men→milkyway→saed_sram_full,
library→stdcel→milkyway→saed90nm_dv,saed90nm_hvt_dv,saed90nm_lvt_dv。
设置好后如下图。
17
接着创建设计库,所有的设计都是在该设计库中完成的。可以在
MainWindow中的菜单栏中依次选择File⟶CreateLibrary,打开界面如下图。
Newlibrarypath即设计库所在位置,这个根据自己需要选择合适路径;
NewLibraryname中填写要创建的设计库的名字;
Technologyfile中选择工艺库文件,选择library→tech→icc→
saed90nm_icc_文件
在Inputreferencelibraries:Files栏中点击“Add”添加参考库文件,包括
IO、标准单元、宏单元的参考库。即
library→io→milkyway→saed_io_fr,
library→men→milkyway→saed_sram_full,
library→stdcel→milkyway→saed90nm_dv,saed90nm_hvt_dv,saed90nm_lvt_dv。
勾选“OpenLibrary”⟶“OK”,完成设计库的创建并打开设计库。
打开设计库之后,读入网表文件。在MainWindow中的菜单栏中依次选
择File⟶ImportDesigns,ICC提供了三种输入文件格式来导入设计,由于
db格式和ddc格式会包含一些时序约束,这些约束信息可能并不是特别清
晰,所以最好以Verilog格式来创建,当然用ddc和db文件创建影响也并不
大。点击Add添加DC导出的门级网表文件,并在TopDesignName后边填
写网表中顶层设计的名称来指定顶层设计,最后点击OK即可完成设计中
Cell的创建。
18
创建完Cell之后,ICC便会弹出另外一个窗口,即LayoutWindow版图
窗口,此时由于没有进行布局规划,所以设计中所有的标准单元、IO、Macro
都是叠放在一起的。
为了在布图时进行时钟树综合,必须唯一化DC中的网表。此操作为设
计中多次例化的子模块生成唯一的模块/实体定义。原因:(1)存在于这些
模块内的触发器需要连接到时钟源,而把时钟树连接到这些模块需要单独的
时钟连线名。(2)物理上要求这些模块有单独的位置。
在mainwindow窗口下的命令窗口输入
current_designphaselock(确认当前顶层设计,后面为顶层文件名)
19
uniquify_fp_mw_cel唯一化命令
link将网表中例化的单元与参考库中的单元做连接。
在菜单栏中选择File⟶SetTLU+,在MaxTLU+file中选择library→tech
→icc→tluplus→saed90nm_1p9m_1t_Cmax_s;
在MinTLU+file中选择
library→tech→icc→tluplus→saed90nm_1p9m_1t_Cmin_s;
并在LayernamemappingfilebetweentechnologylibraryandITFfile中填写工
艺文件和ITF文件的映射文件,library→tech→icc→tluplus→。
在菜单栏中依次选择File⟶Import⟶ReadSDC,选择DC生成的sdc文
件,Version选择Latest,然后点击OK即可。
相应的脚本命令为read_如果出
现警告可以忽略,只要最后窗口命令出现“1”即为成功。
之后即可检查设计的合理性,在ICC窗口中运行check_timing命令,检
查是否存在没有时钟的寄存器,没有设置输入输出延迟,未约束路径,交
叉时钟域路径等问题。
然后设置为0互联延时,此时是最理想的情况,在该模式下报告时序,
此时不应存在Setup的违反。如果存在违反,需要返回前端修改设计或者可
能sdc约束文件存在问题,需要修改约束。
输入命令
set_zero_interconnect_delay_modetrue设置O互联延时
report_timing时序报告,要求slack为正
20
report_constraint检查约束
set_zero_interconnect_delay_modefalse记住要关闭0互联延时
最后进行电源地的连接,输入命令
derive_pg_connection-power_net{VDD}-ground_net{VSS}-power_pin{VDD}
-ground_pin{VSS}-create_portstop
至此,便完成了设计准备得内容。
接下来即可保存这个阶段的文件,输入命令
save_mw_celphaselock
save_mw_cel-as1_setup
也可在mainwindow下选择file→savedesign保存文件
2.2布局规划(floorplan)
Floorplan的主要目的是为模块、I/O接口、电源焊盘分配相对的位置,
并定义时钟和电源分配。在Floorplan之前我们需要知道每个模块的门级电路
尺寸和运行频率,以及模块之间的连接关系,这样才能设计出更好的
Floorplan。同时也不能等到网表完全确定后才开始这一步,Floorplan是确定
芯片面积、线长、线拥塞情况的决定要素,现代EDA工具在Floorplan阶段
就可以估计线延迟。因此,实际项目中,往往是前端逻辑初步定义好之后就
要开始尝试Floorplan,这样可以发现一些逻辑设计阶段不能发现的问题。对
于面积很大的ASIC芯片物理设计,往往采用层次化设计方案,通过顶层设
计规划、子模块划分和实现,以及芯片顶层组装实现。对于顶层划分,往往
综合考虑设计层次,连接关系以及面积,将整个设计划分成多个子模块,然
后再对每个子模块分别进行物理设计,而顶层就可以将这些模块当成仅有IO
口的黑盒子宏模块进行物理设计。
Floorplan的主要内容:确定芯片的尺寸,标准单元的排列形式,IO单元及
宏单元的位置,电源地网络的分布。
在正式开始设计前,如果之前关闭了ICC,这里就需要重新打开之前的
设计,首先仍然要删掉库设置里的默认库,然后读取库的脚本文件或者重
新设置库。然后点击file→opendesign,打开如下界面,点击红色处的文件
按钮。
21
选择之前设计的库文件。
出现如下界面,选中之前保存的文件,双击或者点OK,即可得到之前所完成得
设计。之后没完成一个步骤即可保存一次,都可通过上述方法打开。
22
下面开始进行布局规划,在之后的设计中更多的需要使用到tcl脚本语言。
(1)在设计中添加physicalonlycells
Physicalonlycells是那些在网表中没有,而在实际芯片中需要存在的
一些单元,如电源地IO、给IO供电的IO以及一些衬底、阱接触单元等。
注意,IOCorner是不用围成环的,甚至IOCorner都不是必须的!但
是给Core和IO供电的IO是必须的。当芯片只有一边有IO时,或者只有
芯片的对边有IO时,此时为了节省芯片面积,不需要IOCorner。
按上述步骤打开之前的设计会出现一个layoutwindow如下图。
选择工具栏上的ECO→creatcell
下面我进行IOcorner和电源PAD的添加,我以IOconer为图形实例,之后
的电源PAD我会以脚本形式给出。如下图点击OK即完成IOCorner的创建。
23
除了通过图形界面,我们可以直接通过脚本命令完成设计,在后端设计中,
合理的利用脚本命令会使设计变得更叫简单。
#电源PAD的创建
create_cell{vss1topvss1bottomvss1lefvss1right}VSS
create_cell{vdd1topvdd1bottomvdd1lef}VDD
create_cell{vss2leftvss2right}IOVSS
create_cell{vdd2leftvdd2right}IOVDD
#IOcorner的创建
create_cell{CornULCornURCornLRCornLL}CAPCORNER
在mainwindow的命令窗口输入指令,按下回车即可,如下图。
(2)读入IO约束文件
在设计中创建完PhysicalOnlyCells之后,便可以读入管脚约束文件了,
它指定了每个IO在整个芯片中的位置和排列顺序,对于BlockLevel的设
计而言,因为设计中没有IO,所以可以读入pin顺序和位置的tdf文件。一
24
般来说,tdf文件都需要自己编写,然后在layoutwindow工具栏中选择
floorplan→ReadPin/PadPhysicalConstraints,读如.tdf文件,或者通过命令
read_pin_pad_physical_constraints../../读入,但在这里我直接将编写好
的命令作为脚本命令给出,大家可以直接在mainwindow的命令窗口输入,
也可将其写为.tdf文件读入。
#IOpad
set_pad_physical_constraints-pad_name"rst_pad"-side1-order1-lib_cell
-lib_cell_orientation{NFNNN}
set_pad_physical_constraints-pad_name"fout_pad"-side1-order2
set_pad_physical_constraints-pad_name"vss1bottom"-side1-order3
set_pad_physical_constraints-pad_name"clk_pad"-side1-order4
set_pad_physical_constraints-pad_name"vdd1top"-side2-order1
set_pad_physical_constraints-pad_name"vdd1bottom"-side2-order2
set_pad_physical_constraints-pad_name"vss1top"-side2-order3
set_pad_physical_constraints-pad_name"vss2left"-side2-order4
set_pad_physical_constraints-pad_name"en_pad"-side3-order1
set_pad_physical_constraints-pad_name"fin_pad"-side3-order2
set_pad_physical_constraints-pad_name"vss2right"-side3-order3
set_pad_physical_constraints-pad_name"vdd2right"-side3-order4
set_pad_physical_constraints-pad_name"vss1right"-side4-order1
set_pad_physical_constraints-pad_name"vdd1lef"-side4-order2
set_pad_physical_constraints-pad_name"vss1lef"-side4-order3
set_pad_physical_constraints-pad_name"vdd2left"-side4-order4
set_pad_physical_constraints-pad_name"CornUL"-side1
set_pad_physical_constraints-pad_name"CornUR"-side2
set_pad_physical_constraints-pad_name"CornLR"-side3
set_pad_physical_constraints-pad_name"CornLL"-side4
#创建电源地连接
derive_pg_connection-power_netVDD-ground_netVSS-create_portstop
derive_pg_connection-power_netVDD-power_pinVDD-cells
[get_flat_cells*]-reconnect
derive_pg_connection-ground_netVSS-ground_pinVSS-cells[get_flat_cells
*]-reconnect
derive_pg_connection-power_netVDD-ground_netVSS-tie
(3)创建floorplan
create_floorplan-core_utilization0.0423709-core_aspect_ratio0.991119
-left_io2core40-bottom_io2core40-right_io2core40-top_io2core40
25
输入上述命令即可创建floorplan,此外,也可通过图形界面创建,在
LayoutWindow的菜单栏中依次选择Floorplan→CreateFloorpla。
其结果如下图所示。
(4)加入padfiller
和IOCorner一样,IOFiller也不是必须的,在打线和封装允许的情况
下,可以将IO与IO挨着放置,中间不留空隙,不插入IOFiller(即在打线
和封装能够实现的情况下(需要咨询封装厂),允许IO与IO挨着放置,这
样也不会出现DRC和LVS的违反。不会出现DRC违反的意思是即使IO挨
着放,相邻两个IO内部所有层次的间距都不会有DRC违反;不会出现LVS
违反的意思是即使IO挨着放,相邻两个IO内部所有层次都不会出现短路)。
除此之外(也就是IO和IO中间有空隙),如果IO中间没有插入IOFiller
的话,可能会出现供电问题以及DRC的违反。
输入命令
insert_pad_filler-cell"pfeed10000pfeed05000pfeed02000pfeed01000
pfeed00500pfeed00200pfeed00100pfeed00050pfeed00010pfeed00005"
(5)加入endcap
输入命令
add_end_cap-respect_keepout-respect_blockage-lib_cellSHFILL3_HVT
加入endcap的目的是为了保证芯片边缘和芯片中间栅和氧化层的一致性,
避免因为光刻、刻蚀的原因使得芯片边缘处标准单元的时序和中间标准单元的不
一致。
26
完成这一步之后可以输入
identify_clock_gating
report_clock_gating
查看时钟门控如下图。
(6)布局规划
在完成上述步骤之后,我们得到了一个基本的布局规划版图,但这个版图
的布局并不最优,也不是很好,我们可以手动的对版图位置进行调整。首先进入
layoutwindow界面,我们可以看见之前的版图,通过滑动鼠标滚轮可以放大和缩
小,F键可以居中,然后我们可以选中其中的模块右击,出现如下图所示的选项,
可以复制,删除,移动等,在这里我们选择move/resize调整PAD的位置,同时
我们也可以使用工具栏上的尺子进行辅助。
调整完后如下图,但这布局规划并不是唯一结果,而且这个布局还应添加一些
filler充满白框内的空隙,实际操作时具体情况具体分析。
27
(7)布局规划评估。
输入命令
create_fp_placement-timing_driven
set_zero_interconnect_delay_modetrue
report_timing
set_zero_interconnect_delay_modefalse
查看时序是否违反,slack为正即没问题。
输入命令
create_fp_placement-congestion_driven
create_fp_placement-congestion_driven-incrementalall
report_congestion
(8)电源地规划
#创建PGstrap
28
create_rectilinear_rings-nets{VDDVSS}-offset{55}-width{1010}
-space{55}-layers{M4M5}#创建corePGRings
set_fp_rail_constraints-add_layer-layerM4-directionhorizontal-max_strap1
-min_strap1-max_width2-min_width2-spacingminimum
set_fp_rail_constraints-add_layer-layerM5-directionvertical-max_strap4
-min_strap2-max_width2-min_width2-spacingminimum
set_fp_rail_constraints-set_ring-nets{VDDVSS}-horizontal_ring_layer
{M4}-vertical_ring_layer{M5}-ring_width5-ring_offset5-extend_strap
core_ring
其结果如下。
#查看IRdrop
synthesize_fp_rail-nets{VDDVSS}-voltage_supply1.1
-synthesize_power_plan-synthesize_power_pads-analyze_power-power_budget
10-use_strap_ends_as_pads-create_virtual_railM3
满足要求则输入commit_fp_rail
29
#创建macroPGrings、MacroPGstraps,并连接macro的PGpins和布局约束
set_pnet_options-complete"M4M5"
create_fp_placement-incrementalall
preroute_standard_cells-extend_for_multiple_connections-extension_gap20
-connecthorizontal-remove_floating_pieces-do_not_route_over_macros
-fill_empty_rows-port_filter_modeoff-cell_master_filter_modeoff
-cell_instance_filter_modeoff-voltage_area_filter_modeoff-route_type{P/G
nConn}
输入命令save_mw_cel-as2_floorplan保存设计
至此便完成了布局规划,接下来我们就可以查看版图大概图样,在
layoutwindow选择左边界面的settings,level选择1,chipviewname选择CEL,
亮度调为100%,点击apply即可观看规划好的版图。
30
2.3布局
首先如果之前关闭了设计,可按照之前的方法打开上一步骤保存的设计,
之后将不再赘述这一过程。完成了布局规划之后,后面的步骤就比较简单了,
布局则只需要几条命令即可完成。
#布局环境
set_optimize_pre_cts_power_options
identify_clock_gating
#开始布局
place_opt-power
derive_pg_connection-power_net{VDD}-ground_net{VSS}-power_pin
{VDD}-ground_pin{VSS}
#查看布局后时序
report_timing
#查看布局后的拥塞
report_congestion
#查看是否存在时序的DRC违反
report_constraint-all_violators
#查看总得报告
create_qor_snapshot–namecel_name
save_mw_cel-as3_placement#保存设计
31
2.4时钟树综合
CTS的全称是ClockTreeSynthesis,其目的是尽可能的使同一个时钟信
号到达各个终端节点的时间相同。CTS的实现办法最常见的是通过在时钟信
号的各个分支上插入buffer或者inverter来balance时钟信号的延迟。
在用ICC进行PR时,CTS过程中以及CTS之后有关时钟延迟信息的更
新与报告非常重要,因为CTS之后,理想的时钟就变成了实际的时钟,因此
原来理想的延迟信息都应该换成实际的值。
CTS命令如下
#单元连接
connect_tie_cells-tie_high_lib_cellTIEH_HVT-tie_low_lib_cellTIEL_HVT
-max_fanout5-obj_typecell_inst-objects[get_cells-hier*]
#为时钟布线选择自己定义的NDR,以及金属层次
set_clock_tree_options-max_transition0.500-max_capacitance600.000
-max_fanout2000-max_rc_scale_factor0.000-target_early_delay0.000
-target_skew0.000-buffer_relocationTRUE-gate_sizingFALSE-buffer_sizing
TRUE-gate_relocationTRUE-layer_list{M1M2M3M4M5M6M7M8M9}
-logic_level_balanceFALSE-insert_boundary_cellFALSE-ocv_clustering
FALSE-ocv_path_sharingFALSE-operating_conditionmax
#开始时钟树综合
clock_opt-fix_hold_all_clocks-no_clock_route
#修复hold违反
set_fix_hold[all_clocks]
#对所有的标准单元的电源地进行逻辑连接
derive_pg_connection-power_net{VDD}-ground_net{VSS}-power_pin
{VDD}-ground_pin{VSS}
#完成时钟树综合后,即可查看报告
report_clock_tree-summary(报告的是GlobalSkew)
报告中sinks表示时钟树sinkpin(stoppin,是用于平衡延迟的时钟树的端
点)的数目;CTBuffers表示时钟树综合阶段插入的时钟树单元的数目;ClkCells
是时钟树中所有单元的总数,包括现已存在的门数量;skew为时钟偏斜,一般
skew不能太大,做时钟树之前的时钟都是理想的,在这里skew=0.0660比较符
合预定;LongesrPath是最长时钟路径;TotalDRC为时钟树违反DRC规则的数
量,报告中显示为0,即没有违反DRC规则;最后一个BufferArea表示时钟树
中所有CTBuffers的总面积和,其值为94.0032平方微米,如下图所示。
此外,还可以通过report_clock_timing-typeskew命令查看localskew,
也可以在通过report_timing查看现在的时序。
完成上述步骤后,即可保存设计save_mw_cel-as4_cts
32
2.5布线
ICC有两种布线模式,一种是传统的类似于Astro中的基于格点的布线
方法,另一种是Zroute模式,这是对传统基于格点的布线模式的延伸,线可
以不用非得沿着格点进行布线,这种布线方法能非常有效解决很多DRC的
违反,所以这里采用该模式。
首先要加载天线效应文件,防止布线过程中出现天线效应的违反。
derive_pg_connection-power_net{VDD}-ground_net{VSS}-power_pin
{VDD}-ground_pin{VSS}#电源地连接
check_zrt_routability-error_view$DESIGN_NAME(设计名称).err
source../../library/tech/icc/saed90nm_1p9m_
#进行信号完整性(SI)优化
set_si_options-delta_delaytrue-static_noisetrue-timing_windowfalse
-min_delta_delayfalse-static_noise_threshold_above_low0.30
-static_noise_threshold_below_high0.30-route_xtalk_preventiontrue
-route_xtalk_prevention_threshold0.35-analysis_effortmedium
-max_transition_modenormal_slew
#时钟线布线
route_zrt_group-all_clock_nets
#普通信号线布线
route_zrt_auto
route_opt-stagedetail-xtalk_reduction
#电源地连接
derive_pg_connection-power_net{VDD}-ground_net{VSS}-power_pin
{VDD}-ground_pin{VSS}-create_portstop
完成上述步骤后可以在layoutwindow中放大图形查看中间core与之前
的区别。
#查看时序
report_timing
33
如果时序有问题,可通过命令focal_opt-hold_endpointsall-efforthigh
修复hold违反。
#DRC验证
verify_zrt_route
这里也可以在layoutwindow,Route→VerifyRoute进行DRC验证
下图为DRC验证结果,可以通过命令
route_zrt_detail-incrementaltrue-initial_drc_from_inputtrue
修复DRC
以上即完成了布线过程,输入save_mw_cel-as5_route即可保存设计
2.6DFM与DRC和LVS验证
布线工作完成之后,主体工作已经完成,但是一般都还会进行可制造
性设计(DesignforManufacturing),该问题会影响设计的芯片在制造出来
之后的良率,一般DFM规则不用全部满足,根据需要,大概98%以上已经
34
很好了。对于工艺特征尺寸比较大的工艺而言,DFM规则会比较少,比较
容易满足,但是对于深亚微米工艺而言,DFM规则会更多,更复杂,有些
DFM规则是必须满足的。有些DFM的操作也是必须要做的,例如插入Core
Filler,因为它也会影响到DRC。
问题和解决方法归纳如下:
GateOxideintegrity(栅氧完整性)->antennafixing(天线效应修复)
Viaresistanceandreliability(通孔电阻和可靠性)->extracontacts(额外的接
触)
RandomParticledefect(随机微粒缺陷)->Wirespreading(增加线间距和线宽)
Metalerosion(金属侵蚀)->metalslotting(挖槽)
Metalliftoff(金属翘起)->metalslotting(挖槽)
NWell间距问题->填充CoreFiller
MetalOver-Etching(金属过刻蚀)->metalfill(用金属填充空白区域)
下面正式开始设计,打开之前完成布线后的文件,在这里只进行corefiller
的填充。
#填充corefiller
setUseFillers"SHFILL128_HVTSHFILL64_HVTSHFILL3_HVT
SHFILL2_HVTSHFILL1_HVT"
insert_stdcell_filler-cell_with_metal$UseFillers-connect_to_power{VDD}
-connect_to_ground{VSS}
下面进行版图验证。首先是DRC验证,其步骤与布线之后的DRC验证
一样,然后是LVS验证。
在layoutwindow选择verification→LVS
出现如下界面,点击下方的OK进行LVS验证。
35
验证结果如下。
LVS出现的问题解决办法:
可以忽略的问题:FloatingPort、FloatingNet
不可忽略的问题:Open、Short
1、Open问题:
用route_zrt_eco进行修复;
2、Short问题:
手动或者用命令删除Short的Nets,然后用route_zrt_eco进行重新绕线。
如果是大面积的Short很可能设计没救了,去Floorplan阶段、布局等各个阶
段看Congestion找问题。
2.7保存设计
#gds文件保存
set_write_stream_options-map_layer
../../library/tech/icc/-child_depth20-flatten_via
36
derive_pg_connection-power_net{VDD}-ground_net{VSS}-power_pin
{VDD}-ground_pin{VSS}-create_portstop
verify_lvs-ignore_floating_port
set_write_stream_options-map_layer
../../library/tech/icc/-child_depth20-flatten_via
write_stream-formatgds
-cells{7_corefiller}../results/${DESIGN_NAME}.gds(保存位置自定)
#网表文件保存
write_verilog-diode_ports-wire_declaration
../results/${DESIGN_NAME}_layout.v
write_sdf-version1.0-contextverilog
../results/${DESIGN_NAME}_
write_sdc../results/${DESIGN_NAME}_-version1.9
#该保存文件用于后续PT做静态时序分析
extract_rc
write_parasitics-output
../results/${DESIGN_NAME}_layout-formatSPEF-compress
保存完设计后,我们可以查看一下我们最好所设计好的版图,跟布局规
划类似,在layoutwindow左边选择settings,level为1,chipviewname为CEL,
亮度为100%,点击Apply。
设计好的版图如下。
37
此外,我们可以在mainwindow的design→report中查看面积和功率报告。
一般来说,完成ICC后的面积报告与DC差别不大,但功率报告有所不同,DC
的功率一般都不太准。