在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 8366|回复: 11

[求助] 请问Modelsim后仿出错的问题

[复制链接]
发表于 2013-5-10 16:16:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 godjohsn 于 2013-5-10 16:19 编辑

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

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

图1.GIF


看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%;


请问这种问题该如何解决?
发表于 2013-5-10 20:25:44 | 显示全部楼层
这个不太懂。。
发表于 2013-5-10 21:15:17 | 显示全部楼层
时序违例了。
你把/test/uut/\TrackMode/int_clr_I_P/data_reg_1T_21 这个寄存器的时钟和数据波形拉出来看看,在时钟上升沿的附近,数据肯定发生了变化,违反了setup时间。
 楼主| 发表于 2013-5-10 23:38:45 | 显示全部楼层


时序违例了。
你把/test/uut/\TrackMode/int_clr_I_P/data_reg_1T_21 这个寄存器的时钟和数据波形拉出来看 ...
orlye 发表于 2013-5-10 21:15




   为什么会违例呢?语句有问题?   涉及到这个寄存器的语句有以下几条:

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
 楼主| 发表于 2013-5-10 23:45:31 | 显示全部楼层
本帖最后由 godjohsn 于 2013-5-10 23:47 编辑


时序违例了。
你把/test/uut/\TrackMode/int_clr_I_P/data_reg_1T_21 这个寄存器的时钟和数据波形拉出来看 ...
orlye 发表于 2013-5-10 21:15




setup时间?是指data_reg_1T的setup时间还是时钟信号的setup时间?
发表于 2013-5-11 15:55:54 | 显示全部楼层
你贴的代码好像都是data_reg_1T的输出,你要看data_reg_1T的输入。
把data_reg_1T的时钟、输入、输出都放到波形上,一定有某个时钟上升沿,输入是有值的,但它在接近时钟上升沿时才变化,然后输出就X了。
把波形放大了找到这个点。
 楼主| 发表于 2013-5-11 21:24:44 | 显示全部楼层


你贴的代码好像都是data_reg_1T的输出,你要看data_reg_1T的输入。
把data_reg_1T的时钟、输入、输出都放到 ...
orlye 发表于 2013-5-11 15:55




   谢谢你后仿时间很长,一时半会没出来
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 语句?

这两种语句在时延上有区别么?
发表于 2013-5-11 21:38:26 | 显示全部楼层
input DIN是直接从testbench输入的吗?
是的话,你要看一下testbench加激励的时序。
不能在时钟的上升沿直接加,一定要错开一段时间。
不然带时序仿真就很容易时序违例。
你可以试试跟时钟下降沿对齐加激励。

>>有人说 assign data_reg = ((CODE)?(~a+1):a); 这句的写法会造成很大的延时,建议我改成always 语句?
这个没关系的。
发表于 2013-5-11 22:41:11 | 显示全部楼层
这肯定是setup违例了,你的STA有问题没?
 楼主| 发表于 2013-5-11 23:47:43 | 显示全部楼层


这肯定是setup违例了,你的STA有问题没?
ysxiliu 发表于 2013-5-11 22:41




  不好意思

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


谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

X

小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-6-20 02:31 , Processed in 0.037182 second(s), 10 queries , Gzip On, MemCached On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表