2016-10-10 33 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