다음의 블록을 생성하고자 할 때 Verilog가 어떻게 사용되는지를 보자.
module mod1(
input wire [1:0] A,
output wire B,
output wire C
);
assign B = A[0] & A[1];
assign C = ~(A[0] | A[1]);
endmodule
인풋 A와 아웃풋 B, C가 존재하고, 블록 내부에서는 인풋 A에 의해 아웃풋 B가 결과로 나오게 되는 AND 게이트와 아웃풋 C가 결과로 나오는 NOR 게이트가 구성되어 있다.
그렇다면 현재 위 코드에서 사용된 wire가 무엇인지를 정의할 필요가 있습니다.
Verilog에서는 wire와 reg를 통해 타입을 규정하게 됩니다. 그 중 wire는 값을 저장할 수 있고, reg는 레지스터와 같이 값을 저장할 수 있음을 말합니다.
디지털 로직은 크게 Combinational Logic과 Sequential Logic으로 나뉘는데, Combi Logic에서 우리는 wire를 사용하게 됩니다.
wire sum = a + b;
위 a와 b의 덧셈의 결과값이 sum에 들어가는 것을 의미하게 됩니다. 이 때, sum은 a와 b에 들어오는 신호에 따라서 바뀔 수 있음을 wire를 통해 알 수 있습니다.
그리고 추후 포스팅이 될 것이지만
output을 만들고자 할 때, assign 문을 사용할 때는 wire를, always 문을 사용할 때는 reg를 사용하게 된다.
다시 원래 예문의 코드로 돌아와서,
assign을 사용했기 때문에 위 모듈에서 변수를 설정할 때에 wire를 사용했음을 알 수 있다.
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
<결론>
Verilog에는 Data Type이 두 가지 존재한다.
Variable : 변수로써 값이 바뀌는 것. 또한, 값을 저장하는 것도 가능하다. reg를 기본적으로 사용한다.
Net : 말 그대로 '전선'. 값 저장이 불가능하다. wire를 기본적으로 사용한다.
'Verilog' 카테고리의 다른 글
4. 연산자 Operator (0) | 2023.07.13 |
---|---|
3. Verilog의 모듈 구조 (0) | 2023.07.13 |
2. Verilog의 벡터(Vector) 표현 및 카운터 모듈 예제 (0) | 2023.07.13 |
포스팅 할 수 있는게 생기긴 했는데 (0) | 2023.07.11 |
0. ASIC 설계 과정 (0) | 2023.06.27 |