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 são as conexões que permitem que um módulo se comunique com o mundo exterior. 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 entrada: sinais que entram no módulo
- Portas de saída: 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 lidas.
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 entradas:
- Não podem receber um valor dentro do módulo
- Não podem ser declaradas como
reg - Sempre
wire(por padrão)
Portas de saída
As portas de saída enviam dados para o exterior. Elas podem ser controladas 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 saídas:
- Pode ser
wire(comassign) oureg(comalways) - Deve ser acionada por algo dentro do módulo
Sintaxe de declaração de portas
A sintaxe de declaração de portas é a maneira específica de escrever portas de entrada e saída em um módulo. Ela informa ao Verilog três coisas sobre cada porta:
- Direção: é entrada, saída ou entrada e saída?
- 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 pode ler (entradas)
- Quais sinais o módulo pode escrever (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
Conclua as declarações de portas
O que fazer:
- Adicione uma entrada de 8 bits chamada
data_in - Adicione uma entrada de um único bit chamada
clk - Adicione uma saída de 4 bits chamada
result(use reg: será atribuída em um bloco always) - Adicione uma saída de um único bit 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 projeto4Operadores Parte 1
Operadores aritméticosOperador móduloOperadores de comparaçãoRecapitulação - Matemática simplesOperadores bit a bit7Atribuições e Portas
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ões
Declaração IfIf - ElseRevisão - Comparador SimplesDeclaração CaseCasex e CasezRevisão - Projeto de ALU2Tipos de Dados
Tipo WireTipo RegInteiro e RealVetoresArraysParâmetrosRecapitulação - Declarar Sinais5Operadores - Parte 2
Operadores lógicosOperadores de reduçãoOperadores de deslocamentoOperador de concatenaçãoOperador condicionalRevisão - Desafio de operadores3Sistema Numérico
Representação BináriaNúmeros com Tamanho DefinidoNúmeros sem Tamanho DefinidoNúmeros NegativosValores Especiais X e ZRevisão - Formatos Numéricos6Módulos
Estrutura de MódulosPortas de Entrada e SaídaPortas InoutInstanciação de MódulosMapeamento de Portas por NomeMapeamento de Portas por OrdemRecapitulação — Construindo um MóduloPratique por conta própria: Compilador de Verilog online