使用modelsim进行仿真,出现如下错误?
时间:10-02
整理:3721RD
点击:
# ** Error: D:/Xilinx/10.1/ISE/verilog/mti_se/simprims_ver/simprims_ver_source.v(120834): $setup( negedge SRST &&& (srst_clk_enable1 == 1):1351544 ps, posedge CLK:1351993 ps, 867 ps );
#Time: 1351993 psIteration: 2Instance: /testwdt_testfixture/uut/\u_wdt/U_rise_edge/o
# ** Error: D:/Xilinx/10.1/ISE/verilog/mti_se/simprims_ver/simprims_ver_source.v(120834): $setup( negedge SRST &&& (srst_clk_enable1 == 1):201601544 ps, posedge CLK:201601993 ps, 867 ps );
#Time: 201601993 psIteration: 2Instance: /testwdt_testfixture/uut/\u_wdt/U_fall_edge/o
要怎么解决呢?
#Time: 1351993 psIteration: 2Instance: /testwdt_testfixture/uut/\u_wdt/U_rise_edge/o
# ** Error: D:/Xilinx/10.1/ISE/verilog/mti_se/simprims_ver/simprims_ver_source.v(120834): $setup( negedge SRST &&& (srst_clk_enable1 == 1):201601544 ps, posedge CLK:201601993 ps, 867 ps );
#Time: 201601993 psIteration: 2Instance: /testwdt_testfixture/uut/\u_wdt/U_fall_edge/o
要怎么解决呢?
这个看来是时序仿真的错误了,你是对网表加SDF进行的仿真吗?有两种解决方式,要么调整测试平台产生的时序来满足建立保持时间,要么就是修改网表里面相关寄存器的建立保持时间参数来满足你实际的时序。
这里提到的U_fall_edge如下:有什么问题嘛?
input clk;
input i;
output o;
reg o;
reg i_d1_reg;
always@(posedge clk)
begin
i_d1_reg <= i;
o <= (~i) & i_d1_reg;
end
从出来的波形上看,也就是在采样时钟上升沿和i的下降沿严格的对齐的地方,发生错误,这是为什么呢?
知道不知道
negedge SRST &&& (srst_clk_enable1 == 1):201601544 ps, posedge CLK:201601993 ps, 867 ps
我以前对网表时序仿真这类错误的一个最笨的处理,把这两个信号拉出来,找到对应的时间,看看是不是有不定态或者建立保持时间不满足,然后提前或者延迟这个时钟的相位(应该是通过testbench去修改),不过这个不是推荐的办法。
谢谢。已了解,这个应该属于亚稳态的情况。我考虑使用两级触发器,同步到本地时钟域上,保证单板上不会出错,就好了。
嗯,如果是跨时钟域,最好是两级寄存器来处理,当然只要不影响你的数据处理就好。
thank you very much