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啥啥啥的文件还是用的到的。
工程文件:
.mw文件是执行脚本生成的,不用准备,solution应该是个隐藏文件,里面放着执行布局布线的顶层脚本run.tcl,初学也不用准备。还有一个隐藏文件是.synopsys_dc.setup,这个要有,可以参考lab里面的,但是里面涉及到的路径要自己改。
左边是lab2,右边是自己的,修改完的对照。
def文件是floorplan之后生成的,不用准备。sdc要自己写,其实就是dc中的那些,时钟周期,输出输出delay,驱动强度等等,也可以参考lab。
script下放的是各种要用到的脚本,因为PR流程比较繁琐,所以脚本都拆开写了,然后在最顶层也就是run.tcl文件中去source“子脚本”(瞎起的名字)
data_setup、floorlan要用到的脚本不一样。
ref下面有6个文件夹:
下图tcl文件是照着lab改的,工艺库里没有
tools这个文件夹原封不动从lab上扒下来的,icc_setting.tcl文件也是
第四步 打开icc,执行脚本
在有.synopsys_dc.setup文件的目录下打开终端,输入icc_shell -gui
删除可能存在的.mw:
建库,读设计文件,读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