リセットとイネーブルの優先順位
CoddyのVerilogジャーニー「RTL設計と検証」セクションの一部。レッスン 16/38。
クロック同期ブロックでは、無効なエッジで代入を省略することにより、レジスタの値を保持できます。この意図的な記憶動作は、偶発的な組み合わせラッチとは異なります。リセット、ロード、イネーブルの間に明示的な優先順位を記述してください。ここでのリセットは同期式です。立ち上がりクロックエッジでのみ有効になります。
関連する抜粋です。周囲の宣言と接続は課題内で提供されます。
always @(posedge clk) begin
if(rst) q <= 0;
else if(en) q <= data;
end両方の制御がアサートされている場合はリセットが優先され、無効化された非リセットエッジでは q が保持されます。
1つのクロック付き優先チェーンを使用し、リセット、ロード、イネーブル、ホールドの動作を正確に定義します。
チャレンジ
中級アクティブHighの同期リセット rst とイネーブル en を備えた8ビットレジスタ q を実装してください。立ち上がりエッジではリセットが優先されて q をクリアし、それ以外の場合、イネーブルされたエッジでは a をロードし、無効なエッジでは q を保持します。出力列: q。すべての制御信号とデータは各クロックの立ち上がりエッジ前に安定しており、結果はその後に観測されます。
design.v を完成させ、モジュール名とポートを保持してください。ロックされた testbench.v が入力の変化を与え、値が安定した後に出力を表示します。シミュレータ引数(+CASE=1 など)を使用してシナリオを選択します。標準入力は必要ありません。デザインに表示、遅延、またはシミュレーション終了処理を追加しないでください。期待される出力は、各観測値につき10進値を1行に1つずつ出力し、値は1つのスペースで区切り、最後に改行を付けたものです。
自分で試してみよう
module dut (input clk, input rst, input en, input [7:0] a, output reg [7:0] q);
// このプレースホルダーをあなたのデザインに置き換えてください。
initial q = 0;
endmoduleこのレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
RTL設計と検証のすべてのレッスン
自分で練習してみよう: Verilogオンラインコンパイラ