Loading

数字asic流程实验(五) ICC布局布线

数字asic流程实验(五) ICC布局布线

1.IC Compiler简介

IC Compiler(以下简称ICC)是Synopsys公司用于把门级网表转换成代工厂可用于掩膜的版图信息的工具。其基本工作流程为

  • 数据准备(Data Setup):将门极网表、约束文件、元件库、工艺文件、物理库、寄生参数模型等输入ICC;
  • 布局规划(Design Planning):规定芯片尺寸、形状,确定IO、电源、pad位置等,放置宏单元,放置标准单元,铺设电源网络;
  • 布局(Placement):将电路中各个基本单元在芯片中进行布局;
  • 时钟树综合(Clock Tree Synthesis):将时钟信号连接至需要驱动的基本单元;
  • 布线(Routing):将各个基本单元对应端口进行连接;
  • 可造性设计(Chip Finishing):连线拓展、加宽连线,冗余通孔插入,插入填充单元,填充金属等;

如下图所示。

image-20210727095443653

即将DC综合后输出的SDC约束文件,门极网表,代工厂提供的元件库(.db),物理库(physical lib),工艺文件(.tf),RC参数文件(tlu+)等输入ICC后,通过软件中完成布局布线操作,最终会输出可以提供给代工厂进行芯片加工的版图。

image-20210727095623732

此外在完成布局布线后还要在ICC中再次导出门极网表和时序描述文件用于后仿真,与DC导出的文件的区别是

  1. ICC导出的门极网表文件中的模块与连线与版图是严格对应的
  2. ICC导出的时序描述文件中的延时由RC参数计算而来

深入学习ICC,最好的方式是熟读Synopsys公司的《IC Compiler 1 Workshop Student Guide》。

2.版图基本知识

使用MOS工艺制作集成电路时,由于集成电路的制作是平面加工工艺,而芯片是立体结构。平面工艺到立体结构的实现,需要多层掩模版。每一层掩模版需要用一层版图来表示,因此版图也是分层的,即不同层的版图代表不同的掩模版。版图是用二维图形表示电路的三维结构,版图设计的目的是完成集成电路加工所需的各个掩模版上的图形的设计。

下图为一个非门的版图:

image-20210727181633369

该非门制作时采用N阱工艺,衬底为P型,PMOS做在N阱中,其剖面图如下:image-20210727181559376

观察剖面图可以很容易的看出制作时的分层关系。制作该非门时所需要的版图包括:

  • N-well:N阱
  • active:有源区
  • N-implant:N型掺杂
  • P-implant:P型掺杂
  • poly:栅
  • contact:金属触点
  • metal1:金属连线

如下图所示

image-20210727181615981

在进行复杂集成电路加工时,单层金属连线往往不能够满足需求,因此会有多层金属连线。如本次实验使用的是6层金属布线工艺。

3.TCL脚本编写&运行

通过编写运行TCL脚本完成Data Setup步骤,该步骤主要的目的是将门极网表(.v)、约束文件(.sdc)、单元库(.db,.sdb)、物理库(physical lib)、寄生参数模型(tlu+)等输入ICC。

本次实验的TCL脚本内容如下:

set DESIGN_NAME "cic_filter"

set search_path "../lib/logic   ../lib/milkyway"     #设置搜索路径
set target_library "slow.db"   #设置标准元件库
set link_library "* $target_library"
set symbol_library " smic18.sdb "   #设置标准元件图标库

create_mw_lib my_lib1.mw \
             -technology ../lib/milkyway/tech/milkyway/smic18_6lm.tf \
             -mw_reference_library  ../lib/smic18 -open    #使用工艺文件和物理库创建milkyway

import_designs "../dc/outputs/cic_filter_post_dc.v"  -format verilog -top cic_filter  #导入网表文件

uniquify_fp_mw_cel
current_design $DESIGN_NAME

set_tlu_plus_files  -max_tluplus  ../lib/milkyway/tech/tluplus/smiclog018_6lm_cell_max.tluplus  \
				    -min_tluplus  ../lib/milkyway/tech/tluplus/smiclog018_6lm_cell_min.tluplus \
					-tech2itf_map ../lib/milkyway/tech/tluplus/smic18_6lm_lef_smic18_6lm_tf.map   #导入RC参数文件和.map文件


report_tlu_plus_files  > reports/init/report_tlu_plus.rpt
check_tlu_plus_files   > reports/init/check_tlu_plus.rpt



remove_sdc
read_sdc  ../dc/outputs/cic_filter_post_dc.sdc   #读取约束文件
set_clock_uncertainty 2  [all_clocks]

remove_propagated_clock  [all_clocks]
check_timing 

save_mw_cel
start gui

接着需要在虚拟机中用icc_shell运行脚本

1.打开虚拟机,至/home/crazy/Desktop/experiment/icc 文件夹下,右键Open in Terminal

image-20210727184548513

2.依次输入

ic
icc_shell -f icc_setup.tcl

image-20210727184711223

3.等待脚本运行完成,如果出现报错(和DC综合时一样,执行出错会打印0)则根据报错信息修改icc_setup.tcl。运行完后会自动进入GUI,并且可以看到各个单元。

image-20210727184911314

至此Data Setup步骤完成,可以开始进行布局布线了。

4.在GUI中布局布线

1.在icc_shell中输入

start_gui

启动GUI,①为标签栏,后续各个步骤都在标签栏中进行调用;②为芯片预览图,每一步操作后会更新该图,可以通过滚轮进行放大缩小。

image-20210727214358185

2.下面开始Design Planning

创建Foorplan,并规定core area到芯片边缘的距离,统一设置为50

Foorplan ---> Create Foorplan

image-20210727215253318

创建完毕后:

image-20210727215455909

3.创建电源和地

Preroute ---> Derive Power Ground Connection

选择Manuel connection,依次命名Power net,Power pin,Ground net,Ground pin为VDD和VSS,Create port选择Top

image-20210727215608690

此步骤完成后芯片预览图不会更新,但在Shell中会打印成功连接电源的信息

image-20210727215640575

4.创建电流环

Preroute ---> Create Rings

Nets中填写VDD VSS,Horizontal为水平布线,层数选择为第五层金属(METAL5),Vertical为垂直布线,层数选择为第六层金属(METAL6),Offset、Width和Space分别设置为5、15、5

image-20210727220048263

此步完成后芯片预览图变更如下:

image-20210727220346379

5.创建Power Straps

Preroute ---> Create Power Straps

Nets填写VDD VSS,层数选择METAL6,Width设置为5,方向选择Vertical,X start、Straps、X increment分别设置为70、5、30

image-20210727220810581

此步完成后芯片预览图变更如下:

image-20210727221025093

6.填充标准单元

Finishing ---> Insert Standard Cell Filler

Without metal中填写FILL64 FILL32 FILL16 FILL8 FILL4 FILL2 FILL1

image-20210727221815494

此步完成后芯片预览图变更如下:

image-20210727221844061

7.连接各个标准单元

Preroute ---> Preroute Standard Cells,此步结束后可以在预览图中看到很多小的横向电源条

image-20210728000524271

此步完成后芯片预览图变更如下:

image-20210728000608543

8.去除填充

Finishing ---> Remove Fillers,选择删去Standard Cell

image-20210728000653109

此步完成后芯片预览图变更如下:

image-20210728001127931

至此电源网络搭建完毕,Design Planning结束,开始Placement

9.开始进行电路单元布局,此步骤点击执行后需要等待一段时间

Placement ---> Core Placement and Optimization

image-20210728001517794

此步完成后芯片预览图变更如下:

image-20210728001604746

可以看到所有电路单元都被放进Core area中了,至此Placement结束,开始Clock Tree Synthesis

10.设置时钟树

Clock ---> Set Clock Options Target标签页中,Clock_tree选择clk,Max fanout设置为30,Routing标签页中,勾选METAL1至METAL6的全部金属层,Clock_tree选择clk_div后同样进行配置

image-20210728001812516

image-20210728001934942

image-20210728002637098

image-20210728002708751

11.开始连接时钟,Clock tree names填写clk_div clk,勾选Fix hold time violation for all clocks,等待连接完成,连接完成后可以看到芯片预览图中多出的时钟连线。

Clock ---> Core CTS and Optimization

image-20210728002823504

此步完成后芯片预览图变更如下:

image-20210728003824384

12.重新建立电源,这次Create port选择None

Preroute ---> Derive Power Ground Connection

image-20210728003141717

Shell中打印的信息如下

image-20210728003227205

至此Clock Tree Synthesis结束,开始Route

13.设置忽略的布线层,Maximum routing layer选择METAL6,Minimum routing layer选择METAL1,下面全都不勾选,代表所有金属层都纳入RC参数计算

Route ---> Routing Setup ---> Set Ignored Layers

image-20210728003330861

  1. Route ---> Net Group Route,选中All clock nets

image-20210728003515348

15.布线相关设置完成,开始布线,布线结束后各个单元模块之间就已经完成了相互连接。

Route ---> Core Routing and Optimization

image-20210728003700996

此步完成后芯片预览图变更如下:

image-20210728003726221

至此Route完成,开始Chip Finishing

16.再次进行标准单元填充,但这次的填充单元是带金属的,输入在With metal一行,Other Options标签中,勾选二三两项

Finishing ---> Insert Standard Cell Filler

image-20210728003953507

image-20210728004008022

此步完成后芯片预览图变更如下:

image-20210728004145419

至此Chip Finishing步骤结束,芯片可以说已经设计好了,接下来就是导出各个文件并进行验证了

17.依次导出网表(.v),提取寄生参数、导出时序描述(.sdf),导出寄生参数文件(.spef),以及代工厂用于加工的GDSII文件

导出网表,Output verilog file name选择文件路径时,文件命名要带.v的后缀名

File ---> Export ---> Write Verilog

image-20210728004800186

提取寄生参数

Route ---> Export RC

image-20210728004909041

导出时序约束

File ---> Export ---> Write SDF

image-20210728004930395

导出寄生参数文件

File ---> Export ---> Write Parasitics

image-20210728004952380

导出GDSII文件

File ---> Export ---> Write Stream

至此ICC布局布线全部工作完成

5.参考资料

《IC Compiler 1 Workshop Student Guide》

《CMOS集成电路的版图设计》

https://blog.csdn.net/qq_42556934/article/details/107661335

https://blog.csdn.net/weixin_46752319/article/details/107252336

https://blog.csdn.net/weixin_46752319/article/details/107313770

https://blog.csdn.net/weixin_46752319/article/details/107360843

https://blog.csdn.net/weixin_46752319/article/details/107387584

https://blog.csdn.net/weixin_46752319/article/details/107564592

https://blog.csdn.net/weixin_46752319/article/details/107633027

posted @ 2021-07-28 00:58  sasasatori  阅读(9161)  评论(15编辑  收藏  举报