이 글에서는 verilog 기본 문법을 살펴보겠습니다. 먼저 알아야 할 것은 한 문장의 끝은 세미콜론(;)으로 마무리해야 한다는 겁니다.
- Verilog 기본 문법
module module_name (port_list);
//선언
reg reg_name;
wire wire_name;
parameter parameter_name;
//회로 설명 part
인스턴스화
always 문
initial 문
function, task 정의
assign 문
endmodule
하나하나 알아볼까요?
1. 모듈 선언
module: 기본 설계 단위입니다. module - endmodule, 한 파일에 여러 개의 module이 들어갈 수 있지만 한 개의 module만 작성하는 것을 추천합니다.
port_list: 해당 회로에 input port와 output port를 정의해 줍니다. input과 output port가 없으면 비워도 됩니다. ()
2. 자료형, 상수 선언
베릴로그 자료형은 크게 2가지로 나뉩니다.(Net, register)
- Net
Net은 하드웨어 간의 단순한 물리적 연결입니다, 따라서 연속 할당(assign 문)에 사용됩니다. Net의 종류에는 wire, wand, wor 등이 있지만 실무에서 wire 말고 다른 net을 본 적은 없으므로 저는 wire만 사용하겠습니다.
- Register
Variable 자료형으로 절차적 할당(=, <=)에 사용됩니다. Register의 종류에는 reg, integer, real 등이 있지만 reg를 주로 사용합니다.
reg: 플립플롭이나 래치 같은 저장소자를 모델링할 수 있습니다.
마지막으로 parameter를 통해 상수를 선언할 수 있습니다.
3. 회로 설명
실제 회로의 기능이나 동작하는 방식, timing이 기술됩니다. 인스턴스화를 통해 회로의 구조를 기술할 수 있고 inital문, always문 등을 통해 회로 동작을 기술합니다.
여기서 인스턴스화는 이미 완성된 모듈은 서브 모듈로 가져오는 것을 말합니다.
회로 설명에서 사용되는 구문에는 크게 2가지가 있는데 논리 합성에 사용되느냐, 되지 않느냐로 나눌 수 있습니다. 논리 합성이 되는 구문은 하드웨어 설계에, 합성되지 않는 구문은 시뮬레이션에 사용된다고 보시면 됩니다.
논리합성 | Simulation |
assign if ~ else case always 등 |
테스트벤치의 회로 설명 시스템 task ($display, $finish 등) |
마지막으로 주의할 점은, 선언된 자료형과 상수만 사용해야 한다는 것입니다. 그렇지 않을 경우, syntax error가 발생합니다.
4. 주석
//: 이후로는 해당 라인 끝까지 주석처리됩니다.
/* ~ */: 구간 주석
reg a; //이후로는 주석처리
reg b;
//wire f만 선언됨
wire /*c;
wire d;
wire e;
wire */ f;
'프로그래밍 > Verilog' 카테고리의 다른 글
베릴로그 문법 (4) always 구문 (0) | 2024.06.13 |
---|---|
베릴로그 문법 (3) 인스턴스와 계층 구조 (0) | 2024.06.12 |
베릴로그 문법 (2) initial 구문과 testbench, 절차 할당과 연속 할당 (0) | 2024.06.11 |
베릴로그 개요와 시뮬레이션 환경 세팅 (0) | 2024.05.31 |