2013-04-10 8 views
7

Beide folgenden Codes generieren eine Uhr. Ich muss wissen, ob es irgendeinen Gebrauch der Schleife für immer gibt außer Taktgenerierung? Ich bin nur in der Uhrengeneration für immer gereist. Wenn es nur diesem Zweck dient, ist es nicht nutzlos?Verwendung von für immer und immer Anweisungen

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

initial begin 
clk = 0 ; 
always begin 
# 5 clk = ~clk; 
end 
end 

Antwort

1

Ja, haben forever Schleifen weit verbreitete Verwendung in Prüfständen für Designverifikation, particulalry in der Industrie-Standard-Methodik, UVM und seine Vorgänger (wie VMM). Sie werden in Verifizierungskomponenten wie Treibern und Monitoren verwendet, die Aufgaben in SystemVerilog-Klassen umfangreich nutzen.

+0

ich bin nicht so vertraut zu UVM und VMM aber in verilog seine ziemlich nutzlos rechts – chitranna

+0

? UVM verwendet Verilog – toolic

+0

Ich denke, @ new2android bedeutet in Verilog RTL für die Synthese.Ich habe noch nie in RTL für immer verwendet, für Schleifen konnten verwendet werden, wie sie zur Kompilierzeit entrollt werden. – Morgan

6

Ihr zweites Code-Snippet ist eigentlich ein Syntaxfehler. Der Unterschied zwischen forever und always besteht darin, dass always als "Modulelement" vorhanden sein kann. Dies ist der Name, den die Verilog-Spezifikation Konstrukten gibt, die direkt in einem Modul geschrieben werden können und nicht in einem anderen Konstrukt enthalten sind. initial ist auch ein Modulelement. always Blöcke werden wiederholt, während initial Blöcke einmal zu Beginn der Simulation ausgeführt werden.

forever ist eine prozedurale Anweisung, die nur in einem prozeduralen Kontext verwendet werden kann. So ist es legal zu schreiben initial forever oder always forever, aber nicht nur forever.

Die Situation, in der forever ziemlich wichtig wird, liegt in Tasks, die prozedurale Kontexte sind, so dass die Verwendung von nicht zulässig ist. (Funktionen sind auch prozedurale Kontexte, aber möglicherweise keine Verzögerungen, was es unwahrscheinlich macht, dass forever nützlich wird.

-1

// ich werde den Unterschied zeigen ;;;;;;;;; // wir können das nicht verwenden Block für immer in dem Anfangsblock, aber wir können immer innerhalb des intial Blockes // Code mit Fehlern verwenden blockieren.

module stimulus(output reg a,b); 

initial 
begin 
    a = 1'b1; 
    b = 1'b0; 

    always 
    begin 
    #5 a = ~a;   //error when compiling 
    #6 b = ~a; 
    end 

end 

initial 
    #25 $stop; 

endmodule 




    // code with no error 
module stimulus(output reg a,b); 

initial 
begin 
    a = 1'b1; 
    b = 1'b0; 

    always 
    begin 
    #5 a = ~a; //no error when compiling 
    #6 b = ~a; 
    end 

end 

initial 
    #25 $stop; 

endmodule 
Verwandte Themen