查看: 11505|回复: 5

[提问] modelsim 仿真时钟周期问题

[复制链接]
发表于 2013-9-5 11:56:38 | 显示全部楼层 |阅读模式
关键词: testbech , modelsim , clk
请教:testbench的时钟周期跟modelsim仿真的时钟周期不一致问题。
我的tesbench是这样写的,

`timescale 10 ns/ 1 ns
module digital_led_test();
reg Rsetn;
reg clk;                                             
wire [7:0]  CODE;
wire [1:0]  L_EN;

digital_led i1 (
        .CODE(CODE),
        .L_EN(L_EN),
        .Rsetn(Rsetn),
        .clk(clk)
);
initial                                                
begin
clk=0;
Rsetn=0;                                                                                                                 
end
initial
begin
$display("\tclk,\tRsetn,\tCODE[7:0],");
$monitor("\t%b,\t%b,\t%d",clk,Rsetn,CODE[7:0]);
end

always                                                                  
begin
#5 clk=!clk;
#10 Rsetn=1;                                             
end                                                   
endmodule

我的原意是是输出每5个周期(5*10ns=50ns)翻转一次,那么一个时钟周期应该是100ns。
但是modelsim仿真出的clk的波形周期却和我原意不一样。
下面是用modelsim仿真的波形。
QQ图片20130905115348.jpg
modelsim仿真理论上不太可能出错,那么就是我前面的计算方法有问题,可能是我理解的问题。
请各位大神指教我前面的计算方法哪里出错了,新手,要是问的太低级还请见谅,不吝赐教!先谢过!
 楼主| 发表于 2013-9-5 12:44:06 | 显示全部楼层
自己顶下,期望高手回答!
 楼主| 发表于 2013-9-5 20:08:17 | 显示全部楼层
已解决,是我自己对verilog的语法理解不透侧。
always                                                                  
begin
#5 clk=!clk;
#10 Rsetn=1;                                             
end
begin-end是串行块,顺序执行了5+10=15个周期以后clk的值才会更新,所以才会有300ns的clk周期出现。用fork-jion并行块就没问题了。
 楼主| 发表于 2013-9-5 20:09:57 | 显示全部楼层
一个帖子都是我在自问自答
发表于 2013-9-10 14:22:15 | 显示全部楼层
謝謝~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
发表于 2013-11-15 10:58:09 | 显示全部楼层
最近刚开始搞这个。。。。
连点头绪都没啊。。。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表