Menu
Coddy logo textTech

Port Mapping By Order

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 order 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 signal 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 é 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
Syntax.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 signals na ordem correct 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)

Signals a conectar:

  • enable_signal → conectar a en
  • data_input → conectar a d
  • data_output → conectar 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