Estruturas Sintetizáveis em Verilog
• module
• port
• parameter
• Portas
• Tipos de dados de rede
• wire, tri, tri0, tri1
• wor, wand, trior, triand
• supply0, supply1
• Tipos de
(registros)
dados
variáveis
• reg, integer
• assign (contínuo)
• always & initial blocks
• and, nand, nor, or, xor,
xnor
• buf,
not,
bufif0,
bufif1, notif0, notif1
• Primitivas
definidas
pelo
usuário (UDP)
• Atribuições
Blocking
e
Non-Blocking
• Blocos Sequenciais
• Tasks & funções
• Seleção de bits & partes
295
Estruturas Sintetizáveis em Verilog (continuação)
▪ Estruturas Comportamentais
▪ If-else
▪ Case
▪ Loop (com restrições)
▪ disable
• As ferramentas de síntese
podem
impor
certas
restrições
sobre
as
estruturas suportadas.
▪ Instanciação de módulos
• Consulte a ajuda online no
▪ Tasks de Sistema readmemb e
software Quartus® (ou na
readmemh
ferramenta de síntese alvo)
▪ Diretivas do compilador:
para uma lista completa.
▪ `define, `undef, `ifdef,
• O
software
Quartus®
`else, `endif
▪ `include
suporta muitas estruturas
▪ `unconnected_drive
que não são compatíveis
[pull0|pull1],
com outras ferramentas de
`nounconnected_drive
síntese.
▪ `resetall
296
Estruturas Não-Sintetizáveis em Verilog
• Estas são algumas das estruturas não suportadas pela síntese de
software Quartus®:
▪ Tipos de dados de rede
▪ trireg
▪ force e release (para redes e
registradores)
▪ Tipos de dados variáveis
▪ Controle de delays
▪ time, real, realtime
▪ Eventos (intra-procedural)
▪ Portas lógicas
▪ Evento nomeado;
▪ rtran,
tran,
tranif0, ▪ Estruturas de paralelismo (fork
tranif1,
e join)
▪ rtranif0, rtranif1
▪ Blocos de especificação
▪ Chaves
▪ cmos, nmos, rcmos, rnmos, ▪ Diretivas de tempo
▪ Maioria das tarefas de sistema
pmos, rpmos
(ex.: $display)
▪ pullup e pulldown
▪ Força de condução
▪ assign (contínuo procedural) e
deassign
297
Operadores
•
As ferramentas de síntese substituem operadores por
blocos de lógica predefinidos (pré-otimizados).
•
O projetista deve estar ciente do uso de operadores e
controlar quando e quantos são usados.
•
Exemplo: divisores
• Divisores são grandes blocos de lógica.
• Cada “/” (divisão) e “%” (módulo) insere um bloco
divisor e deixa para a síntese a tarefa de otimizá-lo.
• Uma melhor otimização de recursos geralmente
envolve o uso criativo de multiplicadores ou
operações de deslocamento (shifts) para realizar
divisões.
298