工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> Verilog

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

  1. テレマティクスデータでフリート効率を最大化:専門家の活用戦略
  2. S&OP、データ、計画システムを高度化し、将来の成功に備える
  3. 自動データ準備でインサイト生成を加速
  4. Verilogマスター:デジタル回路設計のための完全チュートリアル
  5. Verilog連結マスター:実践ガイド
  6. Verilogエッセンシャル:簡潔な概要
  7. Verilog代入文の理解:種類、構文、ベストプラクティス
  8. Verilogブロッキング代入とノンブロッキング代入:違いを徹底解説
  9. Verilog制御フローのマスター:if-else、case、ループ
  10. Verilog関数のマスター:効率的なRTL設計のために
  11. Verilogスケジューリングセマンティクスの理解:タイミング、イベント、実行順序