지난 포스팅에서는 System Tasks에 대해서 알아보았다.
이번 포스팅에서는 베릴로그의 기본 설계 단위인 모듈에 대해서 알아보자.
💻 Module이란?
앞서 다뤘지만, 모듈에 대해서 한번 더 알아보자.
모듈이란 Verilog에서 구체적 부분을 구성하고 있는 기본 설계단위이다.
머리부에는 모듈이름, port 목록들을 적어둔다.
선언부에서는 필요한 것들을 선언한다.
port, reg, wire, parameter 들을 선언하며, 이 부분은 C언어의 변수선언하는 것과 똑같다.
몸체부에서는 기능들을 구현한다.
마지막에 endmodule을 꼭 붙여서 마무리 해줘야한다.
밑 SR Latch에 대한 예제를 보자.

위는 SR Latch를 베릴로그로 표현한 코드이다.
먼저, SR_Latch 모듈을 보자.
여기서 처음 Q,Qbar, Sbar, Rbar 등 필요한 포트의 list를 정렬해두었다.
다음, 출력되는 Q, Qbar와 입력되는 Sbar, Rbar를 선언해주었다.
오른쪽은 SR Latch를 실행하는 테스트 벤치이다.
wire q, qbar 와 reg set, reset을 선언하였다.
그리고 q,qbar를 output에 ~set과 ~reset을 input에 넣어주었다.
예제를 보면 module이 어떤 구성으로 이루어져있는지 감이 올것이다.
💻 Port Connection Rules
포트 연결에도 지켜야 할 규칙들이 있다.
내부적인 input port는 net 데이타 타입만 된다.
외부적인 input port는 reg나 net 데이타 타입만 된다.
내부적인 output port는 reg나 net 데이타 타입만 된다.
외부적인 output port는 net 데이타 타입만 된다.
inout port는 net 데이타 타입만된다.
이 부분이 왜그런가 물어보고 싶으면 베릴로그를 만든 사람한테 가라..
그냥 머리에 갖다 박으라고 하셨다.
하지만 매우 중요!!한 부분이다.

또한, width Matching을 잘 지켜야 한다.내부적으로 선언한 입출력 포트의 크기와 외부신호로 들어오는 입출력 포트의 크기가 같아야 한다. 그렇지않으면, 경고가 발생한다.
💻 Connecting Ports to External Signals
포트와 외부 신호를 연결하는 방법에는 두가지가 있다.
- by ordered list(Postion mapping)선언할 때 작성했던 port list와 외부 신호에서 주어진 port list의 순서를 차례대로 mapping 하는 것이다.
- by name(Named mapping)
모듈을 생성할때 port list에서 포트이름 옆에 외부 신호의 값을 같이 작성하는 것이다.
요즘 경우에는 Named mapping이 더 많이 쓰인다고한다.
'2-2 > 디지털 설계 및 실험' 카테고리의 다른 글
[디지털 설계 및 실험] Verilog 외전 (1) | 2022.10.15 |
---|---|
[디지털 설계 및 실험] Verilog 기본 vol.5 Gate-Level Modeling (0) | 2022.10.12 |
[디지털 설계 및 실험] Verilog 기본 vol.3 - System Tasks (2) | 2022.09.23 |
[디지털 설계 및 실험] Verilog 기본 vol.2 - Data types (1) | 2022.09.23 |
[디지털 설계 및 실험] Verilog 기초 vol.1 - 구성 요소 (0) | 2022.09.23 |