Parameters
CoddyのVerilogジャーニー「基礎」セクションの一部。レッスン 11/90。
同じ module のコピーを多数作成し、それらを異なる場所で使用できます。これはmultiple instancesと呼ばれます。同じコードを何度も書く代わりに、一度だけ記述して、必要な回数だけ再利用します。各インスタンスは、チップ上のそのハードウェアの個別のコピーです。
しかし、それぞれのコピーを異なるものにする必要がある場合はどうでしょうか? たとえば、8ビットのcounterを1つ、16ビットのcounterを1つ、32ビットのcounterを1つです。parameterがなければ、3つの別々のmoduleを書く必要があります。
Parameters がこの問題を解決します。
parameter は、インスタンスを作成するときに設定できる定数値です。これにより、module の各コピーを異なる方法で設定できます。
パラメータの宣言
module counter #(
parameter WIDTH = 8
)(
input clk,
output reg [WIDTH-1:0] count
);
always @(posedge clk) count <= count + 1;
endmodule#(parameter WIDTH = 8)は、デフォルト値が8のWIDTHというパラメータを定義します。
パラメータを宣言する際は、#記号をmodule名の直後かつポートリストの前に記述します。#は、後に続くものがmoduleを設定するパラメータのリストであることをVerilogに伝えます。moduleにパラメータがない場合は、#を完全に省略します。
パラメーターの使用
定数が必要な場所では、どこでもパラメーターを使用できます。
reg [WIDTH-1:0] data; // ベクトルサイズ
count <= count + 1; // 任意の幅で動作
assign out = data[WIDTH-1]; // MSBの位置パラメータのオーバーライド
モジュールを使用するときは、パラメータの値を変更できます:
// デフォルトの幅(8ビット)
counter u1 (.clk(clk), .reset(reset), .count(count1));
// 16ビットにオーバーライド
counter #(.WIDTH(16)) u2 (.clk(clk), .count(count2));複数のパラメータ
複数のパラメータを使用できます:
module fifo #(
parameter DEPTH = 16,
parameter WIDTH = 8
)(
input clk, wr_en, rd_en,
input [WIDTH-1:0] data_in,
output [WIDTH-1:0] data_out
);
reg [WIDTH-1:0] memory [0:DEPTH-1];
endmoduleLocalparam
localparam は似ていますが、外部から overridden にすることはできません:
module example;
localparam STATE_IDLE = 2'b00;
localparam STATE_RUN = 2'b01;
localparam STATE_STOP = 2'b10;
// These values are fixed inside this module
endmodule変更されるべきでない定数には localparam を使用します。
チャレンジ
デフォルト値が4のWIDTHという名前のパラメータを追加します。
行うこと:
WIDTHという名前のパラメータを追加する- デフォルト値を
4に設定する - パラメータは、モジュール名の後にある
#( )の中に置く
自分で試してみよう
module counter #(
// ここにパラメータ WIDTH をデフォルト 4 で追加
)(
input clk,
input reset,
output reg [WIDTH-1:0] count
);
endmoduleこのレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
基礎のすべてのレッスン
4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine Logic自分で練習してみよう: Verilogオンラインコンパイラ