小程序 求教
input clk,reset;
output out;
reg [3:0] out;
initial out=4'b0000;
always @(posedge clk)
begin
if (reset) out<=4'b0000;
else out<=out+4'b0001;
end
endmodule
'timescale 1ns/1ns
'include "count.v"
module count_tb;
reg clk,reset;
wire [3:0] out;
parameter DELY=100;
always #DELY clk=~clk;
initial #DELY reset=1'b0;
initial #DELY clk=1'b0;
count count_tb(.reset(reset),.clk(clk),.out(out));
endmodule
为什么加上红色的代码后,modelsim 就不能编译了呢? 'timescale 和'include 不能在这里面用么? 这两根语句怎么用啊?
count module里面还有问题。去掉:initial out=4'b0000;
另外,你的reset是否为异步reset,是的话要加到always的敏感列表中的。
always @(posedge reset or posedgeclk)
此外,你的tb中的激励没有进行有效的reset动作,不出意外的话,仿真中你的count应全是X。
去掉 'include "count.v"
initial out=4'b0000;我的意思是对out初始化;先前我就没有这样初始化,结果out没有输出。
初始化 可以在测试模块初始化,也可以在源程序初始化吧?
我想知道为什么我的modelsim中为什么用不了 时间尺度函数 'timenscale 和 'include 以及 'define ;是不是哪里需要设置啊?
去掉了 还是不行 'timescale 不知道为什么 在我的modelsim种不能用!
initial #DELY reset=1'b0;
不是对reset 的有效动作么?
` 和'没分清楚吧?
都试过了 还是不行 我就很纳闷了
** Error: E:/Wordspace/count4/sim/count_tb.v(1): near "'t": syntax error, unexpected "BASE", expecting "class"
这是错误提示
是分两个.v文件读入的么?
将timescale加到第一个读入的.v前,后面读入的.v不要加。试一试。
你的tb只让reset=0,而你的module中reset高有效。参考:
initial
begin
reset = 1'b0;
#DELAY reset = 1'b1;
#DELAY reset = 1'b0;
end
什么意思?我一起编译的!一个源程序,一个测试程序。
受才人指点 果真是我大意了分错了。谢谢
没有对count进行类型声明,对count进行初始化可以这样表达reg [3:0] count = 4'h0000;
我明白你的意思了,如果我的测试信号对我的源程序没有有效的动作,就没有办法验证这个功能是不是有效的对吧?
我知道out 如果没有初始化的话 结果是X ,不过我没有对reset进行有效的初始化,结果也没有出现错误。我在测试中对reset进行了无效的动作,但是reset是0而不是不定值,这样源程序是可以识别的吧?
请指教,我这样理解对么?
请问,我为什么要对count进行初始化啊,我新手不明白,请指教。 我的理解是:对count初始化是对寄存器的初始化。 不初始化 可能出现什么情况?
把书认真看一下
不初始化,那么初始状态就可能是任意状态,下一状态也就不能确定了呗。reset信号就是干这个的。上电之后,让系统全部清零。X基本不大可能出现在真实电路中,所以,不要考虑X神马的。
个人浅见,请大牛指正!
