-
반응형
1. Verilog HDL의 기본 구조
Verilog HDL은 모듈을 기본 단위로 하여 구성된다. 키워드 모듈로 시작되어 키워드 end 모듈로 끝난다. Verilog HDL의 모듈은 머리부, 선언부, 몸체부 등 크게 세 부분으로 구성된다.
머리부는 키워드 module로 시작하여 모듈 이름, 포트 목록 그리고 세미콜론(;)으로 끝난다. 모듈 이름은 식별자 규칙에 따라 설계자가 지정하며, 키워드와 동일 한 이름을 사용할 수 없고, 가독성을 위해 밑줄이 포함될 수 있다. 가능하면, 회로의 함축적으로 나타내는 모듈 이름을 사용하는 것이 좋다. 모듈 이름 뒤의 괄호에는 모듈의 포트들을 나열한다. 포트를 나열함에 있어서 규칙에 따라 포트 신호들을 나열하는 것이 바람직하다. 테스트벤치 모듈의 경우에는 포트 목록이 생략될 수 있다.
선언부는 포트 목록에 나열된 포트들의 방향, 비트 폭, reg 및 wire선언, parameter 선언 등 모듈에서 필요로 하는 것들을 선언한다.
몸체는 회로의 기능, 동작, 구조 등을 표현하는 다양한 Verilog HDL의 구문들로 구성된다. 게이트 프리미티브 또는 하위 모듈의 인스턴스, always 또는 initial 구문, 함수 또는 task 정의 및 호출, assign문 등을 적절하게 사용하여 회로를 모델링한다. 합성을 위한 RTL 수준의 모델링에서는 합성이 지원되는 구문만 사용해야 한다. Verilog HDL의 문장들은 기본적으로 병행문이므로, 몸체를 구성하는 문장들은 그 순서에 무관하게 동일한 결과를 갖는다.
2. Verilog HDL 프로그램의 구조
게이트 프리미티브를 이용한 모델링의 예로서 반가산기 회로의 Verilog 모델링을 보인다. 모듈 이름은 H_ADD이며, 포트 목록에는 반가산기의 입력 신호 X, Y와 출력 신호 C, S가 나열된다.
module H_ADD(X, Y, C, S)
module은 Verilog HDL 예약어이고, "H_ADD"는 모듈의 이름, "(X, Y, C, S)"는 모듈에서 사용되는 포트 이름을 열거한 것이며, 모듈 선언 형식은 다음과 같다.
모듈의 선언부에는 포트 목록에 나열된 신호들의 방향과 비트 폭, 그리고 몸체부에서 필요한 신호들이 선언된다. 포트목록에 있는 포트 이름들은 다음과 같은 것들을 사용할 수 있다.
a. 식별자
b. 모듈 내에 벡터로 선언된 것을 중에 1비트
c. 모듈 내에 벡터로 선언된 벡터
d. 비트 결합연산자
포트 목록을 표현하는 방법은 다음과 같다.
a. 포트 이름은 왼쪽괄호(()로 시작해서 오른쪽 괄호())로 끝나며, 반드시 세미콜론(;)으로 문장이 끝나야 한다.
b. 포트 이름은 콤마(",")로 분리한다.
c. 입출력의 포트이름은 어느 것을 먼저 써도 관계가 없다.
코드 H_ADD_1과 H_ADD_2는 프리미티브 게이트와 연속 할당문을 이용한 반산기의 모델링이 예이다. Verilog HDL의 연속 할당문은 assign 문으로 표현되며, 할당 기호 '='의 좌변의 신호에 우변의 결과 값을 할당한다.
코드 H_ADD_2의 모델링은 C와 S에 대한 논리식을 Verilog HDL의 연산자 &와 연산자 ^를 사용하여 직접 표현하였다. 앞에서도 언급되었듯이, Verilog HDL 모델리의 몸체부를 구성하는 문장들은 병행문이므로, 두 개의 assign 문장들은 그 순서에 무관하게 동일한 결과를 갖는다.
assign문
간단한 조합회로는 assign문을 이용하여 표현한다. 이 경우 간단하다는 것은 회로 규모가 간단하다는 것이 아니라, 표현 방법은 좀 복잡하지만, 논리 연산이나 산술 연산 등이 길어서 한 줄로 표현할 경우에는 assign문을 이용한다는 의미이다. assign은 연속 대입문이라 말한다. 즉 회로에 접속되어 있어서 구동되고 있는 상태를 말한다.
3. Verilog HDL의 테스트벤치(Test Bench)
회로 모델링 모듈과 유사한 구조를 가지며, 모듈 머리부에 포트 목록이 생략된 형태를 갖는다. 선언부에는 시뮬레이션 되는 모듈의 입력 포트 신호를 reg로 선언하고, 몸체부는 시뮬레이션되는 모듈의 인스턴스와 시뮬레이션 입력 신호를 생성하는 initial 또는 always 문으로 구성된다. Verilog HDL의 테스트벤치는 크게 세 부분으로 구성된다.
- DUT에 인가될 시뮬레이션 입력을 생성하는 절차적 구문
- 시뮬레이션 대상이 되는 Verilog HDL 모듈의 인스턴스
- 시뮬레이션 입력에 대한 DUT의 반응을 관찰하는 절차적 구문
4. Verilog HDL의 기본 문법
기본적인 사항
- 스페이스는 단어들을 분리하는데 사용되며, 그 이외에 탭, 캐리지 리턴, 라인 피드 등을 사용할 수 있다.
- 이름 혹은 식별자 등으로 사용되는 문자는 소문자와 대문자를 구별하며, Verilog - HDL의 예약어는 반드시 "소문자"로 기술하여야 한다.
- 한 문장은 반드시 세미콜론(;)으로 끝난다.
주석
주석은 어느 곳에든지 사용할 수 있으면, 이미 앞에서 설명하였듯이 다음과 같이 2가지 방법이 있고, 주석 기호 속에 또 주석 기호를 사용할 수 없다.
- 2개의 슬래시(//)로 시작하며, 이 경우는 그 줄 끝까지가 주석이 된다.
- /*로 시작해서 */로 끝난다. 이 경우는 여러 줄에 걸쳐서 주석을 사용할 수 있다.
숫자
Verilog HDL에서 숫자는 정수와 실수를 사용할 수 있다. 숫자에서 언더바(_)를 사용하여 읽기 쉽게 할 수 있고, 언더바 (_)는 숫자 크기에 영향을 주지 않는다. Verilog HDL에서 실수는 과학적인 기호나 10진수로 표현할 수 있으며, 실수 표현은 시뮬레이션에서만 사용된다.
식별자
식별자는 사용자가 정의한 변수, 모듈 이름, 포트 이름, 함수 이름, 인스턴스 이름 등을 말하며, 다음과 같은 규칙이 있다.
처음 문자는 알파벳문자(a~z, A~Z) 혹은 언더바(_)를 사용할 수 있다. 다음문자부터는 영문자, 숫자, 언더바(_),$를 사용할 수 있다. 이름 중간에 공백(스페이스)을 사용할 수 없고, 이름은 1023 문자까지 사용할 수 있다. 대문자와 소문자를 구별하며, 에스케이프가 있는 이름은 백슬래시(\)로 시작한다. 이때는 프린트 가능한 모든 ASCII 문자를 사용할 수 있으며, 백슬래스(\)는 이름에 포함되지 않는다.
반응형