数字逻辑综合 DC 相关理解 (一)


注意

  • report_lib命令可以查看工艺库中常用的物理量单位。
  • 不要人为加紧对整个设计的约束,以免限制DC对真正关键的器件适当的优化。

1. DC做了什么?

  1. 对读入的设计(verilog/vhdl/system verilog)进行翻译,得到统一的格式GTECH。
  2. 施加各种约束,接近实际电路,这样在库中才能选择更准确地映射器件;对时序和面积进行优化。
  3. 选择合适工艺库中的器件一一映射。

2. 做完综合可以得到什么?

  • .ddc 包括映射的门电路信息与网表、.v格式的网表、延时信息(sdf)、设计约束(sdc)等信息。
  • .v 网表,用作后仿真
  • .sdf 描述设计网表中单元延迟以及互连线延迟,用作后仿真
  • .sdc 约束文件,可以给到ICC,用于下一步布局布线
  • Scan_def.def 扫描链布局信息

3. 电路延迟模型

  • 器件延迟
    • NLDM
      • 表格得到的信息是上升下降沿delay的值以及output transition的值。
      • 查找表依照input transition,output load查找。
      • 65nm及更大工艺 准确可靠。
      • 电压源模型,随着连线金属电阻变大,电压源模型失真。
    • CCS
      • 电流源模型,查找表参数依然是input transition,output load。
      • 表中的值不再是定值,而是电流波形。
    • 无论是CCS还是NLDM模型,都需要注意index不要超过查找表的range,否则计算结果不准确,没有参考意义。
  • 线延迟
    • WLM 线负载模型
      • 设计规模不同,模型不同,不准确
      • 关心线上挂了多少负载,计算RC模型。并不关心线长。
    • Topographical Mode
      • 先用DC跑一版不带物理约束(布局信息)的,得到ddc网表,用于ICC初步布局,吐出物理约束DEF文件,再跑DC综合,得到第二次的ddc网表文件,再给ICC布局布线。
        • DEF Design Exchange Format, 用于不同软件之间的电路物理信息交互;对库单元以及他们的位置和连接关系进行描述。
      • dc_shell -topo 模式启动
      • 该模式下需要使用compile_ultra

4. DC的几个库文件

  • 逻辑库

    • 逻辑单元相关信息
    • 设计规则约束
    • 针对特定工艺的操作条件及线负载模型(WLM)
  • 链接库(link_library)

    • 用于解析元件使用的逻辑库
  • 目标库 (target_library)

    • 用于实现设计功能的逻辑库
  • DC使用链接库中的单元对设计进行翻译,然后再将其优化、映射到目标库上。

  • 举个例子

    • link_library:tcbn65lpwc.db,dw_fondation.sldb;
      • 其中dw_foundation.sldb 是Synopsys提供的Design Ware的综合库,除了在link_library中指定还需要在synthetic_library中指定
      • Design Ware库:它包含了一些IP,如一些基础运算和算术单元等(DWF_ mult_ tc,DWF_ div_ uns和DWF_sqrt_tc单元等)。
    • target_library:tcbn65lpwc.db
  • symbol library

    • 提供DC GUI界面设计实现的图形符号,如果使用脚本模式而不是图形模式,可以不指定。
  • 库文件一般都是.db结尾,该文件无法直接打开,需要找到对应的lib文件。

5. 读入设计文件

  • analyze & elaborate
    • analyze 对设计进行检查。
    analyze -format verilog -vcs "-f filelist.f"
    
    • elaborate 将检查后的设计转化为工艺独立的GTECH设计。该指令可以自动link。
      • link:首先确认设计需要引用哪些库单元或子设计,然后在链接库中找这些单元,之后再将设计连接到链接库中的单元。

6. 接口特性

  • 为了保证使用约束语言对电路的每一条时序路径建模精准,我们需要考虑
    • 输入/输出路径延迟约束,在这篇博客中有详细介绍。
    • 接口的环境属性,下面详细展开。

6.1 输入端口的外部驱动特性

  • 对于输入端口来说,上一级的驱动能力以及输入端口的容性负载决定了输入信号的延迟时间和transition time。
  • 驱动能力是驱动阻抗的倒数,跳变时间是驱动阻抗和输入端口容性负载的乘积。
    • 一个MOS管的开关模型是一个电阻串联一个开关,驱动阻抗越小,分压就越少,而负载上的电压越高,可以带起功率更大的负载来。
    • 跳变时间的计算是基于RC模型的。
  • 几条指令区别
    • set_driving_cell
      • 模拟端口驱动器件,工具在库中找到更真实的transition。
    • set_drive
      • 通过为input/inout端口指定电阻值来定义外部驱动强度。
    • set_input_transition
      • 指定端口transition time。
    • 对于设计顶层端口进行驱动定义时,不可以使用set_drive_cell,因为不知道顶层端口的驱动单元是什么。
    • 对于时钟、复位信号这类大扇出的信号,一般设置set_drive 0,表示驱动无穷大,并且设置set_dont_touch_network不让综合工具插入buffer。
      • 因为综合时没有布局布线信息,即使综合工具针对时钟和复位进行了优化,也是不准确的,拿一个不准确的clk信号去分析setup和hold也没有意义;正确的做法就是不要处理,而要到后端再去做CTS。
      • 对于复位信号处理:满足恢复时间约束和撤销时间约束。create_buffer_tree (???).

6.2 设置输入、输出端口的负载

  • 使用set_load指令对输入/输出容性负载进行定义。
  • 输入端口负载DC可以自动获取,不需要人为设置。

6.3 定义输出端口扇出负载

  • set_fanout_load:用于约束输出端口,设置该级扇出负载为N,告诉下一级cell,最大的max_fanout要至少大于N + 已知load。
    • 而上面那句话介绍的set_max_fanout是用来约束输入端口的,限制前一级的扇出负载不能大于这级能承受的值。

6.4 几条易混淆命令解释

  • 注意
    • 默认情况下,DRC的约束等级最高,可以使用compile -option 选择更高优先级优化,可见用户指令手册。
    • 因为DRC优先级最高,所以不要施加过紧或过松的约束,都会影响DC对其他单元的优化。
    • DRC的约束主要包括
      • set_max_transition、set_max_fanout、set_max_capacitance
  • set_max_transition
    • 防止出现长连线导致的长的转换时间,另外这条指令可以约束转换时间,降低功耗。
  • set_load
    • 选项加上[load_of AN2],可以设置一个标准单元,并用该单元的标称电容和连线电容作为总的电容值。模拟输出端口驱动的外部负载,设置的值影响输出端口net上的电容,影响相应路径延时。
    • 可以在set_load直接加数字,指定一常数负载值。
  • set_max_capacitance
    • 可以使用该命令为整个设计所有的线网设置最大电容的设计规则。
  • set_max_fanout
    • fanout数量太大一方面会导致route容易在此处出现congestion;另一方面可能会出现EM问题:由于fanout太大,输出电流过大,导致这部分的金属线长时间被熔断或变形,进而出现短路/断路的问题。
    • 同样可能会出现EM现象的还有尺寸大的cell,例如大小为x24/x32;这种cell的默认属性为dont use。这种尺寸的cell,虽然驱动能力大,但其输出电流也大,如果fanout后为多个这样的cell,那么容易出现EM问题。
posted @ 2023-06-05 23:36  可达达鸭  阅读(1053)  评论(0编辑  收藏  举报