모듈을 정의할 때에는 항상 module ~ endmodule 형식을 갖추어야 한다.
모듈 정의의 맨 처음 부분에서는 포트리스트와 포트 선언, 파라미터가 올 수 있다.
모듈 정의에 들어갈 수 있는 요소로는 5가지가 있다.
- 변수 선언: wire, reg 또는 다른 변수들
- 데이터플로우 문: assign
- 하위 모듈의 파생(인스턴스화)
- 행위적 블록: always, initial 블록, 모든 행위 선언은 이 블록에서 일어난다.
- 태스크와 함수
모듈 정의에 이 다섯가지가 모두 들어갈 필요는 없다. 필요에 따라 선택적으로 사용할 수 있다.
SR 래치 코드를 예로 하여 모듈 정의의 요소들을 살펴보겠다.
module SR_latch(Q, Qbar, Sbar, Rbar); //포트 리스트
//포트 선언
output Q, Qbar;
input Sbar, Rbar;
//하위 모듈의 인스턴스화
nand n1(Q, Sbar, Qbar);
nand n2(Qbar, Rbar, Q);
endmodule //모듈 정의 끝
module Top; //포트 리스트 없음
//변수 선언
wire q, qbar;
reg set, reset;
//하위 모듈의 인스턴스화
SR_latch m1(q,qbar, ~set, ~reset);
//행위적 블록(initial)
initial
begin
$monitor($time, " set = %b,reset = %b, q = %b\n", set, reset, q);
set = 0; reset = 0;
#5 reset = 1;
#5 reset = 0;
#5 set = 1;
end
endmodule //모듈 정의 끝
Reference: Samir Palnitkar - Verilog HDL 2판
'EE > Verilog' 카테고리의 다른 글
[Verilog] 게이트 수준 모델링 (0) | 2023.01.06 |
---|---|
[Verilog] 포트(Ports)와 포트 연결 규칙 (0) | 2023.01.05 |
[Verilog] 컴파일러 지시어 (0) | 2023.01.03 |
[Verilog] System task (0) | 2023.01.03 |
[Verilog] 베릴로그 자료형 (0) | 2023.01.03 |