반응형
목차
Parameter
Verilog HDL의 Parameter는 variable이나 net에 속하지 않습니다. 상수입니다.
Parameter의 두 가지 타입
- module parameter, witg localparam
- specify parameters(specparams)
parameter : 기본적으로 모듈 내에서 상수값을 특정 문자열에 mapping
defparam : 모듈밖에서 parameter값을 재정의(혹은 override) 할 때 사용
localparam : 모듈내에서 localparam으로 선언하면 모듈밖에서 바꿀 수 없음
Specpara : parameter와 비슷하지만 특정 블록 내에서만 사용됩니다.
Parameter example
module vdff #(parameter size = 5, parameter delay = 1) ( input [0:size-1] in, input clk, output reg[0:size-1] out); always @(posedge clk) begin #delay out = in; end endmodule module top; reg clk; wire [0:4] out_c, in_c; wire [1:10] out_a, in_a; wire [1:5] out_b, in_b; // create an instance and set parameters vdff #(10,15) mod_a ( .out(out_a), .in(in_a), .clk(clk)); // create an instance leaving default values vdff mod_b( .out(out_b), .in(in_b), .clk(clk)); // create an instance and set one parameter vdff #(.delay(12)) mod_c( .out(out_c), .in(in_c), .clk(clk)); endmodule
localparam
- parameter와 비슷하지만 local parameter는 module instance parameter 할당으로 수정할 수 없습니다.
- local parameter는 defparam 문이나 module instance parameter 할당으로 수정할 수 있는 parameter를 포함하는 상수 표현식을 할당할 수 있습니다.
Local Parameter example
module generic_fifo //ANSI-C 2001 #(parameter MSB=3, LSB=0, DEPTH=4) ( input [MSB:LSB] in, input clk, read, write, reset, output [MSB:LSB] out, output full, empty ); // These parameters are local, and cannot be overridden. // They can be affected by altering the public parameters // above, that is to change indirectly. localparam FIFO_MSB = DEPTH*MSB; localparam FIFO_LSB = LSB; reg [FIFO_MSB:FIFO_LSB] fifo; reg [LOG2(DEPTH):0] depth; always @(posedge clk or reset) begin casex ({read,write,reset}) // implementation of fifo // implementation of fifo endcase end endmodule
Defparam
- defparam을 사용하면 parameter의 hierarchical name을 사용하여 설계 전반에 걸쳐 모든 module instance에서 parameter의 값을 변경할 수 있습니다.
- defparam은 parameter 값 할당을 하나의 module로 그룹화 하는데 특히 유용합니다. 그러나 instance 배열 아래 hierarchical 구조의 값은 변경할 수 없습니다.
- 단일 parameter에 대해 여러 defparam이 있는 경우 마지막 defparam 문의 값을 사용합니다.
- defparam이 parameter를 수정할 수 있기에 System Verilog compiler는 모든 설계 파일이 compile 되기 전에 instance의 최종 parameter 값을 확인할 수 없습니다. 그래서 defparam의 사용은 System Verilog에서 추천하지 않습니다.
Definition Parameter example
module top; reg clk; reg [0:4] in1; reg [0:9] in2; wire [0:4] o1; wire [0:9] o2; vdff m1 ( .out(o1), .in(in1), .clk(clk)); vdff m2 ( .out(o2), .in(in2), .clk(clk)); endmodule module vdff #(parameter size = 1, delay = 1) ( input [0:size-1] in, input clk, output reg [0:size-1] out); always @(posedge clk) begin # delay out = in; end endmodule module annotate; defparam top.m1.size = 5, top.m1.delay = 10, top.m2.size = 10, top.m2.delay = 20; endmodule
Specparam
- Specparam 은 매개변수와 비슷하지만 특정 블록 내에서만 사용됩니다.
- 상수 표현식은 정수, 실수, 지연 또는 인용 문자열일 수 있습니다.
- specparam은 defparam 을 사용하거나 모듈 인스턴스화에서 #을 사용 하여 재정의할 수 없습니다.
Specparam example
specparam parameter_name = constant_expression; [Example] specparam TRise = 1.2; specparam T1 = 2:3:4; // min:typ:max
728x90
반응형
'Language > Verilog & SV' 카테고리의 다른 글
[Verilog] Clock generator (0) | 2023.07.20 |
---|---|
[Verilog] Blocking(=) vs Nonblocking(<=) (0) | 2023.07.19 |
[System Verilog] 'break' and 'continue' (0) | 2023.07.19 |
[Verilog] D F/F (0) | 2023.07.19 |
[Verilog] Ram Model example Code (0) | 2023.07.06 |