在启动ICC工具之前,检查数据准备是否齐全,主要包括:
(1)非库文件:
(2)库文件:
1. 标准单元库( .db文件 ):用于提供std cell、IO、Macro的时序、功耗和面积等信息。
2. 工艺文件( .tf文件 ):包含各个金属层对应的工艺参数(如图形定义及显示、互连线工艺信息和通孔信息),每种工艺对应唯一的工艺文件。
3. 寄生参数库( TLU+文件 ):RC寄生模型文件,用来计算互连线RC的。其一般会对深亚微米的一些效应进行建模,一般有max和min两个corner的模型。
4. MilkWay参考库:包含标准单元库、IO库、Macro库的各种参考库。
Milkway知识补充:
Milkway数据库包含同一个cell的不同表示,称为cell的 “ 视图 ” ,它可以分为参考库和设计库。且ICC工具只能创建设计库,参考库需要借助Milkway工具。
Milkway库最重要的功能就是记录工艺以及物理相关的信息,主要体现在FRAM View和CEL View上,除此之外,还可以记录PPA等信息,下面来具体了解一下这两种View:
a. CEL View:诸如通孔via、标准单元、宏单元或整个芯片的物理结构的完整版图信息;包含cell的布局、布线、引脚和网表信息。
b. FRAM View:用于布局布线的抽象化的版图物理信息,只有单元的轮廓、引脚位置和层、Metal blockages。
icc_shell
printvar sdc_file
start_gui
create_mw_lib -technology $tech_file -mw_reference_library "$mw_path/sc $mw_path/io $mw_path/ram16x128" -bus_naming_style {[%d]} -open $my_mw_lib
ls -a risc_chip.mw
#或
icc_shell > ls risc_chip.mw
import_design $verilog_file -format verilog -top $top_design
verilog网表文件被读入后,会弹出Layout Window窗口,此时由于没有进行布局规划,设计中的所有单元都被叠放在原点,如下图:
问题1:Milkway设计库有什么变化?
回答:库中增加了一个CEL文件.
check_library #默认检查命令,会报错,忽略即可
set_check_library_options -all #完整检查命令
注:a. 这里使用默认检查而不是完整检查,因为完整检查包括UPF power的约束、MMMC和CCS电流源模型的检查,这些检查将生成许多警告和错误,不适用于我们的库。
b. 若以上检查列出了缺少或不匹配的标准单元、macro和IO pad,就要修改库文件。
check_tlu_plus_files
主要检查 itf 、mapping file、tech file之间的一致性,如金属层和via的名字、最小宽度和最小间距等。
list_libs
注:可以发现有6个逻辑库在启动环境设置文件(.synopsys_dc.setup)中被定义,及两个总是被通用逻辑库 getch.db和standard.sldb 加载的。
source $derive_pg_file
check_mv_design -power_nets
在菜单栏中依次选择 " File "—"Import ”—“ Read SDC ”,Version选择Latest即可,或输入命令
read_sdc $sdc_file
注:接下来的几条命令用来验证设计的关键约束,或获取关键约束的特殊信息,对于后续的布局布线非常有用。
1. 检查是否缺少任何关键时序约束(如时钟、输入输出约束)
check_timing
注:检查结果不应该出现任何警告或报错,报告末尾出现“ 1 "表示没有缺失或不一致的约束。
2. 检查设计是否有时序例外或时序异常。如false path、multicycle path及最小最大延时约束,这些约束对于单周期时序属于例外。
report_timing_requirements
3. 检查是否有禁止时序分析的路径。若存在禁止的时序路径,需要和前端人员核对在物理设计中是否需要。
report_disable_timing
4. 检查设计是否已经设置为特定的 “ mode ”或 “case ”。如功能或测试模式。这主要用来检查设计是否处于物理设计优化的正确模式。
report_case_analysis
report_clock
report_clock -skew
注:输出报告确认时钟没有“ 传播 ”属性。(没有做CTS)
注:报告表明时钟树效应正在建模(如存在skew、transiton、insertion delay).
6. 执行时序和优化脚本文件( ./scripts/opt ctrl.tcl )。
source $ctrl_file
在 .synopsys_dc.setup 文件中被定义。
7. 设置 0 互联延时约束并报告时序。此时是最理想的情况,在该模式下报告时序,不应该存在setup违反,若存在,需返回前端修改设计,或修改SDC中约束值。
source sc[Tab]z[Tab] #该脚本中包含了0互联延时命令
zic_timing,tcl脚本内容如下。
注:
a. 默认情况下,时序报告显示的是最大延时(setup)时序,若要查看最小延迟或hold报告,需要输入以下命令:
report_timing -delay min
b. 此外,还可以用以下命令来报告设计中的DRC问题,如下
report_constraint -all
8. 上图中的redirect -tee命令是显示相应的时序报告,并保存报告。可以通过在icc_shell中执行“ cat ”查看文件内容。
exec cat zic.timing
结果与第7步一样。其中有三个时序路径被列出,分别是input、output 和 clk,这些路径在时序优化控制文件中被定义(第6步可以看出)。
9. 移除理想网络。
remove_ideal_network [get_ports scan_en]
" 扫描使能 “信号(scan_en)被定义为一个理想网络(在$sdc_file),以防止综合缓冲这个信号。移除理想的网络定义,以便在物理设计期间进行缓冲器插入。
10. 保存单元,并观察在risc_chip.mw/CEL文件下新生的文件。
save_mw_cel -as RISC_CHIP_data_setup
ls
至此,ICC_lab1的数据设置工作基本完成,接下来的基本流程将在以下几篇文章详细展开。