Parameters
Coddy Verilog 여정의 기초 섹션에 포함된 레슨. 90개 중 11번째.
동일한 모듈의 복사본을 여러 개 만들고 서로 다른 위치에서 사용할 수 있습니다. 이를 **다중 인스턴스**라고 합니다. 같은 코드를 반복해서 작성하는 대신 한 번 작성한 후 필요한 만큼 여러 번 재사용합니다. 각 인스턴스는 칩에서 해당 하드웨어의 별도 복사본입니다.
하지만 각 복사본이 다르기를 원한다면 어떻게 해야 할까요? 예를 들어 8비트 카운터 하나, 16비트 카운터 하나, 32비트 카운터 하나가 필요할 수 있습니다. 매개변수가 없다면 별도의 모듈을 세 개 작성해야 합니다.
Parameters가 이 문제를 해결합니다.
매개변수는 인스턴스를 생성할 때 설정할 수 있는 상수 값입니다. 이를 통해 모듈의 각 복사본을 서로 다르게 구성할 수 있습니다.
매개변수 선언
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라는 매개변수를 정의합니다.
parameter를 선언할 때는 # 기호를 모듈 이름 바로 뒤와 포트 목록 앞에 사용합니다. #은 뒤에 나오는 것이 모듈을 구성하는 parameter 목록임을 Verilog에 알립니다. 모듈에 parameter가 없다면 #을 완전히 생략하면 됩니다.
매개변수 사용
상수가 필요한 곳이라면 어디에서든 매개변수를 사용할 수 있습니다:
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은 비슷하지만 외부에서 재정의할 수 없습니다:
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을 사용하세요.
챌린지
WIDTH라는 매개변수를 4의 기본값으로 추가하세요.
할 일:
WIDTH라는 매개변수를 추가하세요- 기본값을
4로 설정하세요 - 매개변수는 모듈 이름 뒤의
#( )안에 들어갑니다
직접 해보기
module counter #(
// 기본값이 4인 매개변수 WIDTH를 여기에 추가하세요
)(
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 컴파일러