0

私は VHDL を学ぼうとしていて、その基本のいくつかに苦労しています。質問は次のとおりです。

Process ステートメントは、順次 (1 行ずつ) 実行されるコードを含むように記述されています。process ステートメントで並行コードを実行できないのはなぜですか (すべての行が並行して実行されることを意味します)。次に、プロセス ステートメントにシーケンシャル コードが含まれている場合、たとえば 3 つのフリップフロップを同時にモデル化するにはどうすればよいでしょうか。

-- プロセス ステートメント内

Q1 <= D1;
Q2 <= Q1;
Q3 <= Q2;
4

1 に答える 1

5

Sequential は、割り当てが有効になるタイミングではなく、ステートメントが評価される順序に関連します。

VHDL シミュレーション サイクル

シグナルの割り当てはすぐには有効になりません。それらは現在または将来の時間にスケジュールされ、割り当てが有効になる前に、現在のシミュレーション サイクルでシグナル トランザクションに敏感なすべてのプロセスが完了します。(そして VHDL では、すべてが同等のブロック階層、プロセス、およびシミュレーション用の関数呼び出しに発展します。)

現在アクティブなすべてのプロセスが完了すると、シミュレーション時間は、現在のシミュレーション時間にイベントがない限り、いずれかの信号投影出力波形 (キュー) で信号が次にアクティブになる時間に進みます。この場合、次のシミュレーション サイクルをデルタ サイクルと呼びます。

信号のトランザクションに敏感な各プロセスが実行され、それ以上の信号割り当てがそれぞれの投影された出力波形に対して行われます。各信号の現在のシミュレーション時間のキューには 1 つの「スロット」しかありません。

このようにして、移動するターゲットにヒットするプロセスはありません。一度に実行されるプロセスは 1 つだけです。シグナルの割り当ては、すべてのプロセスが実行を完了するまで有効になりません。これは同時実行性をエミュレートし、順次ステートメントを含むプロセスが順次実行されるときの並列実行を模倣します。

のような代入は、現在のシミュレーション時間Q1 <= D1;を意味するのと同じです。Q1 <= D1 after 0 ns;プロセス内の一連のシーケンシャル ステートメントに、現在のシミュレーション時間における同じ信号への後続の割り当てが含まれており、割り当てられた値が異なる場合、投影された出力波形の最初の割り当てが 2 番目の割り当てに置き換えられます。

現在のシミュレーション時間に信号に対してスケジュールされたイベントがこれ以上ない場合、シミュレーション時間は、シミュレーション時間を進める予測出力波形キュー内のトランザクション時間の最も早い時間に進みます。

それ以上のキュー イベントがなくなると、シミュレーション時間が Time'HIGH (可能な限り高いシミュレーション時間) に進み、シミュレーションが停止します。

また、シミュレーションを実行できる時間を制御する実装によって、または SEVERITY LEVEL が FAILURE であるアサーション ステートメントを実行するか、シミュレーションを停止するための実装で定義された重大度レベルのしきい値によって、シミュレーションを停止することができます。

于 2014-05-14T23:15:43.027 に答える