• 数字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

  • 相关阅读:
    基于Maven的MyBatis Generator逆向工程
    JQuery对象调用reset方法:Uncaught TypeError: $(...).reset is not a function
    死锁编码及定位分析
    线程池的简介及底层原理
    转载:Mysql8.0忘记 root 密码, 如何修改?
    synchronized 和 Lock 有什么区别?
    java 中的阻塞队列及生产者-消费者中的简单应用
    java 中 CountDownLatch、CyclicBarrier 和 Semaphore 的简单使用
    java中的公平锁、非公平锁、可重入锁、递归锁、自旋锁、独占锁和共享锁
    Java 集合类的线程安全问题及解决方法
  • 原文地址:https://www.cnblogs.com/sasasatori/p/15068606.html
Copyright © 2020-2023  润新知