我正在编写一个Verilog程序,它会重复运行并将varible clk的值从0更改为1,然后再返回0,依此类推,运行无限次。这是模块的代码:
module FirstQuestion(
output clk
);
reg clk;
initial
begin
while(1)
begin
clk = 0;
#10
clk = 1;
end
end
endmodule
但是,输出波形仅显示0作为输出。我知道错误必须是微不足道的。这个错误可以指出并纠正吗? 以下是testbench的代码:
module FirstQuestion_tb;
wire ty;
FirstQuestion mygate(.clk(ty));
integer i;
initial
begin
$monitor(ty);
//for(i=0; i<10; i=i+1);
end
endmodule
答案 0 :(得分:3)
您还可以定义CLK_PERIOD = 10 ns的时钟发生器,如
`timescale 1ns/1ps
`define CLK_PERIOD 10
....
initial
begin
clk = 0;
forever #CLK_PERIOD clk = ~clk;
end
答案 1 :(得分:2)
问题是你在while循环结束时设置了clk = 1,然后在循环开始时立即设置clk = 0而没有任何延迟。因此,wave总是显示clk = 0。
您需要添加另一个延迟:
initial
begin
while(1)
begin
#10
clk = 0;
#10
clk = 1;
end
end