EE/Verilog HDL

[verilog HDL] Syntax 3. Port

아이스얼그레이 2022. 2. 22. 18:27

port는 module과 외부환경 사이의 상호작용을 나타내는 interface 입니다. module을 직접 설계할 때도 몇 개의 input과 몇 개의 output을 만들지 결정하는 것이 매우 중요하며, 이미 만들어진 module을 사용할 때도 몇 개의 input과 몇 개의 output이 있는지 확인하는 것이 중요합니다.

 

또한 port를 terminal이라고 부르기도 합니다.

 

1. Port Declaration

port에는 input, output 그리고 inout이 있습니다. 이때 inout은 양방향 통신이 가능한 port라고 이해하면 됩니다. 아직 자세히 배우지 않아서 이 포스팅에서는 다루지 않겠습니다.

 

만약 어떤 port가 값을 holding한다면, 그 port는 reg가 되어야 합니다. 그리고 어떤 port가 input에 의해 영향을 받는다면, 그 port는 wire가 되어야 합니다.

 

이때 input이 항상 reg로 선언해야 한다는 것은 자명합니다. 하지만 output은 wire로 선언되지 않는 경우도 있습니다.

 

combinational logic의 경우, 입력이 바뀔 때 출력이 항상 변합니다. 그래서 이때는 output을 wire로 선언하는 것이 맞습니다.

하지만 sequential logic은 입력이 바뀔 때 출력이 변할 수도있고 원래의 값을 유지할 수도 있습니다. 그러므로 이 경우에는 output을 reg로 선언해야 합니다.

 

또한 module 내에서 always 구문을 쓰며, 그 구문내에 output이 포함되어 있을 때도 output을 reg로 선언해야 합니다. 이에 대한 이유는 아직 모르겠네요.

 

port 선언은 module 선언시 input, output까지 한꺼번에 할 수 있습니다. 그리고 module에서는 변수명만 선언하고 module 내에서 input, output을 따로 선언할 수도 있습니다. 둘 중 어떤 방식을 써도 상관없지만 둘 다 알아야 합니다.

 

2. Port Connection Rules

3학년 1학기에 논리회로설계를 처음들을 때 엄청 헷갈리게 했던 내용입니다. 찬찬히 읽으면 금방 이해가 가는데 그때는 왜 공부를 안했을까 싶네요.

 

그 내용은 다음과 같습니다.