Instanciação de Módulos
Parte da seção Fundamentos do Journey de Verilog da Coddy. Lição 33 de 90.
A instanciação de módulos é o processo de criar uma cópia de um módulo dentro de outro módulo. É assim que você constrói projetos maiores conectando componentes menores.
Depois de definir 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 uma planta 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
Etapa 1: Defina um módulo
module and_gate (
input a,
input b,
output c
);
assign c = a & b;
endmoduleEtapa 2: instancie-o em outro módulo
module top (
input x,
input y,
output z
);
and_gate gate1 (x, y, z);
endmoduleVeja 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 se conecta à primeira porta a. O segundo sinal y se conecta à segunda porta b. O terceiro sinal z se conecta à terceira porta c.
Passe um sinal para cada porta. O Verilog também aceita menos sinais, até mesmo parênteses vazios, mas cada porta sem um sinal fica desconectada e não é conectada a nada no seu projeto. Passar mais sinais do que o módulo tem portas é um erro.
Várias instâncias
Você pode criar várias 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 projeto
Regras para instanciação
| Regra | Por quê |
|---|---|
| O nome da instância deve ser exclusivo | Para distinguir entre cópias |
| O nome do módulo deve existir | Deve estar definido em outro lugar |
| Passe um sinal por porta | Uma porta sem sinal fica desconectada, e mais sinais do que portas é um erro |
| A ordem das conexões 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
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. SoftwareSeu primeiro móduloComentáriosNíveis de abstração de projeto4Operadores Parte 1
Operadores aritméticosOperador móduloOperadores de comparaçãoRecapitulação - Matemática simplesOperadores bit a bit7Atribuições e Portas
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ões
Declaração IfIf - ElseRevisão - Comparador SimplesDeclaração CaseCasex e CasezRevisão - Projeto de ALU2Tipos de Dados
Tipo WireTipo RegInteiro e RealVetoresArraysParâmetrosRecapitulação - Declarar Sinais5Operadores - Parte 2
Operadores lógicosOperadores de reduçãoOperadores de deslocamentoOperador de concatenaçãoOperador condicionalRevisão - Desafio de operadores3Sistema Numérico
Representação BináriaNúmeros com Tamanho DefinidoNúmeros sem Tamanho DefinidoNúmeros NegativosValores Especiais X e ZRevisão - Formatos Numéricos6Módulos
Estrutura de MódulosPortas de Entrada e SaídaPortas InoutInstanciação de MódulosMapeamento de Portas por NomeMapeamento de Portas por OrdemRecapitulação — Construindo um MóduloPratique por conta própria: Compilador de Verilog online