Portas de Entrada e Saída
Parte da seção Fundamentos do Journey de Verilog da Coddy — lição 31 de 90.
As portas de entrada e saída (input e output) são as conexões que permitem que um module se comunique com o mundo externo. Elas são como os pinos de um chip. As portas são a interface entre um module e o restante do projeto.
Todo module tem:
- Portas de Input — sinais que entram no module
- Portas de Output — sinais que saem do module
Portas Input
Portas Input recebem data de fora. Elas não podem ser alteradas dentro do module—only read.
input clk; // Entrada de um único bit
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 a atribuição de um valor dentro do module
- Não podem ser declarados como
reg - Sempre
wire(por padrão)
Output Ports
Output ports enviam dados para o exterior. Eles podem ser acionados 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:
- Podem ser
wire(comassign) oureg(comalways) - Devem ser acionados por algo dentro do module
Sintaxe de Declaração de Portas
A sintaxe de declaração de portas é a forma específica como você escreve portas de entrada e saída em um módulo. Ela diz ao Verilog três coisas sobre cada porta:
- Direção — é `input`, `output`, ou `inout`?
- Tamanho — quantos bits de largura ele tem?
- Nome — como ele é `called`?
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 da Porta Importa
A direção diz ao Verilog:
- Quais sinais o módulo pode ler (inputs)
- Quais sinais o módulo pode escrever (outputs)
- 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 para output reg
end
assign diff = a - b; // Escrevendo para output wire
endmoduleDesafio
Complete as Declarações de Portas
O que fazer:
- Adicione uma entrada de 8 bits chamada
data_in - Adicione uma entrada de bit único chamada
clk - Adicione uma saída de 4 bits chamada
result(usereg— será atribuída em um blocoalways) - Adicione uma saída de bit único chamada
valid(usewire— será atribuída comassign)
Experimente você mesmo
module port_challenge (
// Task 1: Adicione uma entrada de 8 bits chamada data_in
// Task 2: Adicione uma entrada de um bit chamada clk
// Task 3: Adicione uma saída de 4 bits chamada result (use reg)
// Task 4: Adicione uma saída de um 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 SoftwareNíveis de Abstração de ProjetoSeu Primeiro MóduloComentários4Operadores Parte 1
Operadores AritméticosOperador de MóduloOperadores de ComparaçãoRecapitulação - Matemática SimplesOperadores Bitwise7Atribuição e Portas Lógicas
Atribuição ContínuaAtribuição com OperadoresPrimitivas de Portas IntegradasPortas AND, OR e NOTPortas XOR e XNORRecapitulação - Circuito de Portas Lógicas10Tomada de Decisão
Instrução IfIf - ElseRecapitulação - Comparador SimplesInstrução CaseCasex e CasezRecapitulação - Projeto de ALU2Tipos de Dados
Tipo WireTipo RegInteger e RealVetoresArraysParâmetrosRecapitulação - Declarar Sinais5Operadores Parte 2
Operadores LógicosOperadores de ReduçãoOperadores de DeslocamentoOperador de ConcatenaçãoOperador CondicionalRecapitulação - Desafio de Operadores3Sistemas de Numeração
Representação BináriaNúmeros com Tamanho DefinidoNúmeros sem Tamanho DefinidoNúmeros NegativosValores Especiais X e ZRecapitulação - Formatos de Números6Módulos
Estrutura de MóduloPortas de Entrada e SaídaPortas InoutInstanciação de MóduloMapeamento de Portas por NomeMapeamento de Portas por OrdemRecapitulação - Construa um Módulo