Verilog 핵심 요약: 모듈, 데이터 타입, 할당문 3분 만에 익히기
Verilog 설계의 모든 행동 코드는 module~endmodule 안에 들어갑니다. 모듈은 입출력 포트로 외부와 통신합니다.
모듈 기본 구조
module testbench; endmodule // 빈 모듈
module dff (input d, clk, rstb, output q); endmodule // 포트 있는 모듈
데이터 타입: reg vs wire
| 타입 | 비유 | 할당 위치 |
reg | 변수 (값 저장) | initial, always 블록 내부 |
wire | 전선 (연속 구동 필요) | assign 문, 포트 연결, 모듈 인스턴스 출력 |
module testbench;
reg d, rst_b, clk; // 저장 필요 → reg
wire q; // 연결용 → wire
endmodule
3대 기본 블록
| 블록 | 문법 | 실행 조건 |
always | always @(cond) ... | 조건 만족 시마다 반복 실행 |
initial | initial ... | 시뮬 시작 시 1회 실행 |
assign | assign lhs = rhs; | RHS 변경 시 LHS 연속 업데이트 |
필수 규칙 3가지
reg 타입은 initial/always 블록에서만 할당 가능
wire 타입은 assign 문으로만 할당 가능
initial/always 블록에 문장 여러 개면 begin ... end 필수
최소 테스트벤치 예제
module testbench;
reg d, rst_b, clk;
wire q;
initial begin
d = 0; rst_b = 0; clk = 0;
#100 $finish; // 100시간 단위 후 종료
end
always begin
#10 clk = ~clk; // 10마다 토글 → 20 주기 클럭
end
endmodule
포인트:
#10: 시간 10 단위 지연
clk = ~clk: 클럭 토글
$finish: 시뮬레이션 강제 종료
always 조건 없음 → 무한 루프 (지연문으로 시간 전진 필수)
다음 학습 단계
always @(posedge clk)로 순차 논리(플립플롭) 작성
always @(*)로 조합 논리 작성
assign으로 간단 조합 논리/넷 연결
- 모듈 인스턴스화로 계층 설계
- 테스트벤치로 기능 검증