Verilog 모듈 구조
Verilog 디자인은 단일 파일에 단일 시스템을 설명합니다. 파일에는 *.v 접미사가 있습니다. 파일 내에서 시스템 설명은 모듈 내에 포함됩니다. 모듈에는 시스템에 대한 인터페이스(즉, 입력 및 출력)와 동작 설명이 포함됩니다.
다음 그림은 Verilog 파일의 묘사를 보여줍니다.
모듈
Verilog의 모든 시스템은 모듈 내부에 캡슐화되어 있습니다. 모듈은 계층적 디자인을 지원하기 위해 하위 수준 모듈의 인스턴스화를 포함할 수 있습니다. 키워드 module 및 endmodule은 시스템 설명의 시작과 끝을 나타냅니다. 대규모 디자인에서 작업할 때 각 모듈을 동일한 이름의 자체 파일에 배치하는 것이 일반적입니다.
module module_name (port_list);
// port_definitions
// module_items
endmodule
module module_name (port_list and port_definitions);
endmodule
포트 정의
모듈 내의 첫 번째 항목은 입력 및 출력 또는 포트에 대한 정의입니다. 각 포트에는 사용자 정의 이름, 방향 및 유형이 있어야 합니다. 사용자 정의 포트 이름은 대소문자를 구분하며 알파벳 문자로 시작해야 합니다.
포트 방향은 입력, 출력 및 입력의 세 가지 유형 중 하나로 선언됩니다. 포트는 이전에 설명한 모든 데이터 유형을 사용할 수 있지만 와이어, 레지스터 및 정수만 합성할 수 있습니다.
유형과 방향이 같은 포트 이름은 쉼표로 구분하여 같은 줄에 나열할 수 있습니다.
Verilog에서 지원되는 두 가지 다른 포트 정의 스타일이 있습니다. Verilog-2001 릴리스 이전에는 포트 이름이 모듈 이름 뒤의 괄호 안에 나열되었습니다. 그런 다음 모듈 내에서 포트의 방향과 유형이 나열되었습니다.
Verilog-2001 릴리스부터 포트 방향 및 유형은 모듈 이름 뒤의 괄호 안에 포트 이름과 함께 포함될 수 있습니다. 이 접근 방식은 시스템에 입력/출력을 전달하는 ANSCI-C 접근 방식을 더 많이 모방했습니다.
다음 그림은 모듈과 해당 포트를 정의하기 위한 여러 접근 방식을 보여줍니다.
시그널 선언
시스템 내에서 내부 연결에 사용되는 신호는 처음 사용하기 전에 모듈 내에서 선언됩니다. 각 신호는 해당 유형과 사용자 정의 이름을 나열하여 선언해야 합니다. 같은 유형의 신호 이름은 쉼표로 구분된 같은 줄에 선언할 수 있습니다. 위에서 설명한 모든 법적 데이터 유형은 신호에 사용할 수 있습니다. 그러나 net, reg 및 integer 유형만 직접 합성됩니다.
신호 선언 구문은 다음과 같습니다.
<type> name;
wire 유형의 "node1"이라는 신호를 선언합니다.
wire node1;
reg 유형의 "Q2", "Q1" 및 "Q0"이라는 세 가지 신호를 선언합니다.
reg Q2, Q1, Q0;
모든 비트 유형이 wire인 "bus1"이라는 64비트 벡터를 선언합니다.
wire [63:0] bus1;
"i"와 "j"라는 두 개의 정수 선언
integer i, j;
Verilog는 계층적 설계 접근 방식을 지원하므로 하위 시스템 내에서 신호 이름이 충돌 없이 상위 수준의 것과 동일할 수 있습니다.
매개변수(parameter) 선언
매개변수 또는 상수는 아키텍처에서 여러 번 사용될 수량을 나타내는 데 유용합니다. 매개변수 선언 구문은 다음과 같습니다.
parameter <type> constant_name = <value>;
유형은 선택 사항이며 정수, 시간, 실수 또는 실시간만 될 수 있습니다. 유형이 제공되면 매개변수는 같은 시간의 변수와 동일한 속성을 갖습니다. 유형이 제외되면 매개변수는 할당된 값의 유형을 사용합니다.
parameter BUS_WIDTH = 64;
parameter NICKEL = 8’b0000_0101;
일단 선언되면 모듈 전체에서 상수 이름을 사용할 수 있습니다.
다음 예제는 상수를 사용하여 벡터의 크기를 정의하는 방법을 보여줍니다. 상수를 벡터의 실제 너비(즉, 32비트)로 정의했기 때문에 인덱스(즉, [31:0])를 정의할 때 값에서 1을 빼야 합니다.
wire [BUS_WIDTH-1:0] BUS_A;
컴파일러 지시문
컴파일러 지시문은 Verilog 모델을 해석하는 방법에 대한 추가 정보를 시뮬레이션 도구에 제공합니다. 컴파일러 지시문은 모듈 정의 앞에 배치되고 백틱( ` )이 앞에 옵니다.
가장 일반적으로 사용되는 컴파일러 지시문은 다음과 같습니다.
Syntax | Description |
`timescale <unit>, <precision> | Defines the timescale of the delay unit and its smallest precision. |
`include <filename> | Includes additional files in the compilation. |
`define <macroname> <value> | Declares a global constant. |
시간 단위가 1ps의 정밀도로 1ns임을 선언합니다. 정밀도는 시간이 걸릴 수 있는 가장 작은 양입니다.
예를 들어, 다음 지시문을 사용하면 숫자 0.001은 0.001ns 또는 1ps로 해석됩니다.
그러나 숫자 0.0001은 최소 정밀도 값보다 작기 때문에 0으로 해석됩니다.
‘timescale 1ns/1ps
'프로그래밍 언어 > Verilog' 카테고리의 다른 글
[Verilog 학습] 구조 설계 및 계층구조 (0) | 2022.03.29 |
---|---|
[Verilog 학습] Verilog에서 동시 기능 모델링 (0) | 2022.03.28 |
[Verilog 학습] Verilog 구성 (0) | 2022.03.26 |
[Verilog 학습] 디자인 설명 (0) | 2022.03.25 |
[Verilog 학습] Verilog란 (0) | 2022.03.22 |