본문 바로가기
verilog/이론

[verilog] verilog의 어휘요소(여백, 주석, 연산자, 식별어, 예약어)

by 씐 2023. 11. 6.
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"을 기반으로 작성했음을 알립니다.