Input And Output Ports
Parte da seção Fundamentos do Journey de Verilog da Coddy. Lição 31 de 90.
As portas de entrada e saída são as conexões que permitem que um módulo se comunique com o mundo externo. Elas são como os pinos de um chip. As portas são a interface entre um módulo e o restante do projeto.
Todo módulo tem:
- Portas de Input: sinais que entram no módulo
- Portas de Output: sinais que saem do módulo
Portas de entrada
As portas de entrada recebem dados de fora. Elas não podem ser alteradas dentro do módulo: apenas read.
input clk; // Entrada de bit único
input [7:0] data; // Vetor de entrada de 8 bits
input a, b; // Múltiplas entradas em uma linhaRegras para inputs:
- Não podem receber um valor dentro do módulo
- Não podem ser declarados como
reg - Sempre
wire(por padrão)
Portas de saída
As portas de saída enviam dados para o exterior. Elas podem ser acionadas por blocos assign ou always.
output out; // Saída de bit único
output [3:0] result; // Saída de 4 bits
output reg busy; // A saída pode ser reg
output wire ready; // A saída pode ser wireRegras para outputs:
- Pode ser
wire(comassign) oureg(comalways) - Deve ser controlado por algo dentro do módulo
Sintaxe de declaração de portas
A sintaxe de declaração de portas é a maneira específica como você escreve as portas de entrada e saída em um módulo. Ela informa ao Verilog três coisas sobre cada porta:
- Direção: é input, output ou inout?
- Tamanho: quantos bits de largura ele tem?
- Nome: como ele é chamado?
module example (
input [7:0] data_in, // Vetor de entrada
input clk, // Entrada única
input enable, // Entrada única
output reg [7:0] out, // Saída reg
output busy // Saída wire
);Por que a Direção das Portas é Importante
A direção informa ao Verilog:
- Quais sinais o módulo can read (entradas)
- Quais sinais o módulo can write (saídas)
- Quais tipos de conexões são permitidos
Usar a direção errada causa erros de compilação.
Exemplo de código
module port_demo (
input [3:0] a, // Pode apenas ler
input [3:0] b, // Pode apenas ler
output reg [3:0] sum, // Pode escrever (reg)
output [3:0] diff // Pode escrever (wire)
);
always @(*) begin
sum = a + b; // Escrevendo no output reg
end
assign diff = a - b; // Escrevendo no output wire
endmoduleDesafio
Concluir as declarações de portas
O que fazer:
- Add uma entrada de 8 bits chamada
data_in - Add uma entrada de bit único chamada
clk - Add uma saída de 4 bits chamada
result(use reg: será atribuída no bloco always) - Add uma saída de bit único chamada
valid(use wire: será atribuída com assign)
Experimente você mesmo
module port_challenge (
// Tarefa 1: Adicione uma entrada de 8 bits chamada data_in
// Tarefa 2: Adicione uma entrada de um único bit chamada clk
// Tarefa 3: Adicione uma saída de 4 bits chamada result (use reg)
// Tarefa 4: Adicione uma saída de um único bit chamada valid (use wire)
);
reg [3:0] counter;
always @(posedge clk) begin
counter <= counter + 1;
result <= counter;
end
assign valid = (counter > 8);
endmoduleEsta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Fundamentos
1Introdução
O que é VerilogHardware vs. SoftwareSeu primeiro móduloComentáriosNíveis de abstração de projeto4Operators 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 LogicPratique por conta própria: Compilador de Verilog online