ICC确实是不太好上手的一个软件,从教程和脚本就看得出来,以前跑dc vcs之类的也就一个几行脚本,换到ICC就有点可怕。

第一步 找视频 找教程 找lab

视频去b站上找,听人讲能学到你自学接触不到的东西,但是只能听个大概,不能达到手把手效果;

教程当然首推ICC官方教程,主要有workshop、user guide、workshop student guide;

lab和教程是配套的,目前能在eetop上找到2010、2012、2013这几个年份的lab和教程,还是有很多区别的。

 

第二步 跑lab

把data_setup跑完,basic flow跑完,基本概念比如什么是物理库了解了就能掌握个大概;跑lab有很不好的一点是,它的文件和脚本都是准备好的,但是它不告诉你实际中这文件在哪儿,你不知道怎么去找,文件过多的情况下会给人很大压力,毕竟你只有一个自己的rtl代码和综合出的网表,工艺库也看不太懂。

这个时候就比较考验耐心了。

跑完这两步就想着跑我自己的lab了,毕竟吃透lab也不是件容易的事情,而且很可能这些lab都跑完了换个库你也不一定会跑自己的design。

 

第三步 下载工艺库,准备data_setup

eetop上能下载到smic180,文件超大,有点费银子。关于数字的东西都在digital那个文件夹里,物理库有io、标准单元、ip库,从smic180里面能找到前两个。布局布线相关的都在Apollo里面。这个文件要对照着lab里面的把它们都找到,当然也不是所有文件都有,比如.map文件,要自己写,照葫芦画瓢再多一点思考是可取的。建议用6层金属的,金属层太少貌似不实用。另外这里有一个坑就是smic180压缩包里的东西解压出来有错误,所有的:都变成了_,所以在linux下要用 rename空格'_'空格':'空格*把它们都改过来,不然ICC读库的时候无法识别那些命名错误的文件。CEL文件夹虽然PR用不到但也别删除,因为里面有一个unit啥啥啥的文件还是用的到的。

 工程文件:

aigc课程目录 icc课程_时钟周期

 

 .mw文件是执行脚本生成的,不用准备,solution应该是个隐藏文件,里面放着执行布局布线的顶层脚本run.tcl,初学也不用准备。还有一个隐藏文件是.synopsys_dc.setup,这个要有,可以参考lab里面的,但是里面涉及到的路径要自己改。

aigc课程目录 icc课程_压缩包_02

左边是lab2,右边是自己的,修改完的对照。

aigc课程目录 icc课程_aigc课程目录_03

 

 def文件是floorplan之后生成的,不用准备。sdc要自己写,其实就是dc中的那些,时钟周期,输出输出delay,驱动强度等等,也可以参考lab。

aigc课程目录 icc课程_压缩包_04

 

 script下放的是各种要用到的脚本,因为PR流程比较繁琐,所以脚本都拆开写了,然后在最顶层也就是run.tcl文件中去source“子脚本”(瞎起的名字)

data_setup、floorlan要用到的脚本不一样。

ref下面有6个文件夹:

aigc课程目录 icc课程_aigc课程目录_05

 

 

aigc课程目录 icc课程_隐藏文件_06

aigc课程目录 icc课程_aigc课程目录_07

 

下图tcl文件是照着lab改的,工艺库里没有

 

aigc课程目录 icc课程_压缩包_08

 

 

aigc课程目录 icc课程_aigc课程目录_09

 

 tools这个文件夹原封不动从lab上扒下来的,icc_setting.tcl文件也是

aigc课程目录 icc课程_隐藏文件_10

 

 

 

 

 

 第四步 打开icc,执行脚本

在有.synopsys_dc.setup文件的目录下打开终端,输入icc_shell -gui

删除可能存在的.mw:

aigc课程目录 icc课程_隐藏文件_11

 

 建库,读设计文件,读tlu,没啥问题的前提是在启动文件中把变量都设定好:

############################################################
# Create Milkyway Design Library
############################################################
create_mw_lib $my_mw_lib -open -technology $tech_file \
	-mw_reference_library "$mw_path/sc $mw_path/io"############################################################
# Load the netlist, constraints and controls.
############################################################
import_designs $verilog_file \
	-format verilog \
	-top $top_design############################################################
# Load TLU+ files
############################################################
set_tlu_plus_files \
	-max_tluplus $tlup_max \
	-min_tluplus $tlup_min \
	-tech2itf_map  $tlup_map