欢迎大家评论转发关注,不定时更新!
本节我们将从设计网标的导入开始入手,从最简单的流程依次说明怎么利用ICC去进行后期任务。
1、Create a Milkway Library首先,如上节所讲,通过一个.synopsys_dc.setup进行一些设计的常规设置,例如下图所示,具体就是之前讲的一些例如:target_library,link_library,tech_file,tlup_file,sdc_file等。
打开软件GUI界面后,通过File->Create Library,打开Create Library 对话框,然后分别定义library name,technology file以及在librarys 对话框分别加入IO/RAM以及stand_cell的库,具体如下图所示。
同理也可以通过命令创建Milkway Library:
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
2、载入设计(Netlist,TLU ,Constraints等)创建好自己的Milkway库,然后打开后,就能读入我们自己的设计文件,开始着手我们的PR工作,选择File->Import Designs ,文件输入类型选择Verilog,在下方的Top design name 输入$top_design(或者 RISC_CHIP)。
然后点击OK,就会打开Layout Window窗口,在Layout 窗口会显示当前设计包含的所有Cell,较大的IO单元和Marco 单元以浅蓝色显示,而std 单元默认会放在左下角以浅紫色显示。
该过程也可以通过命令输入:
import_designs $verilog_file -format verilog -top $top_design
导入设计的网标后,我们还需要指定TLU ,map文件(TLUPlus文件是存储RC系数的二进制格式文件,通过该文件,用于在PR过程中,精准提取电路PR后的RC结果,用于时序分析),通过file->Set TLU 依次设置,具体如下图所示:
set_tlu_plus_files -max_tluplus $tlup_max \
-min_tluplus $tlup_min \
-tech2itf_map $tlup_map
读入tlu_plus文件后,可以通过check_tlu_plus_files对当前文件进行check。
通过以下脚本,将各cell对应的电源引脚和电源PIN进行连接
sdc文件是这个设计的时序约束,通过读入该文件,能够在PR过程中实时检查时序,看当前实现是否符合设计约束,本设计的sdc具体内容如下:
Read_sdc $sdc_file
- 一般情况下,在读入设计后,我们可以通过check_timing,来检查当前的设计约束是否有遗漏,例如时钟的定义以及输入输出接口约束是否完备,防止在PR过程中发现约束遗漏,导致返工。该命令返回1,说明当前约束没有遗漏。
- 检查当前设计是否有特殊的时序约束例如timing exception(主要包括false path,Multy cycles,max_delay,min_delay),提取知道这些特殊约束对后面的PR工作是特别有利的,能够让我们提前考虑提前规划布局等,相关命令:report_timing_requirements。
- 检查是否有disable timing路径,如果有那么就需要找上游确认,在物理设计阶段是否需要考虑。具体命令:
Report_disable_timing
- 检查设计是否为特定的“模式”或“情况”配置,例如“功能”和“测试”模式。Case 分析是通过将设计的某一端口tie 0 或tie 1 在进行时序优化分析过程中,通过该检查我们能够确保当前的PR是否是在正确的模式下进行,具体命令:report_case_analysis
- 检查时钟的约束是否正确,通过report_clock,我们能够看到当前时钟有没有"Propagated”如果有,那么在时钟的attribute列会有"p",否则没有,在此阶段由于我们没有进行时钟树综合,没有Propagated是我们想要的。通过report_clock -skew,可以看到时钟树对时钟带来的影响,体现在dealy,transition time。
至此,我们已经读入了我们的设计,接下来就可以初步利用工具报一下当前设计的timing 信息,看在PR之前当前网标是否有时序违例,如果有该违例后端能够可接受,在report_timing之前,我们先对report进行一些约束,具体如下:
跑一个“零互连”tiiming报告,工具会报出当前设计最差的时序路径,其中每组一条,总共三组,之所以是三组是因为在上图中我们将整个设计分成了三组,分别为INPUTS,OUTPUTS,COMBO。其中一组的具体timing信息如下图所示(默认情况下每组报的是setup信息,如果想获得hold信息,那么需要用report_timing -delay_type min 即可
如果上述检查都没有问题,那么我们就可以把当前读入的设计进行保存,可以以malkway格式进行保存,那么下次我们可以直接以库的方式打开当前设计,而不需要重复上述过程。
在保存之前,我们首先需要将上游给的如下约束去除,在综合之所以把scan_se设置成ideal network 是因为scan_en的fanout一般情况下很大,如果综合时就对此进行时序优化,综合工具就会在综合阶段在该信号后插入过多buffer,而这并不是我们期望看到的,所以综合阶段将此信号设成ideal_network,即驱动无穷大;相反到了PR阶段,就需要将此约束取得,以允许PR工具优化此信号的时序。
remove_ideal_network [get_ports scan_en]
最后,就可以将当前的设计进行临时保存,具体命令如下,该临时库在我们创建的mw库的CEL文件夹中。
save_mw_cel –as RISC_CHIP_data_setup
通过上述步骤将设计读入后,我们还不能开始PR工作,因为在物理设计之前,我们必须要知道我们的PR是在一个什么样的物理约束下实现,即Floorplan,在后端设计中,一般一个floorplan 文件是一个标准的DEF文件,该文件可以通过ICC产生,或者由一个第三方工具产生,其内部具体就是约束了我们当前设计的物理信息,主要包括芯片PR的形状,PIN的位置以及一些硬IP的物理位置等。
如果我们已有一个DEF文件,那么通过read_def $def_file就可以读入def文件,本设计中读入我们已有的def文件后,那么LayoutWindow就会显示如下,可以看到读入def文件后,芯片物理边界约束,power ring,power straps,RAM及Pad-IO都已经在def文件中约束,固这些信息也都已经体现在了Layout布局中,但是注意到左下角的stand_cell并没有放置,其还在导入设计是的位置。
同样芯片的floorplan确定后,我们可以将此保存为malkway文件,下次可以直接以库的形式打开,具体如下:
save_mw_cel –as RISC_CHIP_floorplanned
4、开始Placement芯片的Floorplan确定后,就可以将上面为堆放在一起的stand_cell进行摆放,用到的命令是place_opt,该命令功能十分强大,摆放后我们可以同步取检查摆放后的时序,看是否满足要求。摆放后,我们可以发现之前的standcell 已经摆放到了power rail上面。
除了分析摆放后的时序后,我们还要看摆放后的Congestion是否满足要求,具体命令如下:
report_congestion -grc_based -by_layer -routing_stage global
当然也可通过gui界面打开Congestion分析。
Place后同样可以保存placed后的设计为mailway文件
save_mw_cel –as RISC_CHIP_placed
5、时钟树综合在时钟树综合过程中,我们需要考虑时钟的实际uncertain,并且考虑设计中的hold违例,时钟树综合的命令主要通过clock_opt,具体命令如下所示:
时钟树综合完成之后,我们同样需要report_timing去实时检查timing是否满足要求。可以看到时钟树综合完成之后,standcell 摆放的位置和之前已经发生了变化,这是因为时钟布局的引入,让工具区基于时序重新考虑摆放了standcell的位置。
通过layoutwindow窗口的clock->color by clock tree 能够显示当前时钟树的走线,可以看到时钟的起点是芯片IO-pad的PLL输入端口。
时钟树综合完成,并满足要求后,我们同样需要保持当前设计。
save_mw_cel –as RISC_CHIP_cts
6、Routing时钟树综合完成之后,我们就可以看起routing过程,此过程也主要通过软件自动完成,主要通过命令route_opt实现,执行该命令后,我们可以看到各cell之间已经有了实际的连线,具体如下。
同样执行完routing后,需要实时检查时序(setup 和hold),同时时序满足要求后我们需要保存设计。
save_mw_cel -as RISC_CHIP_routed
PR的简单流程就是上述的步骤,这里只是就每个步骤进行了简单介绍,其实每个步骤里面的细节还是特别多的,详细后面章节介绍。
,