Mapeamento de Portas por Ordem
Parte da seção Fundamentos do Journey de Verilog da Coddy — lição 35 de 90.
Na lição anterior, você aprendeu sobre o mapeamento de portas por nome, onde você rotula explicitamente cada conexão usando .port(signal). Agora cobriremos o método alternativo: mapeamento de portas por ordem.
Ele conecta sinais às portas de um módulo com base na ordem em que aparecem na definição do módulo. Você simplesmente lista os sinais entre parênteses, e o Verilog os associa um a um.
Sintaxe:
module_name instance_name (signal1, signal2, signal3);O primeiro sinal se conecta à primeira porta, o segundo à segunda porta, e assim por diante.
Exemplo
Definição do módulo:
module or_gate (
input in1, // Primeira porta
input in2, // Segunda porta
output result // Terceira porta
);
assign result = in1 | in2;
endmoduleInstanciação com mapeamento de portas por ordem:
or_gate or1 (input_a, input_b, output_y);Isso conecta:
- Primeiro sinal
input_a→ primeira portain1 - Segundo sinal
input_b→ segunda portain2 - Terceiro sinal
output_y→ terceira portaresult
A Ordem Importa
Com o mapeamento de portas por ordem, a sequência é crítica:
// Ordem correta
or_gate or1 (input_a, input_b, output_y);
// Ordem errada - sinais conectados às portas erradas!
or_gate or1 (input_b, input_a, output_y);
or_gate or1 (output_y, input_a, input_b);Se você misturar a ordem, as conexões irão para as portas erradas. Isso pode ser difícil de depurar porque o código parece correto à primeira vista.
Mapeamento de Portas por Nome vs Por Ordem
| Recurso | Por Nome | Por Ordem |
|---|---|---|
| Sintaxe | .port(signal) | signal1, signal2 |
| A ordem importa? | Não | Sim |
| Autodocumentado? | Sim | Não |
| Risco de erros | Baixo | Alto |
| Recomendado para | A maioria dos projetos | Apenas casos simples |
Quando usar o mapeamento de portas por ordem
O mapeamento de portas por ordem é aceitável quando:
- O módulo tem pouquíssimas portas (2-3)
- A ordem das portas é óbvia e improvável de mudar
- Você está escrevendo testbenches rápidos
Para a maioria dos projetos, o mapeamento de portas por nome é preferido porque é mais claro e menos propenso a erros.
Desafio
Complete a instanciação listando os sinais na ordem correta usando o mapeamento de portas por ordem.
O que fazer:
Portas do módulo (nesta ordem):
input en(enable)input [7:0] d(entrada de dados)output [7:0] q(saída de dados)
Sinais para conectar:
enable_signal→ conectar aendata_input→ conectar addata_output→ conectar aq
Folha de consulta
Mapeamento de portas por ordem conecta sinais com base em sua posição correspondente à ordem de definição de portas do módulo:
module_name instance_name (signal1, signal2, signal3);Exemplo com um módulo or_gate (portas: in1, in2, result):
or_gate or1 (input_a, input_b, output_y);A ordem é crítica — trocar os sinais causa conexões erradas que são difíceis de depurar.
| Recurso | Por Nome | Por Ordem |
|---|---|---|
| Sintaxe | .port(signal) | signal1, signal2 |
| A ordem importa? | Não | Sim |
| Risco de erros | Baixo | Alto |
| Recomendado para | A maioria dos projetos | Apenas portas simples/poucas |
Experimente você mesmo
module register (
input en,
input [7:0] d,
output [7:0] q
);
assign q = en ? d : q;
endmodule
module top (
input enable_signal,
input [7:0] data_input,
output [7:0] data_output
);
// TODO: Instancie o registrador com o nome reg1 usando mapeamento por ORDEM
// Liste os sinais na ordem correta: enable_signal, data_input, data_output
// Não use a sintaxe .port(signal)
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