longtim 发表于 2010-6-28 00:16:44

计数器问题,这个代码的testbench对不对,仿真的时候,输出一直是X

本帖最后由 fpgaw 于 2011-8-17 13:38 编辑

这个代码的testbench对不对,仿真的时候,输出一直是X,帮忙指点一下
module tcount(out,data,load,reset,clk);
output out;
input data;
input load,clk,reset;
reg out;
always @(posedge clk)
begin
if(!reset)
out<=8'h00;
else if (load)
out<=data;
else
out<=out+1;
end
endmodule

测试文件:
`timescale1ns/1ns
module tcount_tp;
reg clk,reset,load;
reg data;
wire cntout;
integer i;
tcount count(cntout,data,load,reset,clk);

always #10 clk<=~clk;

initial
begin
clk<=0;reset<=0; load<=0;data<=8'h00;

#5 reset<=1;

#10 load<=1;
#10 load<=0;

for(i=0;i<255;i=i+1)
#10 data<=data+1;

#10000$finish;
end
initial
$monitor($time,,,"cntout=%d",cntout);
endmodule

ups 发表于 2010-6-28 01:45:31

注意,在你的时钟上升沿的这几个时间点上:10,30,50。。。复位和置数都正好无效。计数器不能够进入到一个确定的状态上。

ICE 发表于 2010-6-28 02:42:12

如果在0时刻把clk赋成1,那么在20时刻,就可以把数置进去了。

CHAN 发表于 2010-6-28 04:19:09

感谢了,好像明白加载激励的精髓了

HANG 发表于 2010-6-28 05:52:50

感谢了
        http://bbs.vibesic.com/images/smilies/default/lol.gif

FFT 发表于 2010-6-28 07:31:54

弱弱的说一句
        http://bbs.vibesic.com/images/smilies/default/loveliness.gif
<br>
<br>
你的模块里面,好象没有定义 load,clk,reset; 的类型.
        http://bbs.vibesic.com/images/smilies/default/sad.gif

FFT 发表于 2010-6-28 09:29:13

端口定义input,output,inout时,默认它们的类型是wire。

AAT 发表于 2010-6-28 09:43:53

hehe&nbsp;&nbsp;<br>
长见识了
页: [1]
查看完整版本: 计数器问题,这个代码的testbench对不对,仿真的时候,输出一直是X