[VerilogHDL] 04_데이터 타입_parameter
1. parameter
Verilog HDL에서 parameter
는 모듈 내에서 사용되는 상수를 정의하는 데 사용되는 키워드입니다. parameter
를 사용하여 값을 한 번 정의하고 모듈 내에서 여러 곳에서 재사용할 수 있습니다. 다음은 parameter
에 대한 상세한 설명입니다:
1.1 상수 정의
parameter
는 모듈 내에서 사용되는 상수 값을 정의하는 데 사용됩니다. 이는 모듈 내에서 동일한 값을 여러 곳에서 사용해야 할 때 특히 유용합니다. 예를 들어, 클럭 주파수, 카운터 크기, 상태 값 등을 정의할 수 있습니다.
1.2 값 할당
parameter
는 모듈 내에서 값을 할당할 때 사용되며, 한 번 정의된 값은 변경되지 않습니다. 따라서 parameter
는 상수로 취급됩니다. 모듈의 인스턴스화나 다른 모듈과의 연결에서 사용될 수 있습니다.
1.3 컴파일 타임 상수
parameter
는 컴파일 타임에 값을 결정하고 상수로 사용됩니다. 이는 논리 회로의 구성 요소에 대한 컴파일러 최적화를 가능하게 하고, 모듈 간의 인터페이스 정의에서 일관성을 유지할 수 있도록 도와줍니다.
1.4 지역 범위
parameter
는 모듈 내에서만 사용되며 지역 범위를 갖습니다. 다른 모듈에서는 해당 parameter
에 직접 접근할 수 없습니다.
1.5 파라미터화된 모듈
parameter
는 모듈을 파라미터화하여 동일한 모듈을 여러 번 인스턴스화할 때 사용될 수 있습니다. 이를 통해 모듈의 구성 요소를 동적으로 조정하고 재사용성을 높일 수 있습니다.
1.6 사용 예
parameter
는 모듈의 입출력 크기, 상태 머신 상태 수, 주소 폭 등을 정의하는 데 사용될 수 있습니다. 예를 들어, parameter WIDTH = 8;
은 8비트 폭을 가진 데이터 버스의 폭을 정의하는 데 사용됩니다.
요약하자면, parameter
는 Verilog HDL에서 모듈 내에서 사용되는 상수를 정의하는 데 사용되는 키워드입니다. parameter
를 사용하여 한 번 정의된 값은 변경되지 않고 모듈 내에서 여러 곳에서 재사용될 수 있습니다. parameter
는 상수 정의, 값 할당, 컴파일 타임 상수, 파라미터화된 모듈 등의 역할을 수행합니다.
2. 예제 코드
module ParameterExample #(parameter WIDTH = 8)
(input [WIDTH-1:0] data_in, output [WIDTH-1:0] data_out);
reg [WIDTH-1:0] internal_reg;
always @(posedge clk) begin
internal_reg <= data_in;
data_out <= internal_reg;
end
endmodule
위의 예제 코드에서는 ParameterExample
이라는 모듈을 선언하고 WIDTH
라는 parameter
를 정의합니다. 이 parameter
는 데이터 버스의 폭을 나타내는 상수로 사용됩니다. 기본값으로 8비트가 지정되어 있습니다.
parameter
는 모듈의 인스턴스화 시에 값이 결정되며, 모듈 내에서 상수로 사용됩니다. 따라서 WIDTH
값은 컴파일 타임에 결정되고 모듈의 크기와 동작에 영향을 줍니다.
모듈 내부에는 data_in
과 data_out
이라는 입력과 출력 포트가 있습니다. data_in
은 WIDTH
에 따라 크기가 결정되는 입력 데이터 버스를 나타냅니다. data_out
은 internal_reg
레지스터의 값을 출력하는 데이터 버스입니다.
internal_reg
는 reg
타입의 레지스터로, WIDTH
에 따라 크기가 결정됩니다. always
블록에서는 클럭의 상승 에지가 발생할 때 data_in
의 값을 internal_reg
에 저장하고, internal_reg
의 값을 data_out
에 할당합니다.
ParameterExample
모듈을 인스턴스화할 때 WIDTH
값을 변경하거나 기본값인 8을 사용할 수 있습니다. 이를 통해 동일한 모듈을 다양한 폭의 데이터 버스에 대해 재사용할 수 있습니다.
이 예제에서 parameter
는 모듈 내에서 사용되는 상수인 WIDTH
를 정의하는 데 사용됩니다. parameter
를 통해 모듈의 크기와 동작을 유연하게 설정할 수 있습니다.
0 댓글