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