微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 请问Modelsim后仿出错的问题

请问Modelsim后仿出错的问题

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

程序前仿真时序、功能均正确程序较大,系统时钟68M。

后仿(Post-Route)出现问题:很多信号莫名其妙的变成红线,如图1所示,前仿没有这个问题。




看modelsim中有如下错误提示:

# ** Error: C:/Xilinx/12.3/ISE_DS/ISE/verilog/src/simprims/X_FF.v(104): $setup( negedge I &&& (in_clk_enable1 != 0):1284703722 ps, posedge CLK:1284703836 ps, 202 ps );

#    Time: 1284703836 ps  Iteration: 2  Instance: /test/uut/\TrackMode/int_clr_I_P/data_reg_1T_21
仿真图形中也有红色显示,如图2所示。


我在后仿前对最主要的时钟加了时间约束,时钟为68M,约束限制其PERIOD为一个时钟周期以内(14ns)
如图3、图4所示:









ucf文件中的约束信息:
#Created by Constraints Editor (xc3s1400an-fgg676-5) - 2013/05/10
NET "RTM/U1/GClk_BT1" TNM_NET = RTM/U1/GClk_BT1;
TIMESPEC TS_RTM_U1_GClk_BT1 = PERIOD "RTM/U1/GClk_BT1" 14 ns HIGH 50%;

请问这种问题该如何解决?

这个不太懂。

时序违例了。
你把/test/uut/\TrackMode/int_clr_I_P/data_reg_1T_21 这个寄存器的时钟和数据波形拉出来看看,在时钟上升沿的附近,数据肯定发生了变化,违反了setup时间。

   为什么会违例呢?语句有问题?   涉及到这个寄存器的语句有以下几条:
reg signed [21:0] data_reg_1T;
reg signed [21:0] DOUT_1T;
reg signed [25:0] data_reg_10T;
reg signed [25:0] DOUT_10T;

……
else if(clr) begin
       DOUT_1T <= data_reg_1T + data_reg;
       if(cnt==9) begin      
            DOUT_10T <= data_reg_10T + data_reg_1T + data_reg;
             ……
       end
       else begin
             ……
            data_reg_10T <= data_reg_10T + data_reg_1T + data_reg;
        end

……

end

setup时间?是指data_reg_1T的setup时间还是时钟信号的setup时间?

你贴的代码好像都是data_reg_1T的输出,你要看data_reg_1T的输入。
把data_reg_1T的时钟、输入、输出都放到波形上,一定有某个时钟上升沿,输入是有值的,但它在接近时钟上升沿时才变化,然后输出就X了。
把波形放大了找到这个点。

   谢谢你后仿时间很长,一时半会没出来
data_reg_1T的输入语句如下:

input signed [7:0] DIN;
assign a = DIN;
assign data_reg = ((CODE)?(~a+1):a);     //wire signed [7:0] data_reg;
always @(……) begin
       ……
     data_reg_1T <= data_reg_1T + data_reg;
     ……
end
请问这种写法有明显的问题么?
有人说 assign data_reg = ((CODE)?(~a+1):a); 这句的写法会造成很大的延时,建议我改成always 语句?
这两种语句在时延上有区别么?

input DIN是直接从testbench输入的吗?
是的话,你要看一下testbench加激励的时序。
不能在时钟的上升沿直接加,一定要错开一段时间。
不然带时序仿真就很容易时序违例。
你可以试试跟时钟下降沿对齐加激励。
>>有人说 assign data_reg = ((CODE)?(~a+1):a); 这句的写法会造成很大的延时,建议我改成always 语句?
这个没关系的。

这肯定是setup违例了,你的STA有问题没?

  不好意思
菜鸟问一句”STA“是什么?
setup违例是什么意思?如何避免?

谢谢



   STA就是静态时序分析。你用Xilinx的的软件也可以做的,这个是检查设计中是否有时序问题的重要手段。一般所有的设计都有这一个步骤的。出现setup违例的情况有很多种解决方法,具体问题具体分析了。



    请问问题解决了吗?我的也是一样一样的问题,愁

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

网站地图

Top