Modellazione RTL Modulo 7 Università di Cagliari Dipartimento di Ingegneria Elettrica ed Elettronica Laboratorio di Microelettronica e Bioingegneria (EOLAB)
Register Transfer Level Esistono molti modi per implementare una determinata funzionalità tramite un dispositivo digitale. Fra questi, l approccio adottato nella grande maggioranza dei casi è quello RTL, grazie al fatto che: E il più semplice da realizzare E il maggiormente supportato da tool automatici Dà maggiori garanzie di arrivare ad un risultato funzionante in breve tempo 2
Struttura RTL Un dispositivo modellato in termini RTL è un oggetto che implementa la sua funzionalità memorizzando i dati su registri in istanti di tempo predeterminati (in corrispondenza dei colpi di clock) e trasferendo tali dati da registro a registro eventualmente elaborandoli e trasformandoli in maniera opportuna secondo una sequenza particolare Gli elementi di memorizzazione sono dunque solo i registri ed i dati vengono elaborati attraverso blocchi di logica combinatoria interposti fra un registro e l altro. Da qui il nome Register Transfer Level 3
Inputs Outputs Struttura RTL REG Logica combinatoria REG Logica combinatoria REG REG Logica combinatoria REG clock 4
Circuiti sincroni Un dispositivo modellato in RTL è un dispositivo sincrono, ossia che memorizza i dati in corrispondenza dei fronti di un segnale di sincronia detto CLOCK Gli elementi di memoria dei registri sono dunque realizzati per mezzo di flip-flop e NON di latch (che hanno il problema della trasparenza) Durante il periodo del clock le uscite dei registri vengono elaborate e trasformate dalla logica combinatoria fino a presentarsi in ingresso al registro successivo dove verranno memorizzati al prossimo colpo di clock 5
Esempio: memorizzazione su latch Y=Y+C C[7:0] + EN Y[7:0] Registro costituito da 8 latch D con enable Finché EN=1 il latch è trasparente e la somma e Y continua ad essere aggiornato (Y=Y+C+C+C+ ). Si crea cioè un percorso diretto ad anello fra ingresso ed uscita e non si può essere certi di quante volte verrà fatta la somma 6
Esempio: memorizzazione su flip-flop C[7:0] + CLK Y[7:0] Registro costituito da 8 flip-flop D Adesso sappiamo che il nuovo valore verrà memorizzato sul registro solo in corrispondenza del fronte del clock, a prescindere del periodo in cui CLK resta alto o basso e possiamo sapere esattamente quante volte viene fatta la somma contando i colpi di clock 7
Struttura di un progetto Il progetto deve essere organizzato con una precisa struttura che ne garantisca il funzionamento In un modello RTL il dispositivo è costituito da: Un insieme di registri (dove vengono memorizzati i dati e gli eventuali risultati parziali) Blocchi di logica combinatoria di elaborazione Logica di controllo che stabilisce in quale modo i dati debbano essere elaborati ed in quale sequenza 8
Datapath e controllo L insieme dei registri e della logica combinatoria costituisce il datapath (percorso dei dati), la logica che determina la sequenza delle operazione è chiamata controllo Il datapath esegue le operazioni e memorizza i dati Il controllo pilota opportunamente il datapath perché implementi le operazioni corrette Per sequenziare opportunamente le operazioni, il controllo deve generare dei segnali di controllo diretti verso il datapath e ricevere in ingresso dal datapath eventuali segnali di stato 9
Datapath e controllo La generica struttura di un blocco digitale è data quindi dallo schema seguente: Inputs Segnali di stato Datapath (registri e logica combinatoria) Segnali di controllo Outputs Controllo (FSM) 10
Esempio: datapath e controllo Proviamo ad identificare il datapath ed il controllo di un sistema per la preparazione di un piatto di spaghetti alla carbonara 11
Esempio La preparazione della pasta alla carbonara deve essere fatta rispettando la seguente ricetta: Riempire un pentola di acqua, salarla e portare ad ebollizione Quando l acqua bolle gettare la pasta, passati 8 minuti scolare Nel frattempo tagliare a dadini la pancetta e mettere a scaldare l olio in una padella Quando l olio è caldo gettare la pancetta nella padella In una ciotola versare tuorlo ed albume di un uovo, aggiungere un pizzico di sale, del latte e del parmigiano Sbattere il composto energicamente Quando la pancetta è diventata croccante spegnere il fuoco sotto la padella Unire la pasta cotta al dente alla pancetta ed all uovo sbattuto Aggiungere parmigiano a gusto 12
Dati: Esempio Spaghetti, acqua, olio, pancetta, uovo, latte, sale, parmigiano Datapath: Pentola, padella, ciotola, fruste, fornelli, mestolo, orologio Controllo: Cuoco Segnali di controllo: Agire sugli interruttori dei fornelli, sullo sbattitore, dosare gli spaghetti e gli altri ingredienti Segnali di stato: Vapore di ebollizione dell acqua, aspetto della pancetta croccante 13
Esempio In questo caso il datapath è costituito da tutti quegli strumenti che sono necessari per trasformare gli ingredienti (pasta, acqua, olio, pancetta, uovo, latte, sale, parmigiano) nel piatto finale Gli ingredienti sono quindi i dati del problema ed il datapath è costituito dall insieme della pentola, la padella, la ciotola, lo sbattitore ed i due fornelli, necessari per trasformare gli ingredienti in una carbonara Il controllo è evidentemente il cuoco che si incarica di applicare le istruzioni della ricetta nell ordine opportuno I segnali di stato che provengono dal datapath dicono al controllo quando è necessario intervenire, ad esempio il vapore che sale dalla pentola avverte che l acqua bolle ed è tempo di gettare la pasta, l aspetto della pancetta avverta che è il momento di spegnere il fuoco sotto la padella I segnali di controllo sono tutte le azioni che il cuoco mette in atto per fare progredire la preparazione al momento e nell ordine giusti 14
Esempio Inputs: Acqua, sale, olio, uova, latte, parmigiano, pancetta, spaghetti Segnali di stato Temperatura dell acqua, temperatura dell olio, conteggio timer, colore pancetta Datapath Pentola, padella, ciotola, frusta, scolapasta, fornelli Segnali di controllo Accensione fornello, spegnimento fornello, buttare la pasta, scolare la pasta Outputs: pasta alla carbonara Controllo Cuoco 15
Modellazione RTL I passaggi da compiere per modellare correttamente un circuito a partire dalle specifiche che ne descrivono il funzionamento sono dunque: Identificare INGRESSI ed USCITE del modulo Definire i REGISTRI di cui si ha bisogno nel datapath Definire la LOGICA COMBINATORIA richiesta nel datapath Identificare la LOGICA DI CONTROLLO per la gestione della operazioni Inoltre, è sempre necessario definire la STRATEGIA DI RESET. Sappiamo infatti che all accensione di un circuito non è possibile sapere in quale stato esso si trovi perché i registri si inizializzano ad un valore casuale. E dunque necessario portarsi in uno stato noto attraverso un opportuno meccanismo di reset 16
Modellazione RTL In pratica il datapath risulta essere costituito da alcuni REGISTRI ed un insieme di blocchi di logica combinatoria come MUX, ADDER, SHIFTER, ALU I segnali di stato che provengono dal datapath sono in genere condizioni logiche (il contenuto di un registro è andato a zero, una somma ha dato overflow, etc.) I segnali di controllo generati dalla macchina a stati sono tipicamente i segnali di abilitazione dei registri (quando il dato è pronto bisogna abilitare il registro perché lo memorizzi al prossimo colpo di clock), i segnali di controllo dei multiplexer, i segnali di selezione delle ALU, etc. 17
Esempio contatore: specifica Modellare un contatore programmabile a 8 bit. Il contatore ha i seguenti ingressi: clk, rst : clock e reset, entrambi a singolo bit load, en_count: caricamento della durata del conteggio ed abilitazione al conteggio, entrambi a singolo bit din[7:0]: durata del conteggio (8 bit) Ha un uscita done che identifica la fine del conteggio Il funzionamento è il seguente: Non appena il segnale load va alto (e fino a che resta alto) il contatore viene inizializzato al valore presente su din e l uscita done va bassa. Dopo che load torna basso il contatore, non appena il segnale en_count va alto, inizia a decrementare il valore memorizzato fino a che non arriva a zero. A tal punto porta alta l uscita done e si mette in attesa 18
Esempio contatore: modellazione Primo passo della modellazione è l identificazione degli ingressi e delle uscite, nel nostro caso è molto semplice perché la specifica di partenza era così dettagliata da elencare uno per uno ciascun ingresso e ciascuna uscita. In generale questo non è scontato, la specifica può essere più generica ed è compito del progettista capire di quali ingressi e quali uscite ha bisogno Ingressi clock rst din load en_count Uscite done 19
Esempio contatore : schema Inputs: din[7:0] load en_count Segnali di stato Datapath Segnali di controllo Outputs: done Controllo 20
Esempio contatore: datapath (registri) Per identificare il datapath è necessario individuare registri e logica combinatoria richiesti per implementare la funzionalità. REGISTRI: Servono: un registro per memorizzare il valore di partenza del conteggio ed un registro dove memorizzare il nuovo valore assunto dal conteggio. Questi due registri possono però essere lo stesso registro perché il valore di partenza ci serve solo all inizio e poi non più. Il nuovo valore assunto dal conteggio può quindi essere memorizzato nel registro su cui inizialmente avevamo messo il valore di partenza. COUNT_REG 21
Esempio contatore: datapath (logica) LOGICA COMBINATORIA: Decrementatore: serve per decrementare il contenuto del registro Multiplexer: serve per decidere cosa scrivere nel registro (il dato in ingresso oppure l uscita del decrementatore o l uscita stessa del registro) Comparatore: per verificare se il contenuto del registro è nullo 22
Esempio contatore: datapath -1 din[7:0] MUX REG ==0? done Segnali di stato Segnali di controllo sel[1:0] clk 23
Esempio contatore : schema Inputs: din[7:0] load en_count Segnali di stato: done MUX -1 REG ==0? Segnali di controllo: sel[1:0] Outputs: done Controllo 24
Esempio contatore: controllo Il controllo è una macchina a stati che prende in ingresso i segnali load, en_count ed il segnale done per decidere come sequenziare le operazioni: Il controllo deve decidere quale segnale fare andare in ingresso al registro a seconda che il conteggio sia finito (done), oppure che sia necessario caricare un nuovo valore (load) Si tratta ovviamente di una macchina a stati così semplice che la si sarebbe potuta implementare in modo implicito 25
Esempio contatore: controllo Se realizziamo la macchina con una struttura Mealy serve un solo stato perché basta guardare gli ingressi per decidere quale sia l azione da compiere: Se LOAD = 1 bisogna memorizzare din sul registro altrimenti Se EN_COUNT = 1 e DONE = 0 bisogna memorizzare sul registro l uscita del decrementatore altrimenti Se DONE = 1 bisogna memorizzare sul registro l uscita del registro stesso 26
Esempio contatore: controllo In pratica questo particolare circuito è così semplice da non avere bisogna di un controllo con memoria (una macchina a stati). Il controllo si riduce quindi a semplice logica combinatoria (ottenuta dalla trascrizione verilog del comportamento voluto, espresso nel lucido precedente da if else) Si tratta di un caso particolare, ovviamente, data la semplicità del circuito che si voleva realizzare (in pratica tutta la memoria necessaria è dentro il datapath). Non esistendo la macchina a stati non è neanche necessaria una strategia di reset 27
Esempio contatore : schema Inputs: din[7:0] load en_count Segnali di stato: done MUX -1 REG ==0? Segnali di controllo: sel[1:0] Outputs: done Logica Combinatoria 28
Input clk, rst : clock e reset go : partenza elaborazione din [3:0] : dati in ingresso Output Esempio: media dout [7:0] : media di 4 ingressi successivi data_valid : dato in uscita valido Funzionamento: Il sistema resta in attesa del segnale go. Non appena go va alto acquisisce sequenze di 4 dati sul bus di ingresso din e ne calcola la media. Quando la media è pronta data_valid va alto. Se go torna basso prima che la media sia pronta si torna in attesa del segnale go interrompendo l elaborazione (data_valid basso). 29
Esempio media: modellazione Primo passo della modellazione è l identificazione degli ingressi e delle uscite, nel nostro caso è molto semplice perché la specifica di partenza era così dettagliata da elencare uno per uno ciascun ingresso e ciascuna uscita. In generale questo non è scontato, la specifica può essere più generica ed è compito del progettista capire di quali ingressi e quali uscite ha bisogno Ingressi clock rst din[3:0] go Uscite dout[7:0] data_valid 30
Esempio media : schema Datapath Inputs: din[3:0] go Segnali di stato Segnali di controllo Outputs: data_valid dout[7:0] Controllo 31
Esempio media: datapath (registri) Per identificare il datapath è necessario individuare registri e logica combinatoria richiesti per implementare la funzionalità. REGISTRI: Servono dei registri dove memorizzare i 4 numeri da sommare ed uno dove memorizzare la loro media. In realtà, però, non è necessario memorizzare i dati ma solo le somme parziali che possono essere memorizzate in un unico registro (i dati in ingresso servono infatti solo al momento del calcolo della somma e poi non più). REG_SUM 32
Esempio media: datapath (logica) LOGICA COMBINATORIA: Sommatore: serve per sommare i dati in arrivano Shifter: serve per effettuare la divisione per 4 (dividere per una potenza di 2 equivale a fare uno shift verso destra di tante posizioni quanto è l esponente della potenza; allo stesso modo la moltiplicazione viene effettuata con uno shift verso sinistra) Multiplexer: il primo dato in arrivo non deve essere sommato al contenuto del registro ma memorizzato direttamente nel registro. Il registro stesso ha dunque due possibili ingressi: din oppure l uscita del sommatore. Ogni volta che ci si trova di fronte alla scelta fra due percorsi è necessario un multiplexer Segnali di controllo La presenza del multiplexer richiede un segnale di selezione (sel) che deve essere ovviamente generato dal controllo Segnali di stato In questo caso non abbiamo segnali di stato perché la sequenza delle operazioni non dipende da qualcosa che possa avvenire nel datapath 33
Esempio media: datapath din[3:0] 0 MUX REG + 1 Shifter dout[7:0] sel_mux clk 34
Esempio media: schema din[3:0] Datapath dout[7:0] Inputs: din[3:0] go Segnali di controllo sel_mux Outputs: data_valid dout[7:0] Controllo 35
Esempio media: controllo Il controllo è una macchina a stati che prende in ingresso il segnale go per decidere come sequenziare le operazioni: Il controllo deve decidere quale segnale fare andare in ingresso al registro a seconda che il numero in ingresso sia il primo di una sequenza di quattro oppure uno degli altri tre. Terminata una sequenza di 4 deve rincominciare da capo Si tratta ovviamente di una macchina a stati con almeno 4 stati (uno per ogni numero da sommare) più uno stato di reset. Le uscite della macchina saranno due: data_valid sel_mux Gli ingressi sono clock, reset ed il segnale go 36
Esempio media: controllo La macchina può essere implementata facilmente con una struttura di Moore perché le uscite corrispondono agli stati: sappiamo infatti che solo al quarto stato (STEP4) il dato sarà valido (data_valid) e che solo all inizio del primo step (START e STEP4) il dato dovrà entrare direttamente nel registro senza essere sommato al contenuto del registro stesso. go go STEP4 data_valid=1 sel_mux=0 go go STEP3 data_valid=0 sel_mux=1 START data_valid=0 sel_mux=0 go go go go go STEP1 data_valid=0 sel_mux=1 STEP2 data_valid=0 sel_mux=1 go 37
Esempio media : schema din[3:0] Datapath dout[7:0] Inputs: din[3:0] go sel_mux Outputs: data_valid dout[7:0] go go go STEP4 data_valid=1 sel_mux=0 START data_valid=0 sel_mux=0 go go STEP1 go data_valid=0 sel_mux=1 go go go STEP3 STEP2 data_valid=0 data_valid=0 sel_mux=1 go sel_mux=1 go data_valid 38