Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> Linuxチュートリアル >> FPGAのクロックエッジサンプリングに関する問題

FPGAのクロックエッジサンプリングに関する問題

  

クロックは、FPGAに比べて人体にとって心臓のようなものであることはよく知られています。シーケンシャルロジック設計では、各信号の処理はクロックと密接に関係しているため、通常は信号のトリガ条件としてクロックのエッジトリガを使用します。では、システムはどのようにしてクロックエッジで信号を処理するのでしょうか。

次の手順を誤って実行してください。モジュールテスト(clk、a、b);

入力clk;

入力a;

出力b;

常に@(posedge clk)

begin b< = a; end

endmodule

上記の手順で、Aがクロックの立ち上がりエッジで変化した場合はB次のクロックエッジが到着したときに割り当てられます。このようにして、私たちの一般的な考え方では、このアイデアが形成されます。クロックがデータを取得した後、次のクロックエッジが割り当てられます。ただし、15psでaに1の値が割り当てられ、クロック周期が10psになるようにテストベンチファイルを作成します(AとBの両方にクロックの立ち上がりエッジで1の値が割り当てられる)。これはなぜですか?

実際、私たちの伝統的な考え方は間違っています次のクロックエッジが来るとBが変わるのは、システムが前の立ち上がりエッジでAの変化を収集しなかったからです。 Aの値は立ち上がりエッジが来ると収集され、直接Bに割り当てられます。テストベンチでは、Aに15psで1の値が割り当てられているため、クロックエッジはAの変更に割り当てられ、Bに直接割り当てられます。実際、理想的ではない場合、Bの割り当てはクロックエッジが変化した後もしばらくの間保持されます。割り当てにはわずかな時間遅延があるためです。

割り当てについて説明したので、ブロック割り当てと非ブロック割り当ての違いについて説明しましょう。実際、それが別のプロセス内にある場合、ブロッキング割り当てと非ブロッキング割り当ての間に違いはありません。同じプロセス内で別の変数に変数値が割り当てられている場合のみです。このとき、ノンブロッキング代入はパラレル実行に相当し、ブロッキング代入はシーケンシャル実行に相当します。

Copyright © Windowsの知識 All Rights Reserved