Fondamenti di progettazione RTL
Descrivi circuiti digitali in SystemVerilog. Studia tipi, larghezze, segno, logica combinatoria e sequenziale, moduli, parametri e generate. Verifica limiti e difetti con testbench indipendenti, poi collega impulsi periodici a un accumulatore e conserva risultati riproducibili.
Che cosa imparerai
- Specificare larghezza, segno, driver, istante di validità e valore di reset di ogni segnale.
- Separare assegnazioni combinatorie complete dagli aggiornamenti di stato su clock.
- Costruire strutture statiche con parametri e generate e verificare configurazioni limite.
- Comporre moduli con collegamenti nominati e funzioni.
- Scrivere stimoli senza race condition e modelli di riferimento indipendenti.
- Distinguere prove di compilazione, simulazione, sintesi ed esecuzione DDS.
Prima di iniziare
Gli esercizi nel browser usano modelli didattici e non compilano né eseguono HDL. Per eseguire il codice separatamente, segui la guida Digital Design Studio del tuo sistema operativo e accedi quando l’operazione lo richiede.
Installazione e primo avvio ↗ · Download ↗Programma
- RTL e contratti dei moduli
- RTL: descrivere circuiti concorrentiConcetto
Distingui la sequenza del software dalla struttura hardware parallela e specifica stato, stato successivo e osservazione.
- Segnali e porte: contratto di larghezza, direzione e tempoConcetto
Leggere le interfacce distinguendo i criteri di verifica delle uscite combinatorie e di stato.
- Moduli, porte e istanze: collegamenti come contrattiConcetto
Componi moduli combinatori con porte nominate e verifica driver unico e gerarchia.
- Verifica: uscita combinatoria e memorizzataVerifica
Distingui cambio ingresso e osservazione del registro.
- Tipi, larghezze, segno ed espressioni
- logic, wire, X/Z e larghezze espliciteConcetto
Separa tipo, driver e memoria e verifica letterali, confronti, estensioni e valori ignoti.
- Indici dei vettori, ordine dei bit e segnoConcetto
Leggere il datapath separando numerazione, ordine seriale e interpretazione aritmetica.
- Larghezze di slice, concatenazione e ripetizioneConcetto
Costruire datapath calcolando larghezza complessiva e conservazione del valore.
- Complemento a due, estensione del segno e overflowConcetto
Distinguere interpretazione signed e overflow dell’addizione con formule e controesempi.
- Verifica: intervallo ed estensioneVerifica
Controlla insieme larghezze d'ingresso e uscita.
- RTL combinatorio completo e verifica
- RTL combinatorio e assegnazioni completeConcetto
Esprimere la stessa funzione con operatore condizionale e always_comb e trovare omissioni che generano latch.
- Encoder e priorità: scegliere fra più richiesteConcetto
Distinguere l’ipotesi one-hot dai risultati di un encoder prioritario: valid e selezione.
- Verifica del MUX: esaustività e proprietàConcetto
Verificare separatamente copertura combinatoria e memoria e minimizzare i controesempi.
- Verifica del progetto: equivalenza della selezione e osservazioneVerifica
Distinguere verifiche basate sulla sola tabella da quelle che richiedono osservazione del clock.
- Stato, assegnazioni e priorità del reset
- Flip-flop, enable e priorità di controlloConcetto
Definire mantenimento, caricamento e reset come stato successivo ed evitare clock gating involontario.
- Assegnazioni non bloccanti e aggiornamento simultaneoConcetto
Separare valori precedenti e successivi per leggere correttamente pipeline e contatori.
- Contatori modulari, saturanti e impulso terminaleConcetto
Progettare la gestione del massimo e il ciclo esatto del terminal count.
- Laboratorio: reset, ritorno e invarianti del contatoreEsercitazione
Confrontare ogni fronte con un riferimento e separare effetti di inizializzazione, reset e larghezza.
- Verifica del progetto: larghezza, priorità e ritornoVerifica
Valutare confini e controlli simultanei dalla specifica delle transizioni.
- Parametri e generazione di strutture statiche
- parameter, localparam, $clog2 e configurazioni limiteConcetto
Distingui ingressi di esecuzione e configurazioni e progetta larghezza e termine per N=1 e non potenze di due.
- generate: costruire circuiti statici con cicliConcetto
Usa genvar e generate-if per gerarchie nominate e controlla l'ordine delle lane.
- function automatic ed espressioni riutilizzabiliConcetto
Scrivi funzioni senza tempo simulato e verifica larghezza, segno e indipendenza del modello di riferimento.
- Verifica: N=1 e larghezzaVerifica
Separa larghezza minima e stati validi.
- Testbench e verifica indipendente
- Campionamento e causalità nelle forme d’ondaConcetto
Leggere le forme d’onda separando assestamento combinatorio, acquisizione e ordine degli eventi.
- Laboratorio: un testbench che segnala i propri erroriEsercitazione
Separa DUT, stimoli, modello di riferimento e controlli per reset, enable e ritorno senza race condition.
- Piano di verifica, coverage e riferimenti indipendentiConcetto
Distinguere test superati e specifica soddisfatta collegando confini, incroci e controesempi.
- Debug del contatore e controesempi minimiConcetto
Progettare test brevi che distinguano errori di reset, enable e ritorno.
- Verifica: modelli di riferimento e race conditionVerifica
Scegli valori attesi indipendenti e osserva dopo l’aggiornamento.
- Composizione di moduli e laboratorio integrato
- Macchine a stati: separare stato, transizioni e usciteConcetto
Costruire FSM da tabelle e confrontare Moore/Mealy, stati illegali e politica delle richieste.
- Progetto integrato: rilevatore di 101 sovrappostiConcetto
Applicare minimizzazione dello stato, validità, uscita registrata e verifica indipendente.
- Ready/valid e buffer elastico da un postoConcetto
Progettare trasferimenti senza perdite o duplicazioni e ingressi/uscite simultanei con arresti.
- Pipeline moltiplicazione-addizione e allineamentoConcetto
Suddividere ai registri mantenendo dati, valid e operandi ausiliari nella stessa transazione.
- Laboratorio integrato: impulsi periodici e accumulatore abilitatoEsercitazione
Specifica trasferimenti con valori precedenti e verifica pause, impulsi consecutivi e reset simultaneo.
- Diagnostica degli strumenti e portata dei risultati
- Setup, hold e bilancio temporaleConcetto
Separare cammini massimi e minimi e calcolare hold indipendentemente dalla frequenza.
- Confini dei domini di clock e metastabilitàConcetto
Comprendere i limiti della sincronizzazione a due stadi distinguendo bit, impulsi brevi e bus.
- Compilazione, lint e sintesi: portata delle diagnosiConcetto
Fissa sorgenti, top e linguaggio e distingui sintassi, larghezze, latch e funzione.
- Registri di esecuzione e prosecuzione nel DDSConcetto
Consegna sorgenti, ingressi, valori attesi, fallimenti e versioni per riprodurre il laboratorio.
- Verifica finale: funzione e proveVerifica
Distingui risultati locali e accettazione DDS gratuita.