Menu
Coddy logo textTech

データとValidのパイプライン化

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

パイプラインはレジスタ間で処理を分割します。各データ項目の横で有効フラグが伝播するため、下流ステージはサンプルとバブルを区別できます。ノンブロッキング代入を使用すると、後段のステージは同じエッジで前段のステージの以前の値を読み取ります。リセットでは、処理中の作業を無効にする必要があります。

関連する抜粋です。周囲の宣言と接続は課題に用意されています。

always @(posedge clk) begin
    stage <= data;
    stage_valid <= in_valid;
    result <= stage;
    out_valid <= stage_valid;
end

データとその有効性は、同じ数のレジスタを通過します。

すべてのパイプライン段階でデータと有効性をアラインし、リセット時に有効性をフラッシュします。

challenge icon

チャレンジ

中級

2段のレジスタパイプラインを実装してください。リセットされていない各エッジで、第1段は a と in_valid を取り込みます。第2段は第1段の以前の値を使用します。out_valid は以前の valid 値になり、valid の場合は y が以前のデータに1を加えた値(256を法とする)になり、それ以外の場合は0になります。同期式の rst は両方の段と出力をクリアします。出力列は y、out_valid です。すべての制御信号とデータは各立ち上がりクロックエッジの前に安定しており、結果はその後に観測されます。

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

自分で試してみよう

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

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

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

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