2016-10-10 34 views
0

我正在编写一个Verilog程序,它将反复运行并将变量clk的值从0更改为1,回到0等等,运行无限次。以下是该模块的代码:用于生成周期性波形的Verilog代码

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 

回答

2

的问题是,你CLK = 1设定在while循环的结尾,然后立即在循环的开始处设置CLK = 0之间没有任何延迟。所以,wave总是显示clk = 0。

您需要添加另一个延迟:

initial 
begin 
    while(1) 
    begin 
     #10 
     clk = 0; 
     #10 
     clk = 1; 
    end 
end  
3

你也可以定义一个CLK_PERIOD = 10ns的时钟发生器,如

`timescale 1ns/1ps 

`define CLK_PERIOD 10 

.... 

    initial 
    begin 
     clk = 0; 
     forever #CLK_PERIOD clk = ~clk; 
    end