Menu
Coddy logo textTech

Instanciação de Módulo

Parte da seção Fundamentos do Journey de Verilog da Coddy — lição 33 de 90.

A instanciação de módulo é o processo de criar uma cópia de um módulo dentro de outro módulo. É assim que você constrói designs maiores conectando componentes menores entre si.

Uma vez que você tenha definido um módulo, você pode usá-lo dentro de outro módulo. Isso é chamado de instanciação. Cada instanciação cria uma instância separada desse módulo. Pense nisso como usar um projeto para construir várias cópias do mesmo componente.

Sintaxe Básica

module_name instance_name (connections);
ParteSignificado
module_nameNome do módulo a ser instanciado
instance_nameNome exclusivo para esta cópia
connectionsSinais conectados às portas do módulo

Exemplo Simples

Passo 1: Definir um módulo

module and_gate (
  input a,
  input b,
  output c
);
  assign c = a & b;
endmodule

Passo 2: Instancie-o em outro módulo

module top (
  input x,
  input y,
  output z
);
  and_gate gate1 (x, y, z);
endmodule

Aqui está o que acontece neste código:

  • and_gate — o nome do módulo que queremos usar (deve existir em algum lugar)
  • gate1 — um nome exclusivo que damos a esta instância específica
  • (x, y, z) — os sinais que conectamos às portas do módulo (na mesma ordem em que aparecem na definição do módulo)

O primeiro sinal x conecta-se à primeira porta a. O segundo sinal y conecta-se à segunda porta b. O terceiro sinal z conecta-se à terceira porta c.

Você deve passar sinais para o módulo. Os parênteses não podem estar vazios. O número de sinais deve corresponder ao número de portas.

Múltiplas Instâncias

Você pode criar múltiplas cópias do mesmo módulo:

module top;
  wire out1, out2;
  wire sig1, sig2, sig3, sig4;
  
  and_gate gate1 (sig1, sig2, out1);
  and_gate gate2 (sig3, sig4, out2);
endmodule

Cada instância tem seu próprio nome (gate1, gate2) e suas próprias conexões. Elas funcionam de forma independente.

O que acontece durante a instanciação

  • Uma cópia do hardware é criada
  • Cada instância tem seu próprio conjunto de sinais
  • As instâncias são executadas em paralelo (simultaneamente)
  • Os sinais que você passa determinam como as instâncias se conectam ao restante do seu design

Regras para Instanciação

RegraPor que
O nome da instância deve ser únicoPara distinguir entre as cópias
O nome do módulo deve existirDeve ser definido em outro lugar
O número de conexões deve corresponder ao número de portasCaso contrário, o Verilog não saberá o que se conecta a onde
A ordem de conexão deve corresponder à ordem das portasO primeiro sinal se conecta à primeira porta, etc.
challenge icon

Desafio

Complete o código instanciando o módulo or_gate.

O que fazer:

  1. Instancie or_gate com o nome de instância or1
  2. Passe os sinais na ordem correta: input_a, input_b, output_y

Folha de consulta

A instanciação de módulo cria uma cópia de um módulo dentro de outro módulo:

module_name instance_name (connections);

Exemplo:

module and_gate (input a, input b, output c);
  assign c = a & b;
endmodule

module top (input x, input y, output z);
  and_gate gate1 (x, y, z); // x→a, y→b, z→c
endmodule

Regras:

  • O nome da instância deve ser único
  • O número de conexões deve corresponder ao número de portas
  • A ordem das conexões deve corresponder à ordem de definição das portas
  • Múltiplas instâncias rodam em paralelo, cada uma com seus próprios sinais

Experimente você mesmo

module or_gate (
  input in1,
  input in2,
  output result
);
  assign result = in1 | in2;
endmodule

module top (
  input input_a,
  input input_b,
  output output_y
);
  
  // TODO: Instancie or_gate com o nome or1
  // Passe os sinais na ordem: input_a, input_b, output_y
  // 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