2016-10-10 4 views
0

Ich schreibe ein Verilog-Programm, das wiederholt ausgeführt werden würde und den Wert der Variablen clk von 0 auf 1 ändern würde, zurück auf 0 und so weiter, und zwar unendlich oft. Hier ist der Code des Moduls:Verilog-Code zum Generieren einer periodischen Wellenform

module FirstQuestion(
output clk 
); 
reg clk; 

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

Allerdings zeigt das Ausgangssignal nur 0 als Ausgabe. Der Fehler, ich weiß, muss trivial sein. Kann der Fehler nur angedeutet und korrigiert werden? Hier ist der Code für die 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 

Antwort

2

Das Problem ist, dass man clk = 1 am Ende der while-Schleife gesetzt, dann sofort eingestellt clk = 0 am Anfang der Schleife ohne Verzögerung zwischen. Wellen zeigen also, dass clk = 0 immer ist.

Sie benötigen eine weitere Verzögerung hinzuzufügen:

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

Sie können auch einen Taktgenerator mit CLK_PERIOD = 10 ns definieren, wie

`timescale 1ns/1ps 

`define CLK_PERIOD 10 

.... 

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