Verilog代码生成周期性波形

时间:2016-10-10 16:10:15

标签: verilog hdl

我正在编写一个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

2 个答案:

答案 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