베릴로그로 모듈을 설계할 때 방법의 추상화 정도에 따라 네가지로 나뉠 수 있다.
추상화의 가장 상위 수준인 행위 또는 알고리즘 수준부터, 데이터플로우 수준, 게이트 수준, 마지막으로 가장 하위 수준인 스위치 수준이 있다.
게이트 수준의 설계는 논리 게이트와 논리 게이트 사이의 연결을 사용하여 모듈을 구현하는 방식이다.
사실상 논리회로를 그리는 것과 같다고 볼 수 있다.
베릴로그에서는 기본적인 논리 게이트를 프리미티브로 제공한다.
프리미티브를 인스턴스화 할 때는 인스턴스의 이름을 지정하지 않아도 관계없다.
베릴로그에서 제공하는 프리미티브로는 and/or(and, nand, or, nor, xor, xnor), buf/not(buf, not, bufif, notif)가 있다.
- and / or
and / or 게이트는 하나의 스칼라 출력과 여러개의 스칼라 입력을 가진다.
터미널 리스트에서 첫 번째 터미널은 출력이며 나머지 터미널은 입력이 된다.
wire OUT, IN1, IN2, IN3;
and (OUT, IN1, IN2, IN3);
- buf / not
buf / not 게이트는 하나의 스칼라 입력과 하나 또는 그 이상의 스칼라 출력을 갖는다.
포트리스트의 마지막 포트는 입력이며, 나머지 포트는 출력과 연결된다.
또한 컨트롤 신호를 추가한 tristate 버퍼(3상 버퍼)도 사용할 수 있다.
3상 버퍼는 컨트롤 신호가 인가될 때에만 신호를 전달할 수 있으며, 컨트롤 신호가 인가되지 않으면 하이 임피던스를 갖는다.
bufif1, bufif0, notif1, notif1을 사용할 수 있으며, 이들의 기호와 진리표는 다음과 같다.
wire OUT, IN, CTRL;
bufif1 (OUT, IN, CTRL);
프리미티브 역시 인스턴스들의 배열을 생성할 수 있다.
wire [3:0] OUT, IN1, IN2;
nand n_gate [3:0] (OUT, IN1, IN2);
/*
다음의 작업을 수행하는 것과 같다
nand n_gate0(OUT[0], IN1[0], IN2[0]);
nand n_gate1(OUT[1], IN1[1], IN2[1]);
nand n_gate2(OUT[2], IN1[2], IN2[2]);
nand n_gate3(OUT[3], IN1[3], IN2[3]);
*/
Reference: Samir Palnitkar - Verilog HDL 2판
'EE > Verilog' 카테고리의 다른 글
[Verilog] 데이터 플로우 모델링, assign 연속 할당문 (0) | 2023.01.11 |
---|---|
[Verilog] 게이트 지연 (0) | 2023.01.06 |
[Verilog] 포트(Ports)와 포트 연결 규칙 (0) | 2023.01.05 |
[Verilog] 모듈의 구성 요소 (0) | 2023.01.05 |
[Verilog] 컴파일러 지시어 (0) | 2023.01.03 |