1. Verilog에서, 구문 이란?
ㅇ Verilog 문장 형태들로 조합/구성되어 만들어지는 요소
- 이를통해, 하드웨어 동작이나 구조를 정의 또는 표현하게 됨
2. Verilog의 주요 구문 유형
ㅇ 모듈 정의 구문 : 설계의 기본 단위인 모듈을 정의 ☞ Verilog 모듈 참조
- module ~ endmodule
. 설계된 시스템의 입출력, 동작에 대한 기술(description)이,
. 이러한 모듈 내에 담겨있게됨
ㅇ 선언 구문 : 다양한 데이터 타입과 변수들을 선언
- wire a; reg b;
ㅇ 할당 구문 : 네트나 변수에 값을 주는 방법 (우변 값이 변할 때 할당이 일어남)
- 연속적 할당 : 주로 assign 키워드를 사용하여 수행
- 절차적 할당 : always, initial 블록 내에서 사용
. 구분 : 동기적 할당, 비동기적 할당
- 어떤 계산을 수행하기 보다는 신호들 간의 관계를 정의하는 것
. 例) E = D C = (A + B) C
.. wire D; assign D = A || B; assign E = D && C;
.. 또는, E = (A||B)&&C;
ㅇ 제어 구문 : 조건문, 반복문 등 논리적 제어를 위한 구문
- 조건문 : 조건에 따라 실행
. if (조건문), case (다중 조건문)
- 반복문 : 반복적인 동작을 정의
. for (반복문), while (조건에 따른 반복문)
ㅇ 블록 구문 : 여러 구문을 하나의 묶음으로 구성
- 블록의 시작과 끝이 중괄호({ })가 아닌 begin과 end 등을 사용하여 구분
. 순차적(절차적) 블록 : begin ... end
. 병렬적 블록 : fork ... join
ㅇ 구조적 구문 : 하드웨어 구성 요소를 연결하는 방식으로 설계 표현
- assign (논리 값 할당), instance (다른 모듈을 인스턴스화)
ㅇ 프로시저 구문 : 하드웨어 동작의 흐름을 절차적으로 기술하는 구문
- 순차적 구문 : 시간 순서대로 실행되는 구문
. always (특정 조건에 따라 반복 실행), initial (시뮬레이션 시작 시 한번만 실행)
- 함수 및 태스크 구문 : 반복되는 동작을 함수나 태스크로 정의
. function (값을 반환하는 함수), task (값을 반환하지 않는 태스크)
ㅇ 타이밍 제어 구문 : 특정 시간에 동작을 제어
- # (지연 시간 지정). @ (특정 이벤트에 대한 대기)
ㅇ 테스트벤치 구문 : 하드웨어 모듈을 검증하기 위한 시뮬레이션 환경을 제공
3. 설계 목적에 따른 Verilog 구문의 분류
ㅇ 논리 합성 구문
- assign 문, always 문, if-else 문 등 논리 합성 지원용 구문
ㅇ 시뮬레이션 구문
- initial 문, $finish, $fopen 등 시뮬레이션을 위한 테스트 벤치 작성
. 테스트 벤치 작성, 타이밍 제어(Timing Control), 이벤트와 디버깅 등
ㅇ 라이브러리 설계 구문
- specify, $width, table 등 라이브러리의 설계 작성 및 셀의 기능,지연,핀 정보 등을 정의
4. 절차적 동작을 기술하는 Verilog 프로시저 구문 (procedural statements)
ㅇ 하드웨어의 동작(=행동)을 절차적으로 기술하는 구문
- 이들은 반드시 특정한 프로시저 블록 안에서 만 사용됨
ㅇ 하드웨어의 동작(시퀀스, 연산, 조건, 반복 등)에 대한 절차적 코드이며,
- 다음 4가지 블록 내 포함되어 작성됨
. initial : 한 번만 실행됨, 시뮬레이션 시작 시 단 한 번 실행
.. 주로, 시뮬레이션용 초기화, 테스트벤치 작성, 파형 출력 등에 사용
.. 특징 : 시간 지연 가능, 반환값 없음, 대부분 합성 가능
. always : 무한 반복적으로 실행, 트리거 조건(@)이 발생할 때마다 실행됨
.. 주로, 회로 동작 설명 (클럭 기반 등)
.. 특징 : 시간 지연 가능, 반환값 없음, 항상 합성 가능
. task : 여러 줄로 구성된 프로시저 함수
.. 주로, 절차적 동작 묶음
.. 특징 : 시간 지연 가능, 반환값 없음, 합성 불가능
. function : 하나의 값을 반환하는 함수
.. 주로, 계산용 함수
.. 특징 : 시간 지연 불가능, 반환값 있음, 항상 합성 가능 (조합논리)