2008/12/03에 해당되는 글 1건
2008.12.03 :: Verilog HDL 2. 문법
2008. 12. 3. 12:00 :: FPGA
이번에는 Verilog HDL의 문법에 대해서 알아보겠습니다.
각각의 Programming Language 마다 정해진 문법이 있듯이 Verilog HDL도 정해진 규칙이 있습니다. C Language와 크게 다른 것은 없지만 어느면에서 틀리고 어떤 특징을 가지고 있는지 알아보겠습니다.
1. 기본적인 사항
- 여백(white space) : 빈칸(space), 탭(tap), carriage return, line feeds 등 사용
단어들을 분리하는데 사용
공백(blank), tap 은 문자열에서 의미 있게 취급된다.
- 이름 or 식별자(identifiers)등으로 사용되는 문자는 소문자와 대문자를 구별. 예약어는 반드시 소문자로 기술하여야 한다.
- 한 문장은 반드시 세미콜론(;)으로 끝난다. (end~ 로 시작되는 예약어는 제외)
2. 주석(comments)
- C Language와 비슷하게 사용
- 소스 코드의 설명을 위해 사용. 컴파일 과정에서 무시됨
- 단일 라인 주석문 : 2개의 슬래쉬 (//) 로 시작되어 해당 라인의 끝까지가 주석이 된다.
- 블록 주석문 : /* ~~~ */ 로 표시 여러줄에 걸쳐서 주석을 사용할 수 있다.
3. 수 표현 (number representation)
정수형(integer)
<비트폭>'(따옴표로 분리)<진수><값>
- 비트폭이 없는 경우 32비트 10진수를 나타낸다.
- 진수 표현 법
b, B : 2진수
o, O : 8진수
d, D : 10진수
h, H : 16진수
- 진수에 대응 되는 값
2진수 : 0, 1, x, z
8진수 : 0~7, x, z
10진수 : 0~9(x, z 사용 불가)
16진수 : 0~9, a~f(A~F), x, z
ex) 1'b1 -> 1비트폭을 가지는 2진수. 값은 1
8'o377 -> 8비트폭을 가지는 8진수. 값은 11111111
- 숫자에서 언더바(_)를 사용하여 읽기 쉽게 할 수 있고, 숫자 크기에 영향을 주지 않는다.
실수형(real)
<가수><E or e><지수>
- 가수 : 10진수
ex) 32e-4 -> 0.0032
4.1E3 -> 4100
4. 문자열(string)
- 겹따옴표(" ") 사이에 있는 문자들. 단일 라인에 존재해야 한다. 여러 라인에 걸친 문자열은 사용 불가
- 8비트 ASCII값으로 표현되는 unsigned 정수형 상수로 취급
- 문자열 변수는 reg형 변수이며, 문자열 내의 문자 수에 8을 곱한 크기의 비트 폭을 가진다.
ex)
reg [8*12:1] string_var;
initial begin
string_var = "Hello world!";
end
- 특수 문자 앞에 확장 문자를 사용하면 일부 특수 문자를 문자열에 포함시킬수 있음.
\n, \t, \\, \", %%
- 스트링은 시뮬레이션에만 사용된다.
5. 식별자(identifiers)
- 식별자는 사용자가 정의한 변수, 모듈 이름, 포트 이름, 함수 이름, 인스턴스 이름 등을 말한다.
- 대소문자를 구별하여 인식
- 가독성을 위해 언더바(_) 사용 가능
- 단순 식별자 : 문자, 숫자, 기호 $, 언더바 등으로 구성
첫번째 문자는 숫자나 기호 $ 사용 불가, 문자 또는 언더바만 사용
- 확장 식별자(escaped identifier) : back slash 로 시작 되며 여백(빈칸, 탭, 줄바꿈) 등으로 끝남
프린트 가능한 ASCII 문자들을 식별자에 포함시키는 수단을 제공
ex) \***error***
\{a,b}
6. 키워드(keyword)
- Verilog HDL 구성요소를 정의하기 위해 미리 정의된 식별자(예약어)
- 확장문자가 포함된 키워드는 키워드로 인식되지 않는다.
이상으로 간단하게 문법을 알아 보았습니다.
다음시간엔 실제로 QUATUS를 사용하여 Verilog HDL로 여러가지 로직설계하는 방법과 시뮬레이션 방법을 알아가 보도록 하겠습니다.
각각의 Programming Language 마다 정해진 문법이 있듯이 Verilog HDL도 정해진 규칙이 있습니다. C Language와 크게 다른 것은 없지만 어느면에서 틀리고 어떤 특징을 가지고 있는지 알아보겠습니다.
1. 기본적인 사항
- 여백(white space) : 빈칸(space), 탭(tap), carriage return, line feeds 등 사용
단어들을 분리하는데 사용
공백(blank), tap 은 문자열에서 의미 있게 취급된다.
- 이름 or 식별자(identifiers)등으로 사용되는 문자는 소문자와 대문자를 구별. 예약어는 반드시 소문자로 기술하여야 한다.
- 한 문장은 반드시 세미콜론(;)으로 끝난다. (end~ 로 시작되는 예약어는 제외)
2. 주석(comments)
- C Language와 비슷하게 사용
- 소스 코드의 설명을 위해 사용. 컴파일 과정에서 무시됨
- 단일 라인 주석문 : 2개의 슬래쉬 (//) 로 시작되어 해당 라인의 끝까지가 주석이 된다.
- 블록 주석문 : /* ~~~ */ 로 표시 여러줄에 걸쳐서 주석을 사용할 수 있다.
3. 수 표현 (number representation)
정수형(integer)
<비트폭>'(따옴표로 분리)<진수><값>
- 비트폭이 없는 경우 32비트 10진수를 나타낸다.
- 진수 표현 법
b, B : 2진수
o, O : 8진수
d, D : 10진수
h, H : 16진수
- 진수에 대응 되는 값
2진수 : 0, 1, x, z
8진수 : 0~7, x, z
10진수 : 0~9(x, z 사용 불가)
16진수 : 0~9, a~f(A~F), x, z
ex) 1'b1 -> 1비트폭을 가지는 2진수. 값은 1
8'o377 -> 8비트폭을 가지는 8진수. 값은 11111111
- 숫자에서 언더바(_)를 사용하여 읽기 쉽게 할 수 있고, 숫자 크기에 영향을 주지 않는다.
실수형(real)
<가수><E or e><지수>
- 가수 : 10진수
ex) 32e-4 -> 0.0032
4.1E3 -> 4100
4. 문자열(string)
- 겹따옴표(" ") 사이에 있는 문자들. 단일 라인에 존재해야 한다. 여러 라인에 걸친 문자열은 사용 불가
- 8비트 ASCII값으로 표현되는 unsigned 정수형 상수로 취급
- 문자열 변수는 reg형 변수이며, 문자열 내의 문자 수에 8을 곱한 크기의 비트 폭을 가진다.
ex)
reg [8*12:1] string_var;
initial begin
string_var = "Hello world!";
end
- 특수 문자 앞에 확장 문자를 사용하면 일부 특수 문자를 문자열에 포함시킬수 있음.
\n, \t, \\, \", %%
- 스트링은 시뮬레이션에만 사용된다.
5. 식별자(identifiers)
- 식별자는 사용자가 정의한 변수, 모듈 이름, 포트 이름, 함수 이름, 인스턴스 이름 등을 말한다.
- 대소문자를 구별하여 인식
- 가독성을 위해 언더바(_) 사용 가능
- 단순 식별자 : 문자, 숫자, 기호 $, 언더바 등으로 구성
첫번째 문자는 숫자나 기호 $ 사용 불가, 문자 또는 언더바만 사용
- 확장 식별자(escaped identifier) : back slash 로 시작 되며 여백(빈칸, 탭, 줄바꿈) 등으로 끝남
프린트 가능한 ASCII 문자들을 식별자에 포함시키는 수단을 제공
ex) \***error***
\{a,b}
6. 키워드(keyword)
- Verilog HDL 구성요소를 정의하기 위해 미리 정의된 식별자(예약어)
- 확장문자가 포함된 키워드는 키워드로 인식되지 않는다.
이상으로 간단하게 문법을 알아 보았습니다.
다음시간엔 실제로 QUATUS를 사용하여 Verilog HDL로 여러가지 로직설계하는 방법과 시뮬레이션 방법을 알아가 보도록 하겠습니다.