用于生成周期性波形的 Verilog 代码
Verilog code to generate a periodic waveform
我正在编写一个 Verilog 程序,它会重复 运行 并将变量 clk 的值从 0 更改为 1,然后再更改为 0 等等,运行 无限次。这是模块的代码:
module FirstQuestion(
output clk
);
reg clk;
initial
begin
while(1)
begin
clk = 0;
#10
clk = 1;
end
end
endmodule
但是,输出波形只显示0作为输出。这个错误,我知道一定是微不足道的。错误是否可以直接指出并改正?
这是测试平台的代码:
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
问题是你在while循环结束时设置clk=1,然后在循环开始时立即设置clk=0,中间没有任何延迟。因此,waves 始终显示 clk=0。
您需要再添加一个延迟:
initial
begin
while(1)
begin
#10
clk = 0;
#10
clk = 1;
end
end
您还可以定义一个 CLK_PERIOD = 10 ns 的时钟发生器,例如
`timescale 1ns/1ps
`define CLK_PERIOD 10
....
initial
begin
clk = 0;
forever #CLK_PERIOD clk = ~clk;
end
我正在编写一个 Verilog 程序,它会重复 运行 并将变量 clk 的值从 0 更改为 1,然后再更改为 0 等等,运行 无限次。这是模块的代码:
module FirstQuestion(
output clk
);
reg clk;
initial
begin
while(1)
begin
clk = 0;
#10
clk = 1;
end
end
endmodule
但是,输出波形只显示0作为输出。这个错误,我知道一定是微不足道的。错误是否可以直接指出并改正? 这是测试平台的代码:
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
问题是你在while循环结束时设置clk=1,然后在循环开始时立即设置clk=0,中间没有任何延迟。因此,waves 始终显示 clk=0。
您需要再添加一个延迟:
initial
begin
while(1)
begin
#10
clk = 0;
#10
clk = 1;
end
end
您还可以定义一个 CLK_PERIOD = 10 ns 的时钟发生器,例如
`timescale 1ns/1ps
`define CLK_PERIOD 10
....
initial
begin
clk = 0;
forever #CLK_PERIOD clk = ~clk;
end