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);| Parte | Significado |
|---|---|
module_name | Nome do módulo a ser instanciado |
instance_name | Nome exclusivo para esta cópia |
connections | Sinais 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;
endmodulePasso 2: Instancie-o em outro módulo
module top (
input x,
input y,
output z
);
and_gate gate1 (x, y, z);
endmoduleAqui 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);
endmoduleCada 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
| Regra | Por que |
|---|---|
| O nome da instância deve ser único | Para distinguir entre as cópias |
| O nome do módulo deve existir | Deve ser definido em outro lugar |
| O número de conexões deve corresponder ao número de portas | Caso contrário, o Verilog não saberá o que se conecta a onde |
| A ordem de conexão deve corresponder à ordem das portas | O primeiro sinal se conecta à primeira porta, etc. |
Desafio
Complete o código instanciando o módulo or_gate.
O que fazer:
- Instancie
or_gatecom o nome de instânciaor1 - 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
endmoduleRegras:
- 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)
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