Menu
Coddy logo textTech

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;
endmodule

Instanciação com mapeamento de portas por ordem:

or_gate or1 (input_a, input_b, output_y);

Isso conecta:

  • Primeiro sinal input_a → primeira porta in1
  • Segundo sinal input_b → segunda porta in2
  • Terceiro sinal output_y → terceira porta result

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

RecursoPor NomePor Ordem
Sintaxe.port(signal)signal1, signal2
A ordem importa?NãoSim
Autodocumentado?SimNão
Risco de errosBaixoAlto
Recomendado paraA maioria dos projetosApenas 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.

challenge icon

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):

  1. input en (enable)
  2. input [7:0] d (entrada de dados)
  3. output [7:0] q (saída de dados)

Sinais para conectar:

  • enable_signal → conectar a en
  • data_input → conectar a d
  • data_output → conectar a q

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.

RecursoPor NomePor Ordem
Sintaxe.port(signal)signal1, signal2
A ordem importa?NãoSim
Risco de errosBaixoAlto
Recomendado paraA maioria dos projetosApenas 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)

endmodule
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Fundamentos