Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Verilog

Понимание портов Verilog: входы, выходы и коммуникация модулей

Порты — набор сигналов, выступающих входами и выходами модуля, и основной способ взаимодействия с ним. Представьте модуль как чип на печатной плате: очевидно, что общение с ним возможно только через его ножки. Порты — это и ножки, через которые дизайн посылает и принимает сигналы извне.

Типы портов

ПортОписание
InputМодуль может только принимать значения извне через input порты
OutputМодуль может только посылать значения наружу через output порты
InoutМодуль может и посылать, и принимать значения через inout порты

Порты по умолчанию считаются сетями типа wire.

Синтаксис

Порты, объявленные как inout, могут работать и как вход, и как выход.

input  [net_type] [range] list_of_names; // Входной порт
inout  [net_type] [range] list_of_names; // Вход/Выход
output [net_type] [range] list_of_names; // Выходной порт, управляемый wire
output [var_type] [range] list_of_names; // Выходной порт, управляемый переменной

Пример

В коде ниже три input порта, один output и один inout.

module my_design (
    input wire clk,
    input en,
    input rw,
    inout [15:0] data,
    output int
);
// Поведение дизайна на Verilog
endmodule

Недопустимо использовать одно имя для нескольких портов.

input aport;  // Первое объявление — OK
input aport;  // Ошибка — уже объявлен
output aport; // Ошибка — уже объявлен

Знаковые порты (Signed ports)

Атрибут signed можно прикрепить к объявлению порта или net/reg или к обоим. Неявные сети по умолчанию беззнаковые (unsigned).

module ( input a, b, output c); // a, b, c по умолчанию unsigned
endmodule

Если либо объявление net/reg имеет атрибут signed, другой тоже считается знаковым.

module ( input signed a, b, output c);
wire a, b; // a, b знаковые из объявления порта
reg signed c; // c знаковое из reg объявления
endmodule

Вариации портов

Verilog 1995

Оригинальный IEEE 1995 требовал сначала перечислить имена портов в скобках, а направление определять позже в теле модуля.

module test (a, b, c);
input [7:0] a; // входы "a" и "b" — wire
input [7:0] b;
output [7:0] c; // выход "c" по умолчанию wire
wire [7:0] a; wire [7:0] b; wire [7:0] c; // можно переобъявить как wire
endmodule

module test (a, b, c);
input [7:0] a, b;
output [7:0] c;
reg [7:0] c; // порт "c" изменён на reg тип
endmodule

Verilog 2001 и далее

ANSI-C стиль объявления портов введён в 2001: тип можно указывать прямо в списке портов.

module test (
    input [7:0] a, b, // "b" считается 8-битным входом
    output [7:0] c
);
// Содержимое дизайна
endmodule

module test (
    input wire [7:0] a,
    input wire [7:0] b,
    output reg [7:0] c
);
// Содержимое дизайна
endmodule

Если объявление порта включает net или variable type, порт считается полностью объявленным. Повторное объявление того же порта в net/variable type недопустимо.

module test (
    input [7:0] a,      // a, e неявно объявлены как wire
    output reg [7:0] e
);
wire signed [7:0] a; // недопустимо — объявление a уже завершено (зависит от симулятора)
wire [7:0] e;        // недопустимо — объявление e уже завершено
// Остальной код дизайна
endmodule

Если объявление порта не включает net/variable type, порт можно объявить в net/variable declaration снова.

module test (
    input [7:0] a,
    output [7:0] e
);
reg [7:0] e; // OK — net_type не был объявлен раньше
// Остальной код дизайна
endmodule

Verilog

  1. Освоение Verilog: полное руководство по проектированию цифровых схем
  2. Освоение конкатенации в Verilog: практическое руководство
  3. Понимание назначений в Verilog: типы, синтаксис и лучшие практики
  4. Блокирующие и неблокирующие назначения в Verilog: ключевые различия
  5. Мастерство функций в Verilog для эффективного RTL дизайна
  6. Понимание задач (Tasks) в Verilog: отличия от функций, синтаксис и применение
  7. Генератор тактового сигнала в Verilog: проектирование и реализация
  8. Мастерство математических функций Verilog для эффективного аппаратного дизайна
  9. Мастерство $timeformat в Verilog: точность и контроль отображения времени
  10. Понимание и печать timescale в Verilog в любой области видимости