zoukankan      html  css  js  c++  java
  • DC 输入 输出 时钟 PVT设置

             继上面介绍了setup文件的基本书写,简单介绍下时钟设置及简单地时序,面积,PVT设置约束。

             DC的约束是基于路径的,这里所谓的路径起点是input port 或者clock port of flip-flop或者纯组合逻辑的寄存器输入,终点是output port或者任意时序逻辑的输入.

             时钟:

    虽然DC无法最终综合时钟树,但是我们可以加入一些约束让此时的时钟更加接近实际的工作情况。可以通过create_clock –period 10 [get_ports clk1]建立时钟,这句话意思是建立一个名为clk周期为10单位的时钟,这里的单位一般是ns,可以通过list_lib查看。这句命令默认占空比50%。如想设置其他占空比为 create_clock –period 10 –waveform {0 3} [get_prots clk2].这行命令设置占空比为3:7(第一个为上升沿时间,第二个为下降沿时间)。另外由于pre-layout时得不到准确的时钟参数,所以此时不对clocks进行综合,因此用命令set_dont_touch_network [get_ports clk1] 实现上述要求(且默认此时clock为ideal ,驱动能力无限大 无上升沿下降沿。下面会进行一定的预估值)。也可以在以后得对ports命令中set_input_delay 0.1 -max -clock Clk [remove_from_collection [all_inputs] [get_ports Clk]] 进行设置。

    set_clock_latency #模拟clk到寄存器的延迟 network latency

    set_clock_latency -source  #模拟晶振到clk port的延迟 source latency

    set_clock_transition #将ideal时钟模拟成有一定斜率的上升沿下降沿时钟。

    set_clock_uncertainty –setup Tu [get_ports clk] #模拟时钟偏差(Clock Skew)时钟到各个触发器的时间不是一样的 Tu包括skew jitter margin

    //以上两组数据,可咨询板级工程师和APR工程师。

    如果已经从后端CTS的获取了准确的时钟树参数,那么可以用set_propagated_clock clk1,此时source latency还是依旧要有的。

    以上的命令均是单时钟单沿触发。特殊情况还有同步多时钟、异步多时钟、多周期路径。

    当纯组合逻辑时就要设置虚拟时钟,

    create_clock –name clk2 –period 10

    上面所说的port为DC中六大object之一,design、clock、port、cell、pin、net。

    Design:设计名称,理解为***.v中的***;

    Clock:时钟;

    Port:design的input,output;

    Cell:design中调用的模块或低一层design;

    Pin:例化cell的输入输出

    Net:cell间内部互联线

    //从上面描述可知 design和cell有时候可以相互转换。

    输入驱动:

    如果不对工程进行输入驱动,DC默认无穷大即,translation time为0。

    set_driving_cell –lib_cell inv1 [get_ports A] #这句命令是将port A的输入驱动模拟成cell FD1的Q脚连接。

    set_driving_cell –lib_cell FD1 –pin Q [get_ports B]#这句命令是将port B的输入驱动模拟成cell FD1的Q脚连接。这句话对比上面那句是因为FD1除了Q还有一个Q’的输出。要固定其哪一个输出模拟接到B。

    set_driving_cell -library $lib_name -lib_cell inv1 [all_inputs] #此命令是让所有input的输入驱动为前面所定义的lib_name中的inv1 cell。

    set_driving_cell [expr [load_of $lib_name/an02d0/A1] * 15] [all_inputs] #均是假想一个驱动单元在输入端口之前,据此单元计算。

    输出负载:

    默认为0,但是太过于乐观。同样如果设置太大又会增加translation time进而影响性能。

    Set_load 5 [get_ports OUT1] #设置OUT1为5pf,输出负载默认为pf也可report_lib查看单位

     

    set_load [load lib_name/ an01d0/A1] [get_ports OUT2]

    set_load [expr [load_of $lib_name/an01d0/A1] * 15] [get_ports OUT3] #这个是使OUT3输出负载为定义的lib_name中an01d0的A1脚的负载电容15倍。

    此处提一下,如果先后两次对一个端口进行约束,那么最终保存的是最后一次的约束。

    PVT设置

    工艺、电压、温度。这些情况一般只考虑最差ss和最好ff。只考虑setup可以测ss,只考虑hold 可以测ff。如果setup文件只读入了一个target_library那么只有一个工作条件,可以不用做这一步。如果读入多个仍需设置。

    Set_operating_conditions –max “ ss***”/

    -min “fast***”

    线负载模型

    set_wire_losd_model #跟工艺厂多沟通获取具体值

    以上设置完成后,可以用check_timing check_design 等语言查看。

  • 相关阅读:
    色彩空间RGB/CMYK/HSL/HSB/HSV/Lab/YUV基础理论及转换方法:RGB与YUV
    三色视者与四色视者身后的理论基础:色彩原理
    再谈设计原则—7种设计原则学习总结笔记
    sass安装:webpack sass编译失败,node-sass安装失败的终极解决方
    再谈Java数据结构—分析底层实现与应用注意事项
    再谈js对象数据结构底层实现原理-object array map set
    浮点数精度问题透析:小数计算不准确+浮点数精度丢失根源
    再谈编程范式—程序语言背后的思想
    再谈循环&迭代&回溯&递归&递推这些基本概念
    再谈MV*(MVVM MVP MVC)模式的设计原理—封装与解耦
  • 原文地址:https://www.cnblogs.com/uuyuanuu/p/4214362.html
Copyright © 2011-2022 走看看