728x90
Verilog의 어휘요소
어휘요소란?
- Verilog HDL을 사용하기 위해서는 어위효소(lexical element)와 기본적인 문법을 알아야 한다.
- Verilog의 어휘요소는 여백(white space), 주석(comment), 연산자(operator), 식별어(identifier), 예약어(reserved word) 등이 있다.
- 어휘요소들은 대소문자를 구분하고, 연산자 및 예약어는 소문자로 이루어져 있다.
여백(white space)
- 여백(white space)은 빈칸(space), 탭(tab), 그리고 줄 바꿈(new line) 등을 말하며 verilog 코드의 가독성을 높일 수 있도록 적절히 사용하는 것이 좋다.
- 일반적으로 어휘 요소들을 분리하기 위해 사용되는 경우를 제외하고 컴파일 시 무시된다.
- 하지만 공백과 탭은 문자열(string)에서는 의미있게 취급된다.
주석(comment)
- 주석(comment)은 verilog 코드의 설명을 위해 사용되며, 여백과 마찬가지로 컴파일 과정에서 무시된다.
- 주석을 사용하는 방법은 두가지가 있다.
- // : 한 줄 주석 시 필요
- /* */ : 여러 줄 주석 시 필요
- 예시
*주석의 사용 방법1
// 한 줄 주석을 사용한 예, 해당 줄 전체가 주석
*주석의 사용 방법1
/* 여러 줄 주석을 사용한 예,
여러 줄이 모두 주석으로 처리 된다. */
*잘못된 주석의 사용
/* 이러한 /* 주석 처리는 */ 잘못된 방법이다. */
연산자(operator)
- 연산자는 3가지 유형의 연산자가 있다.
- 단항 연산자 : 피연산자 앞에 쓰임.
- a = ~b --> b는 피연산자
- 2항 연산자 : 피연산자 사이에 쓰임.
- a = b && c --> b와 c는 피연산자
- 3항 연산자 : 각 피연산자 사이에 쓰임.
- a = b ? c : d --> b, c, d는 피연산자
수(number)
- 수 표현 : <비트 폭>'<진수><값>
- 비트 폭이 생략된 경우 비트 폭은 32비트, 진수가 생략된 경우 10진수로 취급되므로 설계 후 합성 시 설계 사이즈가 커질 수 있음을 주의해야 한다.
- verilog에서는 밑수(base)로 e나 E를 사용하여 실수형 상수를 표현할 수 있으나 시뮬레이션용으로만 사용
- verilog에서 수의 표현 예
표현 | 비트폭 | 진수 | 2진수 표현 | 비고 |
10 | 32 | 10진수 | 00...01010 | 정수형 상수로 설계와 시뮬레이션에서 모두 사용 가능 |
1'b1 | 1 | 2진수 | 1 | |
8'haa | 8 | 16진수 | 1010_1010 | |
8'o377 | 8 | 8진수 | 11111111 | |
'hff | 32 | 16진수 | 00...011111111 | |
4'd5 | 4 | 10진수 | 0101 | |
-5'b00001 | 5 | 2진수 | 11111 | |
32e-4 | - | 실수 | 0.0032 | 실수형 상수로 시뮬레이션 용 |
4.1E3 | - | 실수 | 4100 |
- unsized 상수의 표현
123 // 32비트 10진수 123 -> 2진수로 0000_0000_0000_0000_0000_0000_0111_1011
'b1010 // 32비트 2진수 0000_0000_0000_0000_0000_0000_0000_1010
'h12FF // 32비트 16진수 0000_12FF, h'12ff와 동일한 표현
1ff // 문법 오류, 'h가 필요, 10진수로는 ff가 표현이 안되기 때문
- sized
-5'b00001 // 5비트 2진수 111111로 저장됨, 00001의 2의 보수(2's complement)
// 11110 + 1, 2의 보수는 모든 비트 수를 반전시킨 후 1을 더한 것
8'o123 // 8비트 8진수 123 -> 2진수 0101_0011
16'hFF // 16비트 16진수 00FF -> 2진수로 0000_0000_1111_1111
5'd10 // 5비트 10진수 10 -> 0_1010
- 실수형 상수의 표현(시뮬레이션 용으로 합성 불가)
0.01
123.0
1.2E12 = 1.2e12
1.2e-3 = 1.2E-12
.5 //문법 오류 -> 0.5로 수정
1.E6 //문법 오류 -> 1.0E6로 수정
문자열(String)
- 2개 이상으로 구성된 문자
- 겹따옴표(" ")로 둘러싸며 한 라인을 넘길 수 없음.
- C언어에서와 같이 에스케이프 문자(\t, \n, \\, \", %%)를 사용할 수 있음.
- 문자열 변수는 reg형 변수
- 문자열 내 문자 수에 8을 곱한 크기의 비트 폭, 즉 1byte ASCII값으로 취급
- 문자열은 시뮬레이션에서만 사용 가능함(하드웨어로 합성 불가)
- 문자열 사용 예
"A String" //문자열 사용 예
"This is value is %b" //문자열 사용 예
reg [8*19:0] string_var //문자열 변수 string_var를 reg형으로 선언
string_var = "Hello verilog world!"; //문자열 변수 string_var에 문자열 할당
식별어(identifier)
- 식별어 또는 식별자는 사용자가 설계 시 필요에 따라 정의한 변수, 모듈 이름, 포트 이름, 함수 이름, 인스턴스 이름 등을 말하며 공백을 가지지 않는 문자열(string)이다.
- 사용 규칙
- 첫 문자는 알파벳 문자(a~z, A~Z) 혹은 언더 바(_) 사용 가능함
- 다음 문자부터는 영문자, 숫자, 언더바, $ 사용할 수 있음
- 이름 중간에 공백(스페이스)을 사용할 수 없음
- 이름은 1023문자까지 사용 가능하며 대문자와 소문자를 구별함
- 에스케이프가 있는 이름은 백슬래쉬(\)로 시작하고 백슬래쉬 뒤는 프린트 가능한 모든 ASCII 문자를 사용할 수 있으며 여백(빈칸, 탭, 줄바꿈)으로 끝남
- 사용 예
shift_reg
_BUS
_a$123
error_a // Error_a와 구별됨
99_net // 문법 오류, 숫자로 시작할 수 없음
a*b@com // 이름에 특수기호(*)나 기호(@)가 포함될 수 없음
예약어(reserved word)
- 예약어는 키워드라고도 하며 verilog에서 구문을 기술할 때 미리 지정된 문자열을 말한다.
- 사용자가 정의한 식별와 구별하기 위해 다른 문자열들과 색이 다르게 표현되며 소문자를 사용한다.
- 이 예약어들은 독립적으로 사용하거나 예약어들을 조합해서 사용하고 일부 예약어는 시뮬레이션에서만 사용하는 것도 있다.
이 글은 "따라하면서 배우는 디지털 시스템 설계 및 응용 with Verilog HDL"을 기반으로 작성했음을 알립니다.
'verilog > 이론' 카테고리의 다른 글
[verilog] verilog의 연산자(1)(산술연산자, 논리연산자, 비트단위 논리연산자) (2) | 2023.11.15 |
---|---|
[verilog] 벡터(vector)와 배열(array) (0) | 2023.11.13 |
[verilog] verilog의 자료형 (0) | 2023.11.11 |
[verilog] 모듈(module)과 테스트 벤치(testbench) (0) | 2023.11.02 |
[verilog] Verilog HDL과 설계 (0) | 2023.09.27 |