微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 循环路径的时序约束

循环路径的时序约束

时间:10-02 整理:3721RD 点击:

最近在学synopsys  DC做了一个设计  工作周期 5ns
input_delay 1.5ns
report_timing  slack都为正
但是为什么vcs仿真dc输出的网表文件testbench周期要设置为20ns以上结果才正确呢



图中左端为数据输入端   设计中有一部分逻辑是D触发器里面的数据经过更新在下一个时钟周期重新输入同一个D触发器  想问一下这样的路径要专门约束吗   仅仅设置一个input_delay 能对这样的循环路径产生约束吗   如果不用的话为什么dc clock_period设为5ns slack都为正 但是用vcs dve仿真dc的输出网表的时候却无法输出正确波形呢 而将testbench里面的周期调大是可以输出正确波形的  说明电路结构应该没问题 而是路径延时的问题   到底什么情况呢  头大啊

门仿是否读了反标文件?

打开sdf文件看看里面的delay是否正确


反标文件是什么啊  小白不懂  门仿是用dc综合得到的门级网表+ testbench+对应的tsmc的库仿的



是write_sdf得到的文件吗 (DELAYFILE
(SDFVERSION "OVI 2.1")
(DESIGN "bchDec_syn")
(DATE "Thu Mar 28 10:30:36 2013")
(VENDOR "slow")
(PROGRAM "Synopsys Design Compiler cmos")
(VERSION "D-2010.03")
(divIDER /)
(VOLTAGE 1.62:1.62:1.62)
(PROCESS "slow")
(TEMPERATURE 125.00:125.00:125.00)
(TIMESCALE 1ns)
(CELL
  (CELLTYPE "bchDec_syn")
  (INSTANCE)
  (DELAY
    (ABSOLUTE
    (INTERCONNECT U957/Y U1211/A (0.000:0.000:0.000))
    (INTERCONNECT U1206/Y U1207/A (0.000:0.000:0.000))
    (INTERCONNECT U1172/Y U1207/B (0.000:0.000:0.000))
    (INTERCONNECT U932/Y U1206/A (0.000:0.000:0.000))
    (INTERCONNECT U1134/Y U1206/B (0.000:0.000:0.000))
    (INTERCONNECT U1185/Y U1186/A (0.000:0.000:0.000))
    (INTERCONNECT synTemp5_reg_7_/Q U1185/A (0.000:0.000:0.000))
    (INTERCONNECT U812/Y U1184/A (0.000:0.000:0.000))
    (INTERCONNECT U918/Y U1172/A (0.000:0.000:0.000))
    (INTERCONNECT U815/Y U1171/A (0.000:0.000:0.000))
    (INTERCONNECT m5_4/U2/Y U1123/A (0.000:0.000:0.000))
    (INTERCONNECT U812/Y U1118/A (0.000:0.000:0.000))
    (INTERCONNECT U937/Y U1117/A0 (0.000:0.000:0.000))
    (INTERCONNECT U1118/Y U1117/A1 (0.000:0.000:0.000))
    (INTERCONNECT U1221/Y U1117/B0 (0.000:0.000:0.000))
    (INTERCONNECT U822/Y U1117/B1 (0.000:0.000:0.000))
    (INTERCONNECT synTemp5_reg_4_/Q U1116/A (0.000:0.000:0.000))
    (INTERCONNECT U805/Y U1115/A (0.000:0.000:0.000))
    (INTERCONNECT U1104/Y U1114/A (0.000:0.000:0.000))
    (INTERCONNECT syn2_reg_6_/Q U1104/A (0.000:0.000:0.000))
    (INTERCONNECT U930/Y U1098/A0 (0.000:0.000:0.000))
    (INTERCONNECT U931/Y U1098/A1 (0.000:0.000:0.000))
    (INTERCONNECT U1306/Y U1098/B0 (0.000:0.000:0.000))

(CELL
  (CELLTYPE "XOR2X1")
  (INSTANCE m5_4/U19)
  (DELAY
    (ABSOLUTE
    (COND B == 1'b1 (IOPATH A Y (0.408:0.408:0.408) (0.365:0.365:0.365)))
    (COND B == 1'b0 (IOPATH A Y (0.332:0.332:0.332) (0.287:0.287:0.287)))
    (IOPATH (posedge A) Y (0.445:0.445:0.445) (0.365:0.365:0.365))
    (IOPATH (negedge A) Y (0.408:0.408:0.408) (0.342:0.342:0.342))
    (COND A == 1'b1 (IOPATH B Y (0.479:0.480:0.480) (0.421:0.421:0.421)))
    (COND A == 1'b0 (IOPATH B Y (0.397:0.397:0.397) (0.396:0.398:0.398)))
    (IOPATH (posedge B) Y (0.600:0.600:0.600) (0.543:0.543:0.543))
    (IOPATH (negedge B) Y (0.479:0.480:0.480) (0.410:0.411:0.411))
    )
  )
)
(CELL
  (CELLTYPE "XOR2X1")
  (INSTANCE m5_4/U18)
  (DELAY
    (ABSOLUTE
    (COND B == 1'b1 (IOPATH A Y (0.500:0.500:0.500) (0.406:0.406:0.406)))
    (COND B == 1'b0 (IOPATH A Y (0.396:0.396:0.396) (0.350:0.350:0.350)))
    (IOPATH (posedge A) Y (0.509:0.509:0.509) (0.406:0.406:0.406))
    (IOPATH (negedge A) Y (0.500:0.500:0.500) (0.401:0.401:0.401))
    (COND A == 1'b1 (IOPATH B Y (0.494:0.494:0.494) (0.433:0.433:0.433)))
    (COND A == 1'b0 (IOPATH B Y (0.399:0.399:0.399) (0.375:0.375:0.375)))
    (IOPATH (posedge B) Y (0.505:0.505:0.505) (0.434:0.434:0.434))
    (IOPATH (negedge B) Y (0.494:0.494:0.494) (0.430:0.430:0.430))
    )
  )
)

这玩意怎么看啊
而且综合完的网表和原始设计怎么对应起来啊
比如我想看一下a[9:0]^b[9:0]综合成的网表要怎么找到对应的电路结构啊



    在仿真的时候,读取sdf文件。我之前遇到门仿库文件中定义的延时值过大,导致门仿不能通过的情况,所以建议你读sdf文件。
    initial $sdf_annotate ("sdf_file path", instantiation name, "MAXIMUM");



   好像是没有读取sdf文件,sdf文件怎么读取,是在testbench?网表?还是启动命令行?那一句命令没太看懂



    $sdf_annotate命令加到testbench里面。


按你的方法在testbench里面加了 initial $sdf_annotate("./bchDec_Top.sdf",bchDec_Top);语句  “maximum”报错 我也不知道什么意思 所以去掉了  然后vcs   有error:SDF Error: Negative HOLD value replaced by 0. Add +neg_tchk to consider Negative delay value.加上+neg_tchk后没有error了 另外还有warning:SDF Warning: IOPATH from A to Y is not found.(很多)没管,然后dve看波形  仿真周期设为5ns  波形没问题了  非常感谢   还有一点疑问就是+neg_tchk这条语句为什么error就没了呢  是问题解决了吗   不是有Negative HOLD value (hold slack为正,为什么会有Negative HOLD value呢),另外IOPATH from A to Y is not found这样的warning需要去管吗?



    1. 时序里面存在best, typical和worst三种情况,所以SDF里面也可以将三种情况分别写出来. maximum参数告诉工具读取SDF文件中的哪一类参数。
     2.+neg_tchk和path not found的问题,我也不太清楚。


好的  谢谢

把“maximum” 换成 "worst" 后还会报错吗



也不行 Warning-[SDFCOM_CNOF] Cannot Open File
  SDF Config Error: Cannot open sdf config file worst for reading.      
  No such file or directory.
我的sdf是dc生成的 没有什么typical best和worst区分 不知道用Pt生成的行不行  或者有可能我的库只用了slow.db的原因


maximum前面要3个逗号吧


你从D的输出回到D的输入的这段路径上的延时比较小,导致hold time 有violation。提示你加neg_tcheck其实是让工具不再检查这类的violation,也就是说,碰到这种情况也不会报错,所以error不见了。pre_sim时常常会在一些电路加上tcheck以避开时序检查。

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

网站地图

Top