반응형

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

반응형

+ Recent posts