dc实战


定义面积约束

因为芯片面积直接关系到芯片的成本,面积越大,成本越高,所以通过 set_max_area 命令进行面积约束。

施加了一个最大面积 100 单位的约束。100 的具体单位是由 Foundry 规定的,定义这个单位有三种可能的标准:一种是将一个二输入与非门的大小作为单位 ;第二种是以晶体管的数目规定单位;第三种则是根据实际的面积(平方微米等等)。
这些时序路径可以分为三类:输入到寄存器的路径 、寄存器到寄存器之间的路径以及
寄存器到输出的路径。

定义时钟

采用一个语句 create_clock 完成

第一句定义了一个周期为 10ns 的时钟①,它的时钟源是一个称为 Clk 的端口。
第二句对所有定义的时钟网络设置为 don’t_touch,即综合的时候不对 Clk 信号优化。
在实际的电路设计中,时钟树 (Clock Tree)的综合有自己特别的方法,它需要考虑到实际布线后的物理信息,所以 DC 不需 要在这里对它进行处理,就算处理了也不会符合要求
约束输入路径
输入延时概念已经了解,当确定这段延时之后,被综合模块内部的电路延时的范围也可以确定下来了。通过 DC 的 set_input_delay 命令完成
上面的语句指出了被综合模块的端口 A 的最大输入延时为 4ns。

约束输出路径

输出延时概念也已经了解,确定了他们的延时之后,被综合模块内部的输出路径延时范围也就确定下来了。设置输入延时是通过 DC 的 set_output_delay 命令完成的

上面的语句指出了被综合模块的输出端口 B 的最大输出延时为 5.4ns。

考虑到被综合模块周围环境的变化,我们还要给电路施加这些环境属性。

设置输出负载

是通过 DC 的 set_load 命令完成

上图,给 OUT1 端口设了一个负载为 5 的值。这里的单位也是由 Foundry 提供,具
体的单位,可以通过 report_lib 命令查看,一般而言是 pf。

设置输入驱动

与设置输出负载类似,为了更加准确的估计模块输入的时序,我们同样需要知道输入端
口所接单元的驱动能力。通过 DC 的 set_driving_cell 命令完成的

它设置了模块输入端口 IN1 的驱动单元是工艺库中的 and2a0

设置工作条件

工作条件包括三方面的内容——温度、电压以及工艺。在 Foundry 提供的工艺库里,它
的各个单元的延时是在一个“标准”(nominal)条件下得到的,

其中 core_slow.db 和 core_fast.db 分别是最差和最好条件下的工艺库文件,第一句话先
用 set_min_library 设定作保持时间检查的库,第二句话则分别对应了两种时间检查需要用到 的工作条件。

设置连线负载模型

在 DC 综合的过程中,连线延时是通过设置连线负载模型(wire load model)确定的。连
线负载模型基于连线的扇出,估计它的电阻电容等寄生参数,它是也是由 Foundry 提供的。
Foundry 根据其他用这个工艺流片的芯片的连线延时进行统计,从而得到这个值。设置输入驱动是通过 DC 的 set_wire_load_model 命令完成的。

此处连线负载模型为 160KGATES。

设置扇出负载

为输出端口设定fanout_load值。
例如:set_fanout_load 2 all_outputs()


文章作者: zhr
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 zhr !
  目录