Input And Output Ports
Часть раздела Основы путешествия по Verilog на Coddy. Урок 31 из 90.
Входные и выходные порты — это соединения, которые позволяют модулю взаимодействовать с внешним миром. Они похожи на контакты микросхемы. Порты — это интерфейс между модулем и остальной частью проекта.
Каждый модуль имеет:
- Input ports: сигналы, которые поступают в модуль
- Output ports: сигналы, которые выходят из модуля
Input порты
Input порты получают data извне. Их нельзя изменять внутри module: можно только read.
input clk; // Однобитный вход
input [7:0] data; // 8-битный входной вектор
input a, b; // Несколько входов на одной строкеПравила для inputs:
- Нельзя присвоить значение внутри module
- Нельзя объявить как
reg - Всегда
wire(по умолчанию)
Выходные порты
Выходные порты отправляют данные наружу. Ими могут управлять блоки assign или always.
output out; // Однобитный выход
output [3:0] result; // 4-битный выход
output reg busy; // Выход может быть reg
output wire ready; // Выход может быть wireПравила для выходов:
- Может быть
wire(с помощьюassign) илиreg(с помощьюalways) - Должен управляться чем-либо внутри модуля
Синтаксис объявления портов
Синтаксис объявления портов — это определённый способ записи входных и выходных портов в модуле. Он сообщает Verilog три вещи о каждом порте:
- Направление: это input, output или inout?
- Размер: сколько битов в его разрядности?
- Имя: как оно называется?
module example (
input [7:0] data_in, // Входной вектор
input clk, // Одиночный вход
input enable, // Одиночный вход
output reg [7:0] out, // Выходной reg
output busy // Выходной wire
);Почему направление порта имеет значение
Направление сообщает Verilog:
- Какие сигналы модуль can read (inputs)
- Какие сигналы модуль can write (outputs)
- Какие типы соединений разрешены
Использование неправильного направления вызывает ошибки компиляции.
Пример кода
module port_demo (
input [3:0] a, // Можно только читать
input [3:0] b, // Можно только читать
output reg [3:0] sum, // Можно писать (reg)
output [3:0] diff // Можно писать (wire)
);
always @(*) begin
sum = a + b; // Запись в выходной reg
end
assign diff = a - b; // Запись в выходной wire
endmoduleЗадание
Завершите объявления портов
Что нужно сделать:
- Добавьте 8-битный вход с именем
data_in - Добавьте однобитный вход с именем
clk - Добавьте 4-битный выход с именем
result(используйте reg: ему будет присвоено значение в блоке always) - Добавьте однобитный выход с именем
valid(используйте wire: ему будет присвоено значение с помощью assign)
Попробуйте сами
module port_challenge (
// Задача 1: Добавьте 8-битный вход с именем data_in
// Задача 2: Добавьте однобитный вход с именем clk
// Задача 3: Добавьте 4-битный выход с именем result (используйте reg)
// Задача 4: Добавьте однобитный выход с именем valid (используйте wire)
);
reg [3:0] counter;
always @(posedge clk) begin
counter <= counter + 1;
result <= counter;
end
assign valid = (counter > 8);
endmoduleВ этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
1Введение
Что такое VerilogАппаратное обеспечение и программное обеспечениеВаш первый модульКомментарииУровни абстракции проектирования4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine LogicПотренируйтесь самостоятельно: Онлайн-компилятор Verilog