✅ 操作成功!

数字集成电路设计

发布时间:2023-06-11 作者:admin 来源:文学

数字集成电路设计

数字集成电路设计

-

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

的功率一般都不太准。

👁️ 阅读量:0