Menu
Coddy logo textTech

サンプリングされたエッジの検出

CoddyのVerilogジャーニー「RTL設計と検証」セクションの一部。レッスン 19/38。

レベルは多くのサイクルにわたってHighのままになる可能性がありますが、イベントパルスは1サイクル続く必要があります。前回サンプリングしたレベルを保存し、現在のレベルと比較します。このエッジ検出器は、入力がすでにこのクロックに同期していることを前提としており、クロックドメイン間の同期器ではありません。

関連する抜粋です。周囲の宣言と接続は課題で提供されます。

previous <= sig;
rising <= sig & ~previous;

以前に保存されたレベルにより、サンプリングされた遷移で単一のパルスが生成されます。

現在のサンプリングレベルと前のサンプリングレベルを比較します。この検出器は同期入力でのみ使用してください。

challenge icon

チャレンジ

中級

clk とすでに同期している信号 sig に対して、サンプリングされた 0 から 1 への遷移ごとに、レジスタに格納された 1 サイクルのパルスを生成してください。同期 rst は、保存されている前回のレベルとパルスをクリアします。したがって、最初の非リセットエッジで sig が High になると、パルスが生成されます。出力列:pulse。すべての制御信号とデータは、各立ち上がりクロックエッジの前に安定しており、結果はその後に観測されます。

design.v を完成させ、モジュール名とポートを保持してください。ロックされた testbench.v は入力の変化を与え、値が安定した後に出力を表示します。シミュレータ引数(+CASE=1 など)を使用してシナリオを選択します。標準入力は必要ありません。設計に表示処理、遅延、またはシミュレーション終了処理を追加しないでください。期待される出力は、観測ごとに 10 進値を 1 行に出力したもので、値は 1 つの空白で区切られ、改行で終わります。

自分で試してみよう

module dut (input clk, input rst, input sig, output reg pulse);
    // このプレースホルダーをあなたの設計に置き換えてください。
    initial pulse = 0;
endmodule
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

RTL設計と検証のすべてのレッスン

自分で練習してみよう: Verilogオンラインコンパイラ