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, em que rotula explicitamente cada conexão usando .port(signal). Agora abordaremos 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. Basta listar os sinais entre parênteses, e o Verilog faz a correspondência um a um.

Sintaxe:

module_name instance_name (signal1, signal2, signal3);

O primeiro sinal se conecta à primeira porta, o segundo à segunda, 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 é fundamental:

// 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
É autoexplicativo?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 provavelmente não mudará
  • Você está escrevendo testbenches rápidos

Para a maioria dos projetos, o mapeamento de portas por nome é preferível porque é mais claro e menos propenso a erros.

challenge icon

Desafio

Conclua 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 (habilitação)
  2. input [7:0] d (entrada de dados)
  3. output [7:0] q (saída de dados)

Sinais a conectar:

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

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: Instanciar register 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

Pratique por conta própria: Compilador de Verilog online