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

 找回密码
 注册

手机号码,快捷登录

手机号码,快捷登录

搜全文
查看: 7688|回复: 14

[求助] modelsim仿真问题

[复制链接]
发表于 2011-1-7 17:11:17 | 显示全部楼层 |阅读模式

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

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

×

module ff(


clk,


rst,


in,


out

);


input clk;


input rst;


input in;


output out;

  


reg out;


reg in_pre;

  


always @(posedge clk)


begin


if (rst)


begin


in_pre <= 1'b0;


out
<= 1'b0;


end


else


begin


in_pre <= in;


out <= in_pre;


end


end

endmodule

                     图一
ff
综合后为两级D寄存器

module ff_tb1;

reg clk;

reg rst;

reg in;

wire out;

initial

begin


clk = 0;


rst = 1;


#12 rst = 0;

end

always #5 clk = ~clk;

always @(posedge clk)

begin

  if(rst)


in = 0;


else


in = $random;

end

ff ff_inst(.clk(clk),.rst(rst),.in(in),.out(out));

endmodule


图二
ff_tb1仿真波形

  查看波形发现信号in和in_pre好像是由两个网线连接的信号,而in_pre和out才像是经过了寄存器。一般寄存器的采样在时钟前delta时间,而赋值在时钟后delta时间


为什么in和in_pre,都是经过了寄存器,而输出的时序差别这么大呢???



研究了好长时间,老是想不通为什么

 楼主| 发表于 2011-1-7 17:17:26 | 显示全部楼层
图怎么没贴上







仿真

仿真
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-1-7 17:20:00 | 显示全部楼层

图一 综合

图一 综合
不会弄
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-1-9 16:49:31 | 显示全部楼层
回复 6# kmac


    恩,多谢了。我也采用了一个类似的方法解决的,我在testbench里用了非阻塞赋值(<=)。不过好像在哪看过,推荐在tb里的驱动不要使用非阻塞赋值,所以觉得不妥,才发帖请教。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-1-9 16:55:00 | 显示全部楼层
回复 5# pzchu


    加变量就是浪费寄存器!!! 也不是没意义,我做一个2次迭代的算法。为了仿真调试方便,只仿真一次迭代,数对上了。把2次迭代都仿真,数就对不上了。原因就是1次迭代的输入是tb给的,2次迭代的输入是1次迭代的输出。一个没有延迟,一个延迟了一拍。
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

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


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

GMT+8, 2025-9-16 03:27 , Processed in 0.018839 second(s), 7 queries , Gzip On, Redis On.

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