Circuiti logici digitali
Dai segnali digitali e dalle porte AND, OR, XOR alla progettazione di circuiti combinatori, latch, flip-flop, contatori e macchine a stati. Collegate tabelle, formule, circuiti e forme d’onda e verificate con esercitazioni RTL. Gli approfondimenti facoltativi estendono il percorso ai datapath e alle interfacce.
Che cosa imparerai
- Distinguere valori logici e tensioni e spiegare tabelle, simboli e circuiti equivalenti di otto tipi di porte.
- Progettare circuiti combinatori dalla specifica con SOP, POS e mappe di Karnaugh e verificarli esaustivamente.
- Definire condizioni d’ingresso e confini di encoder, decoder, MUX, DEMUX, sommatori e comparatori.
- Distinguere latch e flip-flop e progettare le regole di aggiornamento di reset, enable e clock.
- Implementare contatori, shift e macchine a stati in RTL e analizzare timing, ingressi asincroni e debounce.
- Verificare con riferimenti indipendenti e completare un rilevatore di pattern 101 sovrapposti.
- Estendere il percorso ad ALU, memorie, FIFO, pipeline e interfacce negli approfondimenti facoltativi.
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
- Segnali digitali e rappresentazione dei numeri
- Segnali digitali: quando una tensione rappresenta 0 o 1Concetto
Distinguere valori logici e tensioni e calcolare soglie d’ingresso, margini di rumore e ritardi di propagazione.
- Sistemi numerici e rappresentazioni a larghezza fissaConcetto
Oltre alla conversione di base, calcolare intervalli rappresentabili, bit necessari ed errori di troncamento.
- Porte logiche e tabelle di verità
- Porte fondamentali: AND, OR, NOT e BUFFERConcetto
Collegare simboli e tabelle di verità e comporre condizioni con più porte.
- Leggere NAND, NOR e i simboli d’inversioneConcetto
Distinguere l’ambito della negazione e collegare simboli e formule equivalenti tramite De Morgan.
- XOR e XNOR: uguaglianza, differenza e paritàConcetto
Distinguere XOR a due ingressi e parità a più ingressi e spiegare i limiti della rilevazione degli errori.
- Porte universali: costruire circuiti con sole NANDConcetto
Dimostrare costruttivamente la completezza funzionale di NAND e NOR e verificare i segnali intermedi di XOR.
- Dalle formule logiche al progetto dei circuiti
- Algebra booleana, equivalenza e costo d’implementazioneConcetto
Trasformare circuiti con De Morgan e fattorizzazione, distinguendo equivalenza logica e temporizzazione.
- Dalla tabella alle formule: mintermini, maxtermini, SOP e POSConcetto
Derivare la stessa funzione dalle righe a 1 e a 0 e collegarla alla notazione delle mappe di Karnaugh.
- Mappe di Karnaugh e condizioni dei don’t-careConcetto
Semplificare con l’adiacenza Gray ed esplicitare le ipotesi sugli ingressi inutilizzati.
- Esercitazione: dalla specifica alla maggioranza a tre ingressiEsercitazione
Convertire una specifica testuale in una tabella completa e collegare minimizzazione, realizzazione e verifica esaustiva.
- Indirizzamento e circuiti di selezione
- Decoder, selezione one-hot e ingressi validiConcetto
Convertire indirizzi binari in selezioni e progettare enable, intervalli e invarianti.
- Encoder e priorità: scegliere fra più richiesteConcetto
Distinguere l’ipotesi one-hot dai risultati di un encoder prioritario: valid e selezione.
- DEMUX e decoder: inviare dati sul percorso selezionatoConcetto
Confrontare direzioni e ruoli di MUX, DEMUX e decoder e verificare le condizioni one-hot e «al massimo un 1».
- Segnali e porte: contratto di larghezza, direzione e tempoConcetto
Leggere le interfacce distinguendo i criteri di verifica delle uscite combinatorie e di stato.
- Dalla tabella di verità a MUX ed espansione di ShannonConcetto
Derivare la selezione e decomporre funzioni logiche generali con MUX.
- Aritmetica e confronti
- Sommatori e propagazione del riportoConcetto
Derivare le formule del sommatore completo e analizzare funzione, larghezza e ritardo del ripple-carry.
- Complemento a due, estensione del segno e overflowConcetto
Distinguere interpretazione signed e overflow dell’addizione con formule e controesempi.
- Comparatori e specifiche dei valori limiteConcetto
Distinguere confronti unsigned e signed degli stessi bit e verificare le condizioni limite.
- Latch, flip-flop e memoria dello stato
- L’inizio della memoria: retroazione e latch SR/DConcetto
Comprendere i due stati stabili dell’accoppiamento e spiegare ingressi SR vietati e trasparenza del latch D.
- Flip-flop D: dal livello al fronteConcetto
Confrontare l’aggiornamento di latch e flip-flop collegandolo a registri, setup e hold.
- Flip-flop, enable e priorità di controlloConcetto
Definire mantenimento, caricamento e reset come stato successivo ed evitare clock gating involontario.
- Transizioni sincrone e ruolo del clockConcetto
Interpretare un sistema sincrono come registri che leggono lo stesso stato precedente.
- Implementazione e verifica RTL del MUX
- Latenza della selezione combinatoria e delle uscite registrateConcetto
Analizzare come cambiano interfaccia e latenza quando si registra il risultato del MUX.
- RTL combinatorio e assegnazioni completeConcetto
Esprimere la stessa funzione con operatore condizionale e always_comb e trovare omissioni che generano latch.
- Laboratorio: verifica esaustiva del MUX e uscita registrataEsercitazione
Applicare gli stessi ingressi ai percorsi combinatorio e registrato e verificarli con tabella e istante di campionamento.
- Campionamento e causalità nelle forme d’ondaConcetto
Leggere le forme d’onda separando assestamento combinatorio, acquisizione e ordine degli eventi.
- 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.
- Contatori e aggiornamento sincrono dello stato
- Numero di stati, larghezza del contatore e codici inutilizzatiConcetto
Ricavare la larghezza dal campo di conteggio e definire il recupero degli stati invalidi.
- Stato successivo del contatore e priorità del resetConcetto
Unire incremento, mantenimento, reset e ritorno in una specifica e calcolare ogni fronte.
- Assegnazioni non bloccanti e aggiornamento simultaneoConcetto
Separare valori precedenti e successivi per leggere correttamente pipeline e contatori.
- Laboratorio: reset, ritorno e invarianti del contatoreEsercitazione
Confrontare ogni fronte con un riferimento e separare effetti di inizializzazione, reset e larghezza.
- Contatori modulari, saturanti e impulso terminaleConcetto
Progettare la gestione del massimo e il ciclo esatto del terminal count.
- Debug del contatore e controesempi minimiConcetto
Progettare test brevi che distinguano errori di reset, enable e ritorno.
- Verifica del progetto: larghezza, priorità e ritornoVerifica
Valutare confini e controlli simultanei dalla specifica delle transizioni.
- Registri a scorrimento e flusso dati
- Indici dei vettori, ordine dei bit e segnoConcetto
Leggere il datapath separando numerazione, ordine seriale e interpretazione aritmetica.
- Ingresso seriale e confini dei frameConcetto
Definire ordine e fronti validi e calcolare la disposizione nella conversione seriale-parallela.
- Equazioni di stato del registro a scorrimentoConcetto
Esprimere lo scorrimento come transizione vettoriale e collegare profondità e latenza.
- Larghezze di slice, concatenazione e ripetizioneConcetto
Costruire datapath calcolando larghezza complessiva e conservazione del valore.
- Laboratorio: movimento seriale e ordine dei bitEsercitazione
Verificare direzione, bit persi e latenza dopo reset con sequenze binarie e riferimento intero.
- Distinguere latenza in cicli e throughputConcetto
Definire il riferimento di una linea a N stadi e calcolare latenza e throughput.
- Verifica dello scorrimento e allineamento dati-validConcetto
Rilevare errori nascosti da schemi simmetrici e disallineamenti di valid di un ciclo.
- Verifica del progetto: latenza, allineamento e conservazioneVerifica
Verificare direzione, numero di spostamenti validi e riferimento d’osservazione.
- Timing, ingressi reali e macchine a stati
- Setup, hold e bilancio temporaleConcetto
Separare cammini massimi e minimi e calcolare hold indipendentemente dalla frequenza.
- Hazard logici e limiti delle formule equivalentiConcetto
Analizzare come circuiti equivalenti a regime producano transitori diversi per i ritardi.
- Confini dei domini di clock e metastabilitàConcetto
Comprendere i limiti della sincronizzazione a due stadi distinguendo bit, impulsi brevi e bus.
- Pulsanti reali: sincronizzazione, debounce e singolo eventoConcetto
Distinguere sincronizzazione e rimbalzi e progettare debounce su campioni consecutivi.
- Macchine a stati: separare stato, transizioni e usciteConcetto
Costruire FSM da tabelle e confrontare Moore/Mealy, stati illegali e politica delle richieste.
- Piano di verifica, coverage e riferimenti indipendentiConcetto
Distinguere test superati e specifica soddisfatta collegando confini, incroci e controesempi.
- Progetto integrato: rilevatore di 101 sovrappostiConcetto
Applicare minimizzazione dello stato, validità, uscita registrata e verifica indipendente.
- Approfondimento facoltativo · datapath aritmetici
- ALU e flag zero, negative, carry e overflowConcetto
Realizzare ADD/SUB con un sommatore condiviso e derivare confronti separando carry e overflow.
- Barrel shifter e MUX a stadiConcetto
Realizzare shift variabili con stadi MUX 1/2/4/8, direzione condivisa, segno e distanze fuori campo.
- Virgola fissa, arrotondamento e saturazioneConcetto
Definire il campo W, F e progettare ties-to-even con guard/sticky e saturazione successiva.
- Moltiplicatore unsigned shift-add multicicloConcetto
Accumulare prodotti parziali in W clock verificando accettazione, fine, ultimo accumulo, larghezza e invariante.
- Approfondimento facoltativo · memorie e FIFO
- Memoria sincrona e contratto delle collisioniConcetto
Definire risposta registrata, read-first/write-first/no-change e responsabilità distinte di valid e inizializzazione.
- File di registri con due letture, una scrittura e bypassConcetto
Implementare letture indipendenti e scrittura sincrona verificando bypass, inizializzazione e valid.
- Puntatori e politiche di confine della FIFO a clock singoloConcetto
Implementare puntatori e occupazione di quattro posti e definire accettazione simultanea a vuoto/pieno.
- Piano di verifica FIFO/memorie e scoreboard indipendenteConcetto
Costruire un riferimento queue indipendente dai puntatori e pianificare confini, reset, valid e letture non inizializzate.
- Approfondimento facoltativo · pipeline e interfacce
- 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.
- Pipeline arrestabile e backpressureConcetto
Calcolare ready per stadio evitando perdite, duplicazioni e ricalcoli durante stop e avanzamenti simultanei.
- Interfaccia registri e istante degli effettiConcetto
Specificare indirizzi, byte e stop di risposta affinché ogni accettazione produca un solo effetto.
- Laboratorio integrato: trasmettitore UART e tempi del frameConcetto
Unire divisore, registro e controllo di flusso per 8N1 verificando i confini dei bit.