Primitivas de Portas Integradas
Parte da seção Fundamentos do Journey de Verilog da Coddy — lição 39 de 90.
O Verilog possui primitivas de porta integradas que permitem descrever circuitos lógicos usando símbolos de porta reais. Isso é chamado de modelagem estrutural — você constrói circuitos conectando portas, assim como ao desenhar um esquemático.
Primitivas de porta são palavras-chave predefinidas que modelam portas lógicas básicas. Em vez de escrever uma expressão como assign out = a & b, você instancia uma porta:
and(out, a, b); // Porta AND com saída out, entradas a e bSintaxe Geral
gate_type (output, input1, input2, ...);- O primeiro argumento é sempre a saída
- Os argumentos seguintes são entradas (1 ou mais, dependendo da porta)
Primitivas de Portas Disponíveis
| Tipo de Porta | Palavra-chave | Número de Entradas |
|---|---|---|
| AND | and | 2 ou mais |
| OR | or | 2 ou mais |
| NOT | not | 1 |
| NAND | nand | 2 ou mais |
| NOR | nor | 2 ou mais |
| XOR | xor | 2 ou mais |
| XNOR | xnor | 2 ou mais |
Como as Primitivas de Porta Funcionam
Quando você escreve and(out, a, b), o Verilog cria uma porta AND que aciona continuamente out com o resultado de a & b. Sempre que a ou b mudar, out atualiza imediatamente — exatamente como uma porta real.
Primitivas de Porta vs Atribuição Contínua
Ambos os métodos produzem o mesmo hardware:
// Primitiva de porta
and(out, a, b);
// Atribuição contínua (mesmo resultado)
assign out = a & b;Primitivas de porta são úteis quando você deseja descrever um circuito como uma coleção de portas (estilo estrutural). A atribuição contínua é melhor para o estilo comportamental (expressões).
Desafio
O que fazer:
- Adicione a primitiva de porta correta para fazer este circuito funcionar. O módulo deve produzir a saída AND das entradas
aeb. A porta de saída já está nomeada comoc.
Folha de consulta
Primitivas de porta (Gate primitives) em Verilog permitem a modelagem estrutural através da instanciação direta de portas lógicas.
Sintaxe: O primeiro argumento é sempre a saída, seguido pelas entradas:
gate_type(output, input1, input2, ...);Primitivas disponíveis:
| Porta | Palavra-chave | Entradas |
|---|---|---|
| AND | and | 2+ |
| OR | or | 2+ |
| NOT | not | 1 |
| NAND | nand | 2+ |
| NOR | nor | 2+ |
| XOR | xor | 2+ |
| XNOR | xnor | 2+ |
Primitivas de porta e assign produzem hardware equivalente:
and(out, a, b); // structural (gate primitive)
assign out = a & b; // behavioral (continuous assignment)Experimente você mesmo
module gate_challenge (
input a,
input b,
output c
);
// TODO: Adicione a primitiva de porta correta
// A saída c deve ser a AND b
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