用于生成周期性波形的 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