1. Verilog 어휘 규약
ㅇ 어휘 토큰 (Lexical Token)
- 여백(공백문자), 주석, 수, 문자열, 키워드, 식별자, 연산자
ㅇ 여백 (공백문자 : White Space)
- 공백문자(빈칸,탭,새줄,페이지넘김 등)은, 다른 어휘 토큰들을 분리하는 역할 외에는, 무시됨
- 한편, 키워드,식별자,연산자,수 등 내에서 공백문자 허용 안됨
ㅇ 주석 (Comment)
- 1라인 주석은, 2개 슬래시(//) 이고,
- 다중라인 주석은, (/* ~ */) 이며,
- 중첩 사용은 금지
ㅇ 키워드 (Keyword)
- Verilog HDL 언어 내 미리 정의된 약 100개의 키워드(소문자)가 있음
. 例) module, endmodule, input, output, wire, and, or, not 등
ㅇ 식별자 (Identifier)
- 대소문자 구분됨
- 알파벳,숫자,밑줄(_)로 구성
- 알파벳 또는 밑줄로 만 시작 가능,
- 주로, 사용자가 정하는 이름에 쓰임 : (모듈명,신호 변수명,함수명 등)
. 例) 입력 신호 : `i_이름`, 출력 신호 : `o_이름`, 선(wire) : `w_이름`,
레지스터 : `r_이름` 등
ㅇ 연산
- 피연산자(operand) : 식별자, 리터럴, 벡터 내 인덱스,슬라이스, 함수 호출
ㅇ 표현식 (expression)
- 다양한 연산자를 활용하여 논리적, 산술적, 관계적 등의 연산을 수행하는 구문
. 주로, 회로 동작의 표현, 신호 간의 관계를 정의하는 데 사용
2. Verilog 자료형
ㅇ 자료형 (data type)
- 표현 대상 : 하드웨어에서, 신호의 전달 및 데이터의 저장
- 형태 구분 둘(2) : 네트 자료형 (net), 변수 자료형 (variable)
. 값 할당, 값 유지 방식, 하드웨어 구조 등이 다름
- 네트 (net) 자료형 : 게이트 같은 하드웨어 요소들 간의 물리적 연결 (선)
. 입력 변경시 지속 갱신됨
. 통상, 값을 저장 않고, 게이트나 연속 진행 지정문 같은 드라이버에 의해 값이 결정됨
.. 단, trireg는 값 저장 가능
. wire(기본), uwire, wand, wor, tri, triand, trior, tri0, tri1, trireg, supply0, supply1
- 변수 (variable) 자료형 : 기억 소자 같은 하드웨어 요소의 데이터 저장 형태의 추상화
. procedural 구문 실행시 만 갱신됨
. 값을 저장함
. reg, integer, time, real
ㅇ 자료의 값 (Value) 종류
- 데이터값 (value) : 0, 1, X, Z
. 0 : 논리값 0, false, 부정, GND
. 1 : 논리값 1, true, 긍정, VDD
. X : unknown (미확정), uninitialized (초기값 미설정)
. Z : high-impedance, tri-stated, floating (미연결 상태)
- 세기 (strength) : `()`은 세기 레벨
. supply1 (7), supply0 (7), strong1 (6), strong0 (6), pull1 (5), pull0 (5),
large (4), weak1 (3), weak0 (3), medium (2), small (1), highz1 (0), highz0 (0)
.. (다수 드라이버에서 동시에 신호 줄 때, 가장 높은 레벨 취함)
.. (모두 같은 세기 레벨일 때, unknown)
.. (만일, 세기 미지정이면, stong (6) 취함)
ㅇ 상수 (constant)
- 정수형 상수 : 10진수, 16진수, 8진수, 2진수
- 실수형 상수 : IEEE 754 - 1985 에 따름 (64 비트 배정밀도)
3. 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를 사용하여 구분
ㅇ 모듈 : module ~ endmodule ☞ Verilog 모듈 참조
- Verilog HDL에서 기본 설계 단위
. 설계된 시스템의 입출력, 동작에 대한 기술(description)이,
. 이러한 모듈 내에 담겨있게됨
4. Verilog 서브프로그램
ㅇ 태스크, 함수
- 코드 반복을 줄이기 위한 서브 프로그램(Subprogram)