교육/Verilog

Verilog HDL의 어휘 토큰과 규칙

semicon_circuitdesigner 2024. 6. 30. 21:57

1. 여백

  • 빈칸, 탭 등을 포함하는 어휘 토큰
  • 어휘 토큰의 분리를 위해서 사용되는 경우 이외에는 무시된다.

2. 주석

  • 단일 라인 주석문은 //로 시작되어 줄바꿈으로 끝난다.
  • 블록 주석문은 /*로 시작되어 */로 끝나며, 그 사이의 모든 내용이 주석문으로 처리된다.

3. Verilog HDL의 수 표현 방식

[size_constant]'base_format <number_value>
  • [size_constant]
    • 상수 값의 비트 수를 나타낸다.
    • 0이 아닌 unsigned 10진수로 사용한다.
    • 생략 시 unsized 수가 되며 32비트로 표현된다.
  • 'base_format
    • 밑수(base) 지정 문자로 2진수는 b/B, 8진수는 o/O, 10진수는 d/D, 16진수는 h/H를 지정하며, 대소문자 구분은 없다,
    • signed를 나타내기 위해 s/S가 사용될 수 있다.
    • 인용부호( ' )와 밑수 지정 문자는 붙여야 한다.
  • number_value
    • unsigned 숫자를 사용하여 값을 표현한다.
    • 'base_format으로 지정된 밑수에 적합한 숫자로 구성되어야 한다.
    • 16진수를 나타내는 문자 a~f는 대소문자 구별이 없다
    • 'base_format과 number_value 사이에는 부호(+나 -)가 사용될 수 없다.
    • 가독성을 위해 첫 숫자를 제외하고 중간에 밑줄을 사용할 수 있다.
  • 사용 예시
    • unsized 상수
       - 659 : 단순 10진수 표현 -> 32비트의 unsized 상수 취급
       - 'h837FF : size_constant가 생략되었으므로 32비트의 16진수 취급
       - 'o7460 : size_constant가 생략되었으므로 32비트의 8진수 취급
       - 4af : 10진수 표현이라면 'af' 사용이 불가하고, 16진수 표현이라면 'h가 필요하므로 문법적 오류
    • sized 상수
       - 4'b1001 : 4비트의 2진수 1001을 나타냄
       - 5'D3 : 5비트로 표현된 10진수 3을 나타냄
       - 3'b01x : LSB가 x인 3비트의 2진수 01x를 나타냄
       - 12'hx : 12비트의 x를 나타냄
       - 16'hz : 16비트의 z를 나타냄 
    • 상수와 부호
       - 8'd-6 : 밑수 지정자( base_format )d와 값 사이에는 부호( +, - )가 사용될 수 없으므로 문법적 오류
       - -8'd6 : -(8'd6)과 등가이고, 10진수 -6을 나타냄 / 2의 보수 형식의 8비트 1111_1010을 나타냄

4. 문자열

  • 문자열 변수는 reg 자료형의 변수
  • 문자열 할당 시 이중 인용 부호("") 사이의 내용을 할당한다.
  • 문자열을 구성하는 문자 개수에 8을 곱한 크기의 비트 폭을 갖는 reg 필요하다. 예를 들어, 문자열 "Hello World!"을 저장하기 위해서는 8*12=96비트의 reg 변수가 필요하다.
    reg [8*12:1] string_var;
    initial begin
    	string_var = "Hellow World!";
    end
     
  • 문자열에 포함할 수 있는 이스케이프 문자열에 의한 특수문자는 다음과 같다.
    • \n:  줄바꿈
    • \t: 탭(tab)
    • \\: \문자(back slash)
    • \": "문자
    • \ddd: 1~3 octal digits로 지정되는 문자

5. 식별자와 키워드

  • 식별자: 객체에 이름을 지정하기 위해 사용된다.
    • 단순 식별자: 일련의 알파벳 문자, 숫자, $, 밑줄 등으로 구성(첫 문자는 숫자나 $ 사용 불가)
  • 키워드: Verilog HDL의 구성요소를 위해 미리 정의된 식별자
    • 모든 키워드는 소문자로만 정의됨
    • ex) always / and / if / assign / begin / case / cell / end / else / endcase / module / endmodule / parameter / ...

6. 시스템 태스크와 시스템 함수

  • 문자 $로 시스템 태스크와 시스템 함수 호출
  • ex) $finish; //시뮬레이션을 종료하는 시스템. 테스트벤치에서 주로 사용된다.

7. 컴파일러 지시어

  • 문자 '는 컴파일러 지시어를 지정하기 위해 사용된다.
  • ex) 'define wordsize 8  //소스파일 내의 wordsize가 8로 대체되어 컴파일된다. 끝에 ;를 붙이지 않는다.