Fundamentos de projeto RTL
Expresse circuitos digitais em SystemVerilog. Estude tipos, larguras, sinal, lógica combinacional e sequencial, módulos, parâmetros e generate, verificando limites e falhas com bancos de teste independentes. Conclua conectando pulsos periódicos a um acumulador e registrando evidências reproduzíveis.
O que você vai aprender
- Especificar largura, sinal, fonte de acionamento, instante de validade e valor de reset de cada sinal.
- Separar atribuições combinacionais completas de atualizações de estado por clock.
- Criar estruturas estáticas com parâmetros e generate e verificar configurações de fronteira.
- Compor módulos com conexões por nome e funções.
- Escrever estímulos sem condições de corrida e referências independentes.
- Distinguir evidências de compilação, simulação, síntese e execução no DDS.
Antes de começar
Os exercícios no navegador usam modelos educacionais; não compilam nem executam HDL. Para executar o código separadamente, siga o guia do Digital Design Studio para seu sistema operacional e entre na conta quando a operação exigir.
Instalação e primeiro uso ↗ · Downloads ↗Programa
- RTL e contratos de módulos
- RTL: descrever circuitos concorrentesConceito
Separe a ordem do software da estrutura paralela e especifique estado atual, próximo estado e observação.
- Sinais e portas: contratos de largura, direção e tempoConceito
Leia interfaces e separe os critérios de verificação de saídas combinacionais e de estado.
- Módulos, portas e instâncias: conexões como contratosConceito
Componha módulos com conexões nomeadas, verificando acionamento único e limites da hierarquia.
- Verificação: saída combinacional e armazenadaVerificação
Diferencie mudança de entrada e observação do registrador.
- Tipos, larguras, sinal e expressões
- logic, wire, X/Z e larguras explícitasConceito
Separe tipo e armazenamento e verifique literais, comparações, extensões e valores desconhecidos.
- Índices de vetor, ordem de bits e sinalConceito
Distinga índices, ordem de transmissão serial e interpretação aritmética ao ler caminhos de dados.
- Larguras de fatias, concatenação e repetição de bitsConceito
Calcule largura total e preservação do valor ao construir caminhos de dados.
- Complemento de dois, extensão de sinal e overflowConceito
Distinga a interpretação signed e as condições de overflow com equações e contraexemplos.
- Verificação: intervalo e extensão explícitaVerificação
Confira entradas e saída do somador juntas.
- RTL combinacional completo e verificação
- RTL combinacional e atribuições completasConceito
Expresse a mesma função com o operador condicional e always_comb e encontre omissões que inferem latches.
- Codificadores e prioridade: escolha uma entre várias solicitaçõesConceito
Distinga a hipótese one-hot de um codificador simples das saídas valid e de seleção de um codificador de prioridade.
- Verificação do MUX: teste exaustivo e propriedadesConceito
Confira separadamente a cobertura combinacional e o armazenamento e reduza os contraexemplos.
- Verificação de projeto: equivalência de seleção e instante de observaçãoVerificação
Distinga verificações resolvidas por tabelas-verdade daquelas que exigem observar o clock.
- Estado, atribuições e prioridade de reset
- Flip-flops, enable e prioridade de controleConceito
Defina manutenção, carga e reset como próximo estado e evite criar gating de clock involuntário.
- Atribuições não bloqueantes e atualização simultâneaConceito
Separe valores anteriores e seguintes para interpretar corretamente contadores e pipelines RTL.
- Contadores modulares, saturação e pulsos de términoConceito
Projete a política do máximo e o ciclo exato do sinal de fim de contagem.
- Prática: verifique reset, retorno modular e invariantes do contadorPrática
Compare cada borda com uma referência e separe os efeitos de inicialização, reset e largura.
- Verificação de projeto: limites de largura, prioridade e retornoVerificação
Resolva fronteiras e controles simultâneos a partir de uma especificação de transição.
- Parâmetros e geração de estruturas estáticas
- parameter, localparam, $clog2 e configurações limiteConceito
Separe entradas de execução da configuração e projete largura e término para N=1 e não potências de dois.
- generate: construir circuitos estáticos com laçosConceito
Use genvar e generate-if para hierarquias nomeadas e confira a distribuição dos lanes.
- function automatic e expressões reutilizáveisConceito
Escreva funções sem tempo simulado e confira largura, sinal e independência da referência.
- Verificação: N=1 e larguraVerificação
Separe largura mínima e estados válidos.
- Bancos de teste e verificação independente
- Instantes de amostragem e causalidade nas formas de ondaConceito
Separe estabilização combinacional, captura de clock e ordem de eventos ao ler formas de onda.
- Prática: banco de teste que relata suas falhasPrática
Separe DUT, estímulos, referência e checagens para testar reset, enable e retorno sem corridas.
- Plano de verificação, cobertura e referência independenteConceito
Distinga testes aprovados do cumprimento dos requisitos e planeje fronteiras, cruzamentos de condições e contraexemplos mínimos.
- Depuração do contador e contraexemplos mínimosConceito
Projete testes curtos que distingam erros de reset, enable e retorno na fronteira.
- Verificação: referências e corridasVerificação
Escolha referência independente e observação após atualização.
- Composição de módulos e prática integrada
- Máquinas de estados: separe estado, transição e saídaConceito
Construa uma FSM a partir da tabela e compare Moore, Mealy, estados ilegais e política de solicitações.
- Projeto integrado: detector do padrão 101 com sobreposiçãoConceito
Aplique minimização de estados, entrada válida, saída registrada e referência independente em um projeto.
- Ready/valid e um buffer elástico de uma posiçãoConceito
Projete a condição de transferência e a entrada e saída simultâneas para que um caminho de dados que pode parar não perca nem duplique elementos.
- Pipeline de multiplicação e soma e alinhamento de dadosConceito
Divida o cálculo por registradores e mantenha alinhados os dados, valid e os operandos auxiliares de cada transação.
- Prática integrada: pulsos periódicos e acumulador habilitadoPrática
Especifique transferências com valores antigos e verifique pausas, pulsos consecutivos e reset simultâneo.
- Diagnósticos e alcance dos resultados
- Setup, hold e orçamento temporalConceito
Separe atrasos máximos e mínimos e calcule a condição de hold, independente da frequência.
- Cruzamentos de domínios de clock e metaestabilidadeConceito
Compreenda o alcance do sincronizador de dois estágios e distinga níveis de um bit, pulsos curtos e transferências multibit.
- Compilação, lint e síntese: alcance dos diagnósticosConceito
Fixe fontes, top e linguagem e diferencie sintaxe, largura, latches e verificação funcional.
- Registros de execução e continuação no DDSConceito
Entregue fontes, entradas, expectativas, falhas e versões para reproduzir a prática.
- Verificação final: funcionamento e evidênciasVerificação
Separe resultado local de aceitação da prática DDS gratuita.