DC综合全过程及使用的命令
标签:
dc综合it |
分类: 专业 |
DC的初始化文件.synopsys.dc.setup,该文件是隐藏文件,需要用ls –a显示
读取文件
DC支持多种硬件描述格式, .db .v .vhd等
对于dcsh工作模式来说,读取不同的文件格式需要不同的参数
Read -format Verilog[db\vhdl ect]
file
对于tcl工作模式来说,读取不同文件格式使用不同的命令。
Read_db
Read_verilog
Read_vhdl
读取源程序的另外一种方式是配合使用analyzer命令和elaborate命令;
Analyzer是分析HDL的源程序并将分析产生的中间文件存于work(用户可以自己指定)的目录下
Elaborate则在产生的中间文件中生成verilog的模块或者VHDL的实体
缺省情况下,elaborate读取的是work目录中的文件
当读取完所要综合的模块后,需要使用link命令将读到DC存储区中的模块或实体连接起来
注意:如果在使用link命令后,出现unresolved design reference的警告信息,需要重新读取该模块,或者在.synopsys_dc.setup文件中添加link_library,告诉DC到库中去找这些模块,同时还要注意search_path中的路径是否指向该模块或单元电路所在的目录
Link命令执行后,DC就将模块按照RTL级或者门级的描述将电路连接起来,之后的各种限制条件就可以对该电路的顶层模块施加
DC限制条件施加的对象
针对以下电路成分:输入输出端口、模块、子模块的实例化、单元电路、连线及电路的引脚。在使用DC命令的时候,不要使用模糊的对象,例如,如下面的电路:
Set_load 3 Clk
由于在电路中含有名称为CLK的pin、port和net,因此,DC无法知道该处的load是施加在哪个对象上,注意到一般连线会驱动负载,该命令就改为:
Set_load 3 [get_nets
Clk]
Set_load 3
find(net,”Clk”)
路径的划分与合法路径
DC综合的时候是基于路径的优化,对于DC来说,合法的路径必须满足以下条件
DC设定的限制条件的值都是无单位的,这些单位都是由工艺库中给定的
可以用report_lib
定义电路的工作环境和综合环境
1.Set_operating_conditions
不同的工作环境对应的单元电路的延迟不相同
温度升高、电压降低、电路的特征线宽增大都会使得单元电路的延迟增大
电路的工作环境一般在工艺库中都有给定
命令格式:
命令使用说明
2.set_min_library
命令格式:
set_min_library max_library –min_version min_library | -none
命令的使用说明:
3.set_wire_load_model
在DC计算路径的延迟时,工具会估计连线的延迟,该命令是设置一个连线延迟估计的模型。
但是在综合完成后,用report_timing –nets一般看到的连线延迟都是0,这是因为在做综合之前,工具使用的线负载模型是比较粗糙的,所以连线延迟比较小。另外,不仅互连线本身有延迟,互连线的寄生电容、寄生电阻会影响到单元电路的延迟
注意:在深亚微米、超级亚微米阶段互连线的延迟在整个路径的延迟中占一半左右。因此,现在一般在综合之前会做一次floorplan,然后提取出线负载模型来供综合工具使用,以便更加准确的估计连线延迟。Synopsys的另外一个工具physical compiler就可以将floorplan跟综合放在一起做
命令的格式为:
set_wire_load_model –name model_name –lib_name library –max –min
设置综合时使用的线负载模型,用于估计电路的连线延迟。由于布线之前没有准确的电路走线。因此,即使设置该模型,也不能准确估计电路的互连线延迟。
如果没有wire_load_model,可以将auto_wire_load_selection参数设置为true,则DC自动根据综合之后的面积来选择一个统计的线负载模型用于估计连线延迟
Set auto_wire_load_selection true
-max –min选项同上,分别指定该模型用于估计最大路径延迟和最小路径延迟。 -lib_name指定包含该线负载模型的工艺库
一个线负载模型的例子:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
set_wire_load_mode
如果只是在子模块综合中设置了线负载模型,那么跨模块边界的连线延迟如何估计,该命令就是用于设置模块互连线延迟估计所使用的模块
该模式有三种选择:
Top
Enclosed
Segmented
命令的格式为:
4.set_drive
为了更加准确的估计输入电路的延迟,DC需要知道信号到达输入端口的过渡时间(transition time)。Set_drive使用确定的值来估计输入端的输入电阻,从而得到输入端口的延迟;
而set_driving_cell是假定一个实际的外部驱动单元来估计输入的transition time
该命令用于设置输入端口或者双向端口上的电阻值,该电阻值是用于驱动输入端口的单元的输入电阻,因此,该值越大,就说明输入端口的驱动能力越弱,连线的延迟也就越大。
更常用的是set_driving_cell命令,以库中某个单元电路的引脚驱动能力为基准来模拟输入端口的驱动能力。
命令的格式:
缺省情况下,该值为0,即输入具有无限大的驱动能力
电路的优化阶段,输入端口的驱动能力用于计算输入端口到门电路延迟,一般来说,输入端口的驱动能力可以按照以下公式影响延迟
Time = arrive_time + drive*net_load + connect_delay
5.set_driving_cell
set_driving_cell –lib_cell buf1a3 –pin Y Reset
6.set_load
由于外部电路的负载将会影响到接到端口上单元电路的延迟,因此需要对端口的带负载能力做限制。为了比较精确地计算输出电路的延迟,DC需要知道输出电路驱动的所有负载。
命令的格式:
即使用ssc_core_slow库中bufla2单元A引脚的电容负载来计算所有输出端口延迟。
电路负载的大小会影响到它的延迟,而且负载越大,延迟越大

加载中…