2013-04-10 14 views
7

次のコードは両方ともクロックを生成します。私はクロック生成以外の永遠のループの使用があるかどうかを知る必要がありますか?私は時計の世代で永遠に出会っただけです。それがこの目的にしか役立たないなら、それは役に立たないのではないでしょうか?foreverとalwaysステートメントの使用

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

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

答えて

1

はい、foreverループは、業界標準の方法論、UVM、および(例えば、VMMなど)前任者にparticulalry、設計検証のためのテストベンチに広く使用を有します。これらは、SystemVerilogクラスのタスクを幅広く使用するドライバやモニタなどの検証コンポーネントで使用されます。

+0

私はUVMおよびVMMへの慣れていない午前しかし – chitranna

+0

:永遠に最初のブロック内のブロックが、我々は、エラーとintialブロック //コード内のブロック永遠に使用することができます。? UVMはVerilogを使用しています – toolic

+0

@ new2androidはVerilog RTLの合成を意味します。私はRTLで一度も使用していません。コンパイル時にループが使用されるためです。 – Morgan

6

2番目のコードスニペットは実際には構文エラーです。 foreveralwaysの違いは、alwaysが、モジュール内に直接記述でき、他の構造体には含まれていない構造にVerilog仕様が与える名前である「モジュール項目」として存在できることです。 initialもモジュール項目です。シミュレーション開始時にinitialブロックが1回実行されるのに対し、ブロックは繰り返されます。

foreverは手続き型の文脈でしか使用できない手続き型の文です。だからinitial foreverまたはalways foreverと書くことは合法ですが、ただforeverではありません。

foreverが非常に重要になる状況は、手順上のコンテキストであるため、alwaysの使用は許可されません。 (関数は手続き的なコンテキストでもありますが、遅延が含まれていない可能性があります。

-1

//私は違いを表示します;;;;;;; //私たちは使用できませんそのかなり役に立たない権利をVerilogで、

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 
関連する問題