1. Verilog의 입·출력 / 모듈

다음의 블록을 생성하고자 할 때 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