[Verilog]並列処理ブロック(fork-join)
これはシミュレーションでのみ使用される構文です.並列処理ブロック内の文は同時に実行される. は、各文に割り当てられた遅延ベースまたはイベントベースの制御に基づいて文の順序を調整する. 遅延ベースまたはイベントベースの制御が指定されている場合、ブロックに入る時間に関係する. 街に入る時間に実行を開始します.したがって,ブロックに書かれた文の順序は重要ではない.
シーケンス処理とパラレル処理を比較します.
次のコードは競合しています(シミュレーション時間は同じで、変数値はUnknown).生成されたコード.これはfork‐joinブロックの限界ではなくシミュレータの限界である.
join:分離されたストリームを1つのストリームに再結合
無効な使命名ブロックとブロック
begin : block1
fork : block2
上のようにブロックの名前を付けて使用できます.名前付きブロックはdisableを使用して無効にできます.
disable:ブロック実行を終了する方法を提供します.制御信号に基づいてループを飛び出し、エラーを調整し、コードの一部を実行します.(breakに類似)
以上のコードは、真の値を持つビットを検索すると、ブロックが無効になり、ループを終了します.
[1]SAMIR PALLNITKAR,⊥Verilog HDLデジタル設計と合成の指導,第2版⊥,第7章
シーケンス処理とパラレル処理を比較します.
// 예 1: 지연이 있는 순차 처리 블록
reg x, y;
reg [1:0] z, w;
initial
begin
x = 1'b0; // 시간 0에 수행을 마친다.
#5 y = 1'b1; // 시간 5에 수행을 마친다.
#10 z = {x, y}; // 시간 15에 수행을 마친다.
#20 w = {y, x}; // 시간 35에 수행을 마친다.
end
// 예 2: 지연이 있는 병렬 처리 블록
reg x, y;
reg [1:0] z, w;
initial
fork
x = 1'b0; // 시간 0에 수행을 마친다.
#5 y = 1'b1; // 시간 5에 수행을 마친다.
#10 z = {x, y}; // 시간 10에 수행을 마친다.
#20 w = {y, x}; // 시간 20에 수행을 마친다.
join
シミュレーション時間をよく確認してください.次のコードは競合しています(シミュレーション時間は同じで、変数値はUnknown).生成されたコード.これはfork‐joinブロックの限界ではなくシミュレータの限界である.
// 고의저인 경쟁 상태를 가진 병렬 처리 블록
reg x, y;
reg [1:0] z, w;
initial
fork
x = 1'b0;
y = 1'b1;
z = {x, y};
W = {y, x};
join
fork:1つのストリームを複数のストリームに分割する観点join:分離されたストリームを1つのストリームに再結合
無効な使命名ブロックとブロック
begin : block1
fork : block2
上のようにブロックの名前を付けて使用できます.名前付きブロックはdisableを使用して無効にできます.
disable:ブロック実行を終了する方法を提供します.制御信号に基づいてループを飛び出し、エラーを調整し、コードの一部を実行します.(breakに類似)
// 보기 : 플래그(벡터 변수)에서 처음으로 1의 값을 갖는 비트를 찾는다.
reg [15:0] flag;
integer i; // 카운트하기 위한 정수
initial
begin
flag = 16'b 0010_0000_0000_0000;
i = 0;
begin : block1 // while 내부의 메인 블록이 block1이라고 명명됨
while(i < 16) // 연산자를 사용한 여러 개의 조건.
begin
if (flag[i])
begin
$display("Encountered a TRUE bit at element number %d", i);
disable block1; // 참값을 갖는 비트를 찾았기 때문에 block1을 무효화
end
i = i + 1;
end
end
end
beginendは必要ありませんが、名前だけで参加できます.以上のコードは、真の値を持つビットを検索すると、ブロックが無効になり、ループを終了します.
[1]SAMIR PALLNITKAR,⊥Verilog HDLデジタル設計と合成の指導,第2版⊥,第7章
Reference
この問題について([Verilog]並列処理ブロック(fork-join)), 我々は、より多くの情報をここで見つけました https://velog.io/@pjg0327/Verilog-병렬-처리-블록-fork-joinテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol