微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > dc输入输出加寄存器

dc输入输出加寄存器

时间:10-02 整理:3721RD 点击:
我平时使用dc综合时,会对要验证的模块包一层,输入输出加一级寄存器。这样从输入到第一级寄存器的延迟才能在dc中考虑到。dc中有没有选项自动对输入输出加一级寄存器呢?



   不用这样吧,直接set_input_delay和set_output_delay就可以了。


这样他就可以给输入输出加寄存器了吗?


   这样做就不用加寄存器了。
为什么要加寄存器呢?感觉是多余的。


        -path full
        -delay max
        -input_pins
        -max_paths 100
        -transition_time
        -capacitance
Design : poly16tap_withss
Version: I-2013.12-SP5-6
Date   : Tue Jan 12 10:00:22 2016
****************************************

Operating Conditions: WCCOM   Library: tcbn40lpbwp12tm1pwc
Wire Load Model Mode: segmented

  Startpoint: i1_ShootSuppress/rc_i1/r1_x_reg[2]
              (rising edge-triggered flip-flop clocked by aclk)
  Endpoint: i1_ShootSuppress/rc_i1/r2_x_reg[31]
            (rising edge-triggered flip-flop clocked by aclk)
  Path Group: aclk
  Path Type: max
我们约定所有模块输出加一级寄存器,输入就不用再加了。


以上是我综合的一个模块,他的startpoint是从i1_ShootSuppress/rc_i1/r1_x_reg[2]这开始的,实际上在这个点之前我还有一些组合逻辑,这样我就不知道,从input到这个点是否时序违约。
下面是我对输入认为加一级寄存器的结果,这样就能测出上面的不足,那dc中有相应的选项吗?你说的set_input_delay 他只是设定输入的延迟,这也需要你认为计算
****************************************


Report : timing
        -path full
        -delay max
        -input_pins
        -max_paths 100
        -transition_time
        -capacitance
Design : poly16tap_withss_dc
Version: I-2013.12-SP5-6
Date   : Tue Jan 12 10:47:19 2016
****************************************
Operating Conditions: WCCOM   Library: tcbn40lpbwp12tm1pwc
Wire Load Model Mode: segmented
  Startpoint: Din1_r_reg[7]
              (rising edge-triggered flip-flop clocked by aclk)
  Endpoint: i1_poly16tap_withss/i1_ShootSuppress/r_w3_1_reg[10]
            (rising edge-triggered flip-flop clocked by aclk)
  Path Group: aclk
  Path Type: max



   我觉得,在你的design外再包一层寄存器反倒不能反映input_io到第一级寄存器的timing.
你的想法是不是这样:
  exteral_reg--->{[input_io]--->[comb_logic]--->interal_reg(内部第一级寄存器)--->[xxx]--->[output_io]}
你的design应该是大括号包含范围。你现在无法确定[comb_logic]的timing,所以包了external_reg。但是这样做的话是默认上一级输出到你的input_io时序非常好,延迟非常小。
而实际情况可能会较大,导致其延时再加上[comb_logic]的延时接近或超过时钟周期,导致setup violate。设置input_delay和ouput_delay正是对你的设计中从input_io到interal_reg的路径加约束,使其能够满足更严苛的时序要求。
比如,你的时钟是4ns,你的comb_logic延迟3ns。如果你在外面额外包一层寄存器,那么综合的时候这些寄存器肯定会被map在input_io很近的地方,时序余量有1ns,timing能够MET。但这无法模拟有可能被map到比较远的地方,延迟超过1ns,timing无法MET。
set_input_delay为1ns,或者更严苛的2ns或者更多,即可在综合中自然暴露出这里的问题。这样你就可以针对这里做优化。这些delay数值也是你预估的上一级design输出到你的design的延时,一般可以看时钟周期和用于环境做预估,留得越大那么这里的时序余量就越大。


我觉得,在你的design外再包一层寄存器反倒不能反映input_io到第一级寄存器的timing.
你的想法是不是这样:
  exteral_reg--->{[input_io]--->[comb_logic]--->interal_reg(内部第一级寄存器)--->[xxx]--->[output_io]}
你的design应该是大括号包含范围。你现在无法确定[comb_logic]的timing,所以包了external_reg。但是这样做的话是默认上一级输出到你的input_io时序非常好,延迟非常小。
而实际情况可能会较大,导致其延时再加上[comb_logic]的延时接近或超过时钟周期,导致setup violate。设置input_delay和ouput_delay正是对你的设计中从input_io到interal_reg的路径加约束,使其能够满足更严苛的时序要求。//对于一个ip,设计人员写了一个topA,里面嵌套了若干module1..i。
我们在ip设计初期是对modulei去进行dc综合,确保时序是否满足要求,按照你的说法,modulei都有一个input_delay(为了描述简单,先只说inputdelay),需要我们人为的约束一下。如果你现在是通过设置set_input_delay命令去约束modulei.
//整个ip设计完之后,我们对topA去dc综合,这个时候modulei在topA内部,不存在input_delay的说法。那你对modulei使用set_input_delay,貌似不合理
我现在的做法是:
对于moda:
input_moda-->comb_logic_moda-->interal_reg_moda--->[xxx]--->outreg_moda-->output_moda
moda dc时:
inputreg_moda-->input_moda-->comb_logic_moda-->interal_reg_moda--->[xxx]--->outreg_moda-->output_moda
topA dc时:
input_topa--->[comb_logic]--->inputreg_moda-->comb_logic_moda-->interal_reg_moda--->[xxx]--->outreg_moda-->comb_logic-->ouput_topa
如果你赞成我的做法,那怎样给moda快速的包一层并加上寄存器?

上一篇:ncverilog编译xilinx加密库
下一篇:0-in求助

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top