Verilogブロック文マスター:順次実行と並列実行
一連の文をグループ化し、構文的に単一の文と等価にする方法があり、これらは ブロック文 と呼ばれます。ブロック文には2種類あります:順次と並列。
順次ブロック
begin と end キーワードで文を囲み、与えられた順序で順次実行されます。遅延値は前の文の実行時間からの相対時間として扱われます。ブロック内のすべての文が実行されると、制御は他に移ります。
module design0;
bit [31:0] data;
initial begin
// 10時間単位後、data = 0xfe
#10 data = 8'hfe;
$display ("[Time=%0t] data=0x%0h", $time, data);
// さらに20時間単位後(つまり30)、data = 0x11
#20 data = 8'h11;
$display ("[Time=%0t] data=0x%0h", $time, data);
end
endmodule
上記例では、begin-end ブロックの最初の文が10時間単位で実行され、2番目の文が30時間単位で実行されます(前の文から相対的に20)。
シミュレーションログ
ncsim> run [Time=10] data=0xfe [Time=30] data=0x11 ncsim: *W,RNQUIE: Simulation is complete.
並列ブロック
並列 ブロックでは文を並行実行でき、遅延制御で割り当ての時間順序を指定できます。文は fork と join キーワードで囲んで並列起動します。
initial begin
#10 data = 8'hfe;
fork
#20 data = 8'h11;
#10 data = 8'h00;
join
end
上記例では、fork-join ブロックは10時間単位の文実行後に起動されます。ブロック内の文は並列実行され、最初に起動されるのは遅延が10時間単位の data = 8'h00 です。fork-join起動から10時間単位後です。さらに10時間単位後(全体で20)、最初の文が起動され data = 8'h11 になります。
initial begin
#10 data = 8'hfe;
fork
#10 data = 8'h11;
begin
#20 data = 8'h00;
#30 data = 8'haa;
end
join
end
上記例には begin-end ブロックがあり、内部の文は順次実行されますが、ブロック自体は他の文と並列に起動されます。したがって、data は20時間単位で8'h11、30時間単位で8'h00、60時間単位で8'haa になります。
ブロックの命名
順次ブロックと並列ブロックの両方に、キーワード begin と fork の後に : name_of_block を追加して名前を付けられます。これにより、disable 文でブロックを参照できます。
begin : name_seq
[statements]
end
fork : name_fork
[statements]
join
Verilog
- テレマティクスデータでフリート効率を最大化:専門家の活用戦略
- S&OP、データ、計画システムを高度化し、将来の成功に備える
- 自動データ準備でインサイト生成を加速
- Verilogマスター:デジタル回路設計のための完全チュートリアル
- Verilog連結マスター:実践ガイド
- Verilogエッセンシャル:簡潔な概要
- Verilog代入文の理解:種類、構文、ベストプラクティス
- Verilogブロッキング代入とノンブロッキング代入:違いを徹底解説
- Verilog制御フローのマスター:if-else、case、ループ
- Verilog関数のマスター:効率的なRTL設計のために
- Verilogスケジューリングセマンティクスの理解:タイミング、イベント、実行順序