Menu
Coddy logo textTech

ビット幅安全なパラメータ

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

基礎編では、幅を設定可能にしました。再利用可能なRTLでは、法律上許される最小幅にも対応し、中間式のサイズを意図的に決め、ハードコードされたビット位置を避ける必要があります。レプリケーション {WIDTH{1'b1}} によって、幅に一致したマスクが作られます。パラメータはエラボレーション時の定数であり、実行時の制御ではありません。

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

wire [WIDTH:0] sum;
assign sum = {1'b0,a} + {1'b0,b};
assign y = sum[WIDTH] ? {WIDTH{1'b1}} : sum[WIDTH-1:0];

キャリー位置と飽和値の両方が、設定された幅に適応します。

最小の使用可能な幅をテストし、幅に依存するすべてのスライスと定数をパラメーターから導出します。

challenge icon

チャレンジ

中級

WIDTHビットのインクリメンタを作成し、a+1 の下位 WIDTH ビットを返してください。入力 b は使用しません。同じモジュールで、WIDTH=1 の場合にも、より幅の広い場合にも対応する必要があります。WIDTH は正の値です。ロックされたテストベンチでは、WIDTH の値として 1、4、8 のインスタンスを生成し、幅の狭いインスタンスには a と b の下位ビットを使用します。出力列は、10進数の y1、y4、y8 です。

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

自分で試してみよう

module dut #(parameter WIDTH=4) (input [WIDTH-1:0] a,b, output [WIDTH-1:0] y);
    // パラメータ化された回路を実装する。
    assign y = 0;
endmodule
quiz icon腕試し

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

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

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