# O fluxo Verilog em detalhe O tutorial mostrou o caminho feliz. Este capítulo explica o que cada etapa faz de verdade e o que fazer quando algo foge do roteiro. ## O que "Sintetizar Verilog" executa O botão roda a elaboração do projeto: todos os fontes sintetizáveis são compilados juntos, com o Top Level como raiz, usando o Icarus Verilog em modo de checagem (elabora sem gerar simulação). A biblioteca de módulos do SAPHO entra automaticamente na busca, então um projeto que instancie um processador gerado não precisa listar os módulos internos dele. Passando a checagem, o Yosys constrói a hierarquia de instâncias, que alimenta a visão {guilabel}`Hierarquia` da árvore. O testbench fica de fora dessa etapa de propósito: construções de simulação como `$dumpvars`, atrasos e `$finish` não pertencem ao circuito. :::{note} Validar não é sintetizar para FPGA. A AURORA prova que o design elabora e desenha a estrutura; a síntese física, com mapeamento em células e bitstream, acontece no Quartus ou no Vivado, como descrito em {doc}`../juntos/fpga`. ::: ## A classificação automática das fontes Cada {file}`.v` importado é lido e pontuado: gravação de onda, `$finish` ou `$stop`, módulo sem portas e blocos `initial` pesam mais; `$display`, atrasos `#` e nome terminando em `_tb` pesam menos. Passando do limiar, o arquivo é testbench; na dúvida, é sintetizável. A pontuação se refaz a cada atualização da árvore. Na prática isso significa: escreva testbenches com cara de testbench (um `initial`, um `$finish`) e módulos com cara de módulo, e a árvore se organiza sozinha. Se um arquivo cair na categoria errada, o menu de contexto permite marcá-lo como testbench manualmente. ## Diagnósticos enquanto você digita Dois analisadores acompanham a edição de Verilog e SystemVerilog: - O analisador sintático aponta erros de forma e estilo na hora, e é ele que atende o {guilabel}`Formatar` ({kbd}`Shift+Alt+F`). - O analisador semântico elabora o projeto inteiro em segundo plano e marca o que só aparece na elaboração: identificadores não declarados, incompatibilidade de tipos e de portas, sinais nunca usados. Ele pode ser ligado e desligado com {kbd}`Ctrl+Alt+S`. Os dois escrevem na mesma lista de problemas do editor, com origens identificadas. ## Múltiplos arquivos e módulos O conjunto de fontes da elaboração é a lista de sintetizáveis do projeto, inteira. Você pode dividir o design em quantos arquivos quiser; a resolução de módulos cruza todos. O que importa é um único Top Level marcado, do qual a elaboração parte. Módulos não alcançáveis a partir dele simplesmente não participam. ## Quando a validação falha As mensagens chegam no terminal TVERI com link para arquivo e linha. Os casos mais comuns: `Unknown module type: X` : Um módulo instanciado não existe em nenhum fonte do projeto. Confira o nome e se o arquivo que o define está na lista de sintetizáveis. Portas incompatíveis : A instância não bate com a definição do módulo. O analisador semântico costuma apontar isso antes mesmo de você clicar no botão. Botão desabilitado : Falta o Top Level. Marque-o pelo menu de contexto na visão Arquivos. A lista completa de mensagens por fluxo está em {doc}`../referencia/diagnostico`.