progettazione digitale e VHDL - Gruppo1-2 INFN FIRENZEhep.fi.infn.it/CIBER/VHDL-2009_11_09.pdf ·...

49
Sergio Ricciarini ~ INFN Firenze Corso di Elettronica Generale I Laurea Specialistica in Scienze Fisiche e Astrofisiche Dip. di Fisica - Università di Firenze 2009-11-06 Progettazione di circuiti digitali: FPGA e linguaggio VHDL

Transcript of progettazione digitale e VHDL - Gruppo1-2 INFN FIRENZEhep.fi.infn.it/CIBER/VHDL-2009_11_09.pdf ·...

Sergio Ricciarini~

INFN Firenze

Corso di Elettronica Generale ILaurea Specialistica in Scienze Fisiche e Astrofisiche

Dip. di Fisica - Università di Firenze

2009-11-06

Progettazione di circuiti digitali:FPGA e linguaggio VHDL

2

Sommario

Circuiti digitali integrati.

Progettazione digitale e VHDL:• descrizione, compilazione e verifica del progetto;• come progettare un circuito logico in VHDL.

Temporizzazioni dei segnali e macchine sincrone.

Upset ed errori logici.

Campionamento asincrono.

S. Ricciarini – progettazione circuiti digitali

3

Bibliografia

http://mikro.e-technik.uni-ulm.de/vhdl/anl-engl.vhd/html/vhdl-all-e.html

http://www.csee.umbc.edu/help/VHDL/index.shtml

http://www.eng.auburn.edu/department/ee/mgc/vhdl.html

http://instruct1.cit.cornell.edu/courses/ee475/tutorial/VHDL3651.html

http://www.disi.unige.it/person/AnconaD/Architettura/vhdl.htm

ricerca su google etc.: "vhdl manual"

biblioteche di Ateneo (non Polo Scientifico)

S. Ricciarini – progettazione circuiti digitali

4

Circuiti digitali integrati

S. Ricciarini – progettazione circuiti digitali

5

Circuito digitale integratoASIC: application specific integrated circuit (Analog Device, Texas...).• Matrice di celle logiche con interconnessioni fissate dal produttore al momento della

fabbricazione del chip, in base all'applicazione richiesta.

FPGA: field programmable gate array (Altera, Xilinx, Actel, Quicklogic...)• Il chip è una matrice di celle logiche con interconnessioni configurabili dall’utente in

base al campo (“field”) di applicazione.• La configurazione avviene o con speciali dispositivi (“programmatori”) o direttamente

nel circuito stampato (“scheda” o “printed circuit board” PCB).• Dopo la configurazione una parte della FPGA risulta inutilizzata.

Celle logiche:(a) combinatorie: solo logica combinatoria: combinazione di porte AND, NOT ecc.;(b) sequenziali:

- un flip-flop (memoria a 1 bit);- logica combinatoria.

S. Ricciarini – progettazione circuiti digitali

6

Esempio: celle elementari Actel

Celle logiche elementari:(a) combinatorie.(b) sequenziali.

S. Ricciarini – progettazione circuiti digitali

7

Esempio: cella elementare AlteraUnica cella logica elementare, integra parte combinatoria e flip-flop. Progettata per massima versatilità.

S. Ricciarini – progettazione circuiti digitali

8

Progettazione digitale e VHDL• descrizione, compilazione e verifica del progetto

S. Ricciarini – progettazione circuiti digitali

9

Linguaggio VHDLVHDL: Very-high-speed-integrated-circuits Hardware Description Language.

• Uno dei linguaggi per la descrizione funzionale di qualsiasi circuito digitale (FPGA, ASIC...), diffuso a livello mondiale (standard IEEE).

• La descrizione funzionale rappresenta strutture logiche in modo astratto, cioè senza necessariamente indicare una specifica realizzazione in termini di rete di NOT, AND e flip-flop fra tutte quelle equivalenti che danno la stessa funzione logica (relazione fra uscite e ingressi del circuito).

• Un compilatore (software installato su PC) traduce la struttura astratta VHDL in una struttura specifica da realizzare in un dato dispositivo.

S. Ricciarini – progettazione circuiti digitali

10

Descrizione funzionale o strutturale• Dall’altra parte, in una descrizione strutturale (ad esempio un disegno schematico) viene

indicata una sola struttura logica fra le tante equivalenti.• La descrizione strutturale diventa utile quando ci sono esigenze molto particolari in termini di

numero di celle utilizzate, ritardi fra ingressi e uscite ecc.

• La descrizione funzionale, in quanto astratta, è di più immediata comprensione per l’utente (ad es. per successive modifiche e correzioni).

• Risparmio di tempo durante la codifica del circuito; minore possibilità di introdurre errori.• Diventa in pratica indispensabile per circuiti di media-alta complessità (> 100 celle elementari).• Analogia con C, FORTRAN rispetto a linguaggio macchina per un processore.

• NOTA: in VHDL è anche possibile effettuare una descrizione strutturale (porte AND, NOT e flip-flop) del tutto analoga al disegno schematico.

• In genere un codice VHDL contiene un insieme di descrizioni funzionali e strutturali.

S. Ricciarini – progettazione circuiti digitali

11

Compilazione del progetto VHDLIl compilatore agisce in due fasi.

• Per le FPGA: spesso due software distinti; unico software (Quartus) nel caso di Altera.

1) Sintesi.Il codice VHDL (funzionale, astratto) è tradotto in una specifica struttura di porte logiche elementari (AND, NOT e flip-flop): la netlist.

• Input: il codice VHDL (uno o più file di testo .vhd).• Output: tipicamente un file .edf cioè con formato EDIF (Electronic Design Interchange

Format, altro standard industriale).• La netlist non fa riferimento ad alcun dispositivo specifico (FPGA o ASIC).

2) Fit (“adattamento”) o, equivalentemente, place and route (“posizionamento e interconnessione”).La netlist è tradotta in un codice di configurazione per un determinato dispositivo, e salvato in uno o più file di configurazione.

• Per le FPGA: il fitter (software) e il codice di configurazione cambiano a seconda del modello di FPGA e della modalità di configurazione (dispositivo programmatore, memoria flash sul circuito stampato ecc.).

S. Ricciarini – progettazione circuiti digitali

12

Con la sintesi la struttura logica viene automaticamente ottimizzata (sia che sia stata descritta in maniera funzionale o strutturale).

• Sono eliminate le parti logiche ridondanti (duplicate nel codice VHDL) in modo da ridurre il numero di celle logiche necessarie.

• Il numero di celle a disposizione in una FPGA è limitato.• Si riduce la potenza assorbita (consumo).• Il codice può essere scritto in maniera non necessariamente

sintetica, quindi più naturale e meglio leggibile.

Sintesi e ottimizzazioni

S. Ricciarini – progettazione circuiti digitali

13

• Viene limitato il numero di porte pilotate da una singola linea (fan-out), tramite la ridondanza (duplicazione) della parte logica in questione.

• La capacità di carico e quindi la costante di tempo sulla linea aumenta linearmente col numero di porte pilotate, mentre la frequenza operativa del circuito viene fissata dall’utente.

Sintesi e ottimizzazioni

S. Ricciarini – progettazione circuiti digitali

14

Verifica del progettoCi sono due modi per verificare la corretta funzionalità del circuito digitale (FPGA, ASIC...) progettato: simulazione e prove in laboratorio.• In entrambi i casi si forniscono al circuito i necessari segnali digitali di ingresso,

variabili nel tempo, e si osserva il comportamento nel tempo dei segnali in uscita.Conviene passare alle prove in laboratorio solo quando la simulazione ha dato esito positivo.

Simulazione.• La simulazione avviene mediante un apposito software; le forme d’onda sulle uscite

sono visualizzate in una finestra grafica.• E’ possibile assegnare le forme d’onda di ingresso tramite interfaccia grafica.• Il VHDL contiene la sintassi necessaria per codificare forme d’onda digitali per il

simulatore.

S. Ricciarini – progettazione circuiti digitali

15

Verifica del progettoLa simulazione è solitamente di tipo temporale:• il simulatore riproduce le temporizzazioni (tempi di propagazione) attese dei segnali

nel circuito, per uno specifico dispositivo e per determinati valori dei parametri operativi.

• NOTA: le temporizzazioni variano con i parametri operativi (Valim, T).• NOTA: possibile anche una simulazione funzionale (più rapida), assumendo che le

temporizzazioni nel circuito non influiscano sul comportamento del circuito (ipotesi realistica solo in pochi casi pratici).

Limiti della verifica del progetto:• in simulazione le temporizzazioni reali sono riprodotte in modo necessariamente

approssimato;• in simulazione e in laboratorio non è generalmente possibile provare:

• tutte le possibili combinazioni di valori dei parametri operativi (Valim, T);• tutte le possibili casistiche di utilizzo (sequenze di segnali in ingresso) in cui il circuito

logico verrà ad operare.

S. Ricciarini – progettazione circuiti digitali

16

Progettazione digitale e VHDL• come progettare un circuito logico in VHDL

S. Ricciarini – progettazione circuiti digitali

17

Progettazione digitaleUn generico circuito logico (FPGA, ASIC...) è una struttura sequenziale o macchina logica, composta cioè di un insieme di flip-flop e di parti puramente combinatorie (combinazioni di NOT, AND ecc.).

• I flip-flop memorizzano lo stato logico della macchina.• Le parti combinatorie definiscono con la lorostruttura la sequenza degli stati del circuito.

Un circuito logico è in genere suddiviso per comodità pratica in un certo numero di blocchi logici o componenti organizzati in maniera gerarchica.

• Conviene definire la gerarchia in modo da poter ripetere più volte nel progetto lo stessocomponente e, nel caso FPGA, far coincidere la funzionalità di un componente con quella di una “macro”.

S. Ricciarini – progettazione circuiti digitali

18

Macrofunzioni (“macro”)I componenti più comuni possono in genere essere prodotti senza codifica (VHDL o disegno schematico), utilizzando un software generatore di macrofunzioni, integrato nel software di compilazione (in Quartus: MegaWizard Plug-in Manager).

• Contatori a N bit, registri a N bit (SIPO, SISO, PIPO, PISO), multiplexer a N bit, decodificatori...• Configurabili dall’utente: numero di bit, presenza di ingressi “asincroni” preset e/o clear, presenza

di enable ecc.

La macrofunzione viene inclusa nella struttura gerarchica del progetto come gli altri componenti.

• In genere la macrofunzione prodotta contiene una descrizione strutturale, ottimizzata per la specifica FPGA, e con una funzionalità garantita.

Prima di scrivere il codice per realizzare una data funzione logica, verificare sempre se è possibile utilizzare una o più macro.

• Risparmio di tempo notevole (servono pochi secondi per generare una macro).• Un blocco di codice VHDL scritto a mano raramente potrà essere meglio ottimizzato della macro

equivalente; in ogni caso occorrerebbe dare una specifica descrizione strutturale e ottimizzata.

S. Ricciarini – progettazione circuiti digitali

19

Progettare in VHDLCosa è necessario codificare per realizzare un progetto in VHDL.

• Le interconnessioni fra i vari componenti interni e verso l’esterno.• I componenti originali, quelli cioè che non sono macro: ad esempio le macchine a stati (descritte

in seguito).

Stile di codifica:

• è necessario adottare uno stile di codifica “adeguato”, per evitare che durante la compilazione, l’adattamento (fit) del codice alla struttura reale della FPGA (matrice di celle logiche specifiche) comporti un cambiamento della funzionalità effettiva rispetto a quella desiderata.

• Nel caso in cui la funzionalità del circuito cambi a seconda della specifica realizzazione in termini di rete di celle logiche nella FPGA (cioè cambi a seconda delle temporizzazioni) il compilatore ècostretto a scegliere una sola realizzazione fra le tante possibili.

• Stile di codifica “adeguato”: in pratica è sufficiente suddividere il circuito in blocchi sincroni (in un blocco sincrono un unico segnale è usato come clock per tutti i flip-flop) e trattare in modo “adeguato” le interfacce fra blocchi non sincroni fra loro.

• Nel resto di questo corso verrà mostrato il significato di “adeguato”!

S. Ricciarini – progettazione circuiti digitali

20

(Es. 1) Semplice progetto VHDL-- COMMENTO: esempio di progetto elementare (solo combinatorio per semplicità)

library IEEE;use IEEE.std_logic_1164.all; -- libreria di base (da indicare sempre)

entity main is -- entità = interfaccia esterna; main è il nome, definito dall’utenteport ( -- elenco dei segnali esterni di main

in1_pin, in2_pin, in3_pin: in std_logic; -- std_logic (tipo del segnale): due valori, '1' o '0'

out_pin: out std_logic ); -- un singolo enunciato puo’ essere scritto su più righe

end main;

architecture arch1 of main is -- architettura = struttura interna; arch1 è il nome

-- segnali internisignal in1_and_in2 : std_logic;

begin

in1_and_in2 <= in1_pin AND in2_pin;

out_pin <= in1_and_in2 OR NOT in3_pin;

end arch1; -- questa descrizione è strutturale (una specifica combinazione di porte logiche)

S. Ricciarini – progettazione circuiti digitali

21

(Es. 2) Architettura a blocchi gerarchici-- altra architettura più generale per l’entità main, con un componente interno, la cui

architettura è definita altrove (~ subroutine)

architecture arch2 of main is

-- segnali internisignal in1_and_in2 : std_logic;

-- componenti interni di questa architettura

component logic_function -- componente = blocco logico, la cui architettura NON èspecificata qui (il nome e l’interfaccia del componente devono corrispondere a un’entitàdecritta altrove)port (input1, input2: in std_logic;

output: out std_logic);

end component;

beginin1_and_in2 <= in1_pin AND in2_pin;logic_function_inst1: logic_function port map ( -- chiamata (“instance”) del componente con mappatura dei suoi segnali esterni sui segnali interni o esterni di main

input1 => in1_and_in2, -- segnale interno di maininput2 => in3_pin, -- segnale esterno di mainoutput => out_pin);

end arch2;

S. Ricciarini – progettazione circuiti digitali

22

(Es. 2) Descrizione del componente-- tipicamente il componente è descritto in un file separato, come blocco logico indipendente

library IEEE;use IEEE.std_logic_1164.all;

entity logic_function isport (

input1, input2: in std_logic; -- la interfaccia deve essere coerente con quanto dichiarato nella architettura dove il componente viene chiamato (~ subroutine)

output: out std_logic );

end logic_function;

architecture arch_simple of logic_function is

begin

output <= input1 OR NOT input2;

end arch_simple;

S. Ricciarini – progettazione circuiti digitali

23

Progettazione a blocchi gerarchiciLo stesso componente (blocco logico) può essere inserito in N copie (cioè chiamato N volte) in uno stesso progetto VHDL.

• Ogni copia è identificata da una diversa “etichetta” (label):logic_function_inst1: logic_function port map (…);logic_function_inst2: logic_function port map (…);

Nel caso di componente originale:• per modificare tutte le copie è sufficiente cambiare una volta il codice che descrive l’architettura

del componente;• è possibile definire tante diverse architetture per uno stesso componente e poi scegliere quella da

utilizzare in compilazione:

entity logic_function isport (

input1, input2: in std_logic;output: out std_logic);

end logic_function;for all: logic_function use entity work.logic_function(arch_chosen);

S. Ricciarini – progettazione circuiti digitali

24

Come descrivere un’architettura in VHDLUn’architettura in VHDL può contenere 3 diverse tipologie descrittive (fra begin e end):

architecture arch_simple of logic_function is

begin

........................ <<<<<<<<<<---------- QUI

end arch_simple;

• (1) chiamata di un componente la cui architettura è indicata altrove (eventualmente una macro):

example_instance: example port map (…);

Negli altri due casi l’architettura viene specificata immediatamente.

• (2) assegnazione (descrizione strutturale):

architecture struct of example isbegin

output <= input1 OR NOT input2;end struct;

S. Ricciarini – progettazione circuiti digitali

25

Come descrivere un’architettura in VHDL

• (3) processo (descrizione funzionale):

architecture behav of example isbegin

process (input1, input2) -- lista di sensibilità (ingressi del componente)begin -- struttura interna del componente, descritta in maniera astratta,

senza specificare necessariamente una specifica combinazione di NOT e AND come nel caso dell’assegnazione (2) precedente, ma solo indicando la funzione desiderata, cioè le combinazioni di valori di ingresso per cui l’uscita deve essere 1

if (input1 = '1' OR input2 = '0') thenoutput <= '1';

else -- ATTENZIONE: può essere omesso, ma allora cambia la funzionalità!!!

output <= '0';end if;

end process;

end behav;

S. Ricciarini – progettazione circuiti digitali

26

Concetto di concorrenzaL'ordine, all’interno dell’architettura, in cui vengono elencati chiamate, assegnazioni e processi non ha effetto sulla struttura del circuito logico.

• Il codice VHDL è una rappresentazione “unidimensionale” (un elenco) dei componenti del circuito.

• Il disegno schematico è una rappresentazione “bidimensionale”.

Il codice VHDL è analogo al codice C ecc., ma solo per certi aspetti. In particolare, l’elenco di componenti nell’architettura VHDL non ha nulla a che vedere con l’elenco di istruzioni elencate in un programma C.

Tutti i componenti dell’elenco VHDL sono concorrenti, cioè simultaneamente attivi, in quanto i componenti sono fra loro interconnessi.

• Consideriamo un processo generico: la variazione, ad esempio, di un segnale nella lista di sensibilità del processo implica in generale la variazione delle uscite del componente e quindi degli ingressi di altri componenti.

Dall’altro lato, le istruzioni dell’elenco C in una data routine sono necessariamente attive una alla volta nel tempo.

S. Ricciarini – progettazione circuiti digitali

27

Temporizzazioni dei segnali e macchine sincrone

S. Ricciarini – progettazione circuiti digitali

28

Temporizzazioni: setup e hold timePer un blocco puramente combinatorio (cioè blocco logico senza flip-flop) la corretta funzionalità dipende solo dalla correttezza del codice.

Per un blocco sequenziale o macchina logica (cioè un blocco logico che contiene anche flip-flop), invece, la effettiva realizzazione della funzionalità desiderata dipende anche dalle temporizzazioni dei segnali.

• Per ogni flip-flop nella macchina logica, setup time e hold time non devono essere violati, pena la possibilità di funzionamento scorretto della macchina (il flip-flop carica in uscita il valore sbagliato: upset).

Tutte le temporizzazioni variano (in maniera più o meno significativa) anche con temperatura, tensione di alimentazione, radiazione assorbita, tecnologia (famiglia di FPGA), singolo dispositivo.

• Conviene quindi massimizzare i margini temporali per rendere il circuito quanto più possibile immune a tali variazioni.

S. Ricciarini – progettazione circuiti digitali

29

Macchina sincrona: introduzioneIl fitter (software di place and route) ottimizza disposizione geometrica e interconnessioni del circuito logico per massimizzare i margini temporali.

• Il fitter tiene conto della famiglia di FPGA, del campo di condizioni ambientali ammesse (temperatura e tensione di alimentazione), della massima frequenza operativa richiesta dall'utente.

• In fase di compilazione e simulazione il software indica i cammini di segnale che violano setup o hold time.

L'ottimizzazione effettuata dal fitter è tanto più efficace quanto più opportuno lo stile di codifica adottato.

• In particolare, la seguente soluzione è impiegata normalmente, se la particolare applicazione lo permette:

• progettare nella FPGA una macchina sincrona (o circuito sincrono), cioè un circuito logico caratterizzato dall’avere un unico segnale come clock per tutti i suoi flip-flop;

• il clock è tipicamente generato a partire da un oscillatore periodico ad alta stabilità (in ogni caso, da un circuito integrato esterno alla FPGA).

• NOTA: la sincronia del circuito riguarda solo ingressi e uscite correlati al clock (per l’appunto indicati come “sincroni”) e non gli ingressi che agiscono indipendentemente dal clock (ad es.: clear) e che sono indicati appunto come “asincroni”.

S. Ricciarini – progettazione circuiti digitali

30

Macchina sincrona e setup timePer un circuito sincrono, la relazione che garantisce la non violazione del setup time è:

TCTOmax + Tcomb

max + Tskewmax + Tsetup < Tclock (ST)

• Il margine a disposizione del compilatore per non violare il setup time si riduce per frequenze operative (frequenze di clock) maggiori.

• TCTO (clock-to-out) è il ritardo di propagazione interno al flip-flop.• Tcomb (combinatorio) è il ritardo (attraverso un blocco puramente combinatorio) fra la

transizione sull'uscita data_out di un flip-flop e la conseguente transizione sull'ingresso data_indi un altro flip-flop. Dipende da:

• numero di celle combinatorie elementari della FPGA attraversate (ogni cella dà un ritardo ~ 0.1 ns);• lunghezza delle piste metalliche che connettono le celle e i flip-flop (dipende dalla disposizione

geometrica).• Tskew rappresenta lo sfasamento (skewness) fra i fronti di salita dei clock su flip-flop diversi.

• Dipende dalla lunghezza del cammino del segnale di clock dall'oscillatore ai due flip-flop.

S. Ricciarini – progettazione circuiti digitali

31

Macchina sincrona e hold timeIn genere il costruttore stesso della FPGA garantisce, per qualsiasi circuito sincrono realizzato nella FPGA, che la relazione seguente, che assicura la non violazione di hold time, sia sempre soddisfatta:

TCTOmin + Tcomb

min - Tskewmax > Thold (HT)

• il compilatore si prende carico della opportuna configurazione del circuito nella FPGA.

S. Ricciarini – progettazione circuiti digitali

32

Macchina sincrona: strutturaLa macchina sincrona può essere scomposta in due blocchi logici:

• un registro di stato (l’insieme di tutti i flip-flop della macchina, con il clock comune);• una look-up-table (LUT) (cioè un generico circuito combinatorio).

I flip-flop costituiscono in sostanza la memoria della macchina, immagazzinando l’informazione relativa allo stato della macchina fra due successivi impulsi di clock.

• La macchina sincrona è, per questo, anche chiamata macchina a stati.• Uno stato può durare N impulsi di clock.

• Qualsiasi macchina sincrona passa attraverso un certo numero di stati diversi, caratterizzati da una diversa configurazione di valori nei flip-flop.

• Il numero di stati possibiliè necessariamente finito:

• una macchina sincrona ènecessariamente ciclica.

• Il numero di flip-flop della macchinadà il numero di stati possibili:es. 3 flip-flop ⇒ fino a 8 stati diversi.

S. Ricciarini – progettazione circuiti digitali

33

Macchina sincrona e periodicitàUna macchina sincrona generica è non periodica:

• per ogni stato S, lo stato della macchina al colpo di clock successivo può dipendere non solo da S stesso, ma anche da un certo numero di ingressi di controllo (sincroni).

• In altri termini: la sequenza di stati e la loro durata (numero di impulsi di clock) non ènecessariamente prefissata.

• Gli ingressi di controllo sono pilotati da un blocco logico esterno (altra macchina sincrona), che può risiedere nella stessa FPGA o in un'altra FPGA ecc.

Un caso particolare è la macchina sincrona periodica.• Nessun ingresso di controllo.• Si può mostrare che è equivalente a

un contatore a N bit( 0→1, 1→2 ,..., 2N-1→0 ecc.)più una LUT.

• N stati di durata 1 impulso di clock.

S. Ricciarini – progettazione circuiti digitali

34

Macchine sincrone e asincroneRiassumendo: un tipico circuito logico, se possibile, è una macchina sincrona.

• Esempio pratico: una macchina sincrona, avviata da un impulso logico esterno (ad es. impulso di trigger da un rivelatore) esegue una sequenza di operazioni:

• lettura di un ADC e trasferimento del dato nella RAM (di un microprocessore);• incremento del numero di evento e suo trasferimento nella RAM;• attesa di un nuovo trigger;

generando sequenze sincrone su un certo numero di uscite di controllo verso ADC e processore.

Altrimenti: si progetta un circuito logico asincrono, composto cioè di diverse macchine sincrone che però non sono sincrone fra loro (che cioè usano clock diversi per i rispettivi flip-flop).

• Vedremo nella sezione “campionamento asincrono sequenziale” come interfacciare fra loro queste macchine.

• In altri termini: un circuito asincrono è un insieme di flip-flop che non usano tutti lo stesso segnale come clock.

S. Ricciarini – progettazione circuiti digitali

35

Macchine sincrone e blocchi logiciConviene scomporre circuiti sincroni complessi in blocchi logici opportuni, con una macchina principale più varie macchine secondarie specializzate.

• Le macchine sincrone elementari (registri, contatori) sono già codificate come macro.

Nel caso dell’esempio precedente:• una macchina secondaria dedicata a leggere l’ADC e immagazzinare il dato in un registro

temporaneo (registro: macro);• un’altra macchina secondaria che conta il numero di eventi (contatore: macro);• un’altra macchina secondaria dedicata a copiare il dato dal registro temporaneo o dal contatore

alla RAM;• una macchina principale che coordina e attiva le varie macchine secondarie quando necessario.

Tipicamente la stessa macchina secondaria (~ subroutine) viene attivata in momenti diversi del funzionamento della macchina principale:

• ad es. la scrittura nella RAM avviene due volte per ogni trigger e implica la stessa sequenza di controllo verso il processore.

S. Ricciarini – progettazione circuiti digitali

36

(Es. 3) Macchina sincrona in VHDLScriviamo il codice VHDL che descrive la macchina principale dell’esempio precedente.Abbiamo visto che una macchina sincrona è ben descrittascomponendola in due blocchi logici:

• un registro di stato (insieme di flip-flop);• una LUT (blocco puramente combinatorio).

-- di seguito: descrizione della sola macchina principalearchitecture arch of main is

signal synchro_trigg, adc_read_end, ram_write_end,adc_read_start, ram_write_start, ram_data_select: std_logic;

... -- altri segnali interni

type st_value is ( -- con questa notazione astratta il bus (gruppo di segnali) di statoviene rappresentato in maniera ben leggibile

nop, adc_read, ram_write1, ram_write2 -- la macchina che definisco in questo esempio ha 4 diversi stati;

); -- descrizione funzionale (astratta)

signal st_pres, st_next -- definisco 2 bus di stato di tipo st_value: st_value;

S. Ricciarini – progettazione circuiti digitali

37

(Es. 3) Macchina sincrona in VHDLbegin

process (reset, clock) -- primo blocco logico: è il registro di stato della macchina sincrona (insieme di flip-flop) [processo: descrizione funzionale]begin

if (reset = '1') then -- “reset” inviato agli ingressi “asincroni” clear o preset(indispensabile per avere uno stato di partenza definito, anche in una macchina sincrona: risolve il problema del transitorio all’accensione)

st_pres <= nop;elsif (clock'event and clock = '1') then

st_pres <= st_next;end if;

end process;

process (-- secondo blocco logico, puramente combinatorio: è la LUT della macchina sincrona, che definisce lo stato successivo e le uscite, in dipendenza dallo stato presente e dagli ingressi di controllo [processo: descrizione funzionale]

st_pres, -- qui va indicata la lista di sensibilità cioè l’insieme dei segnali che compaiono nelle condizioni (if, case, ecc.) all'interno del processo: in altri termini, stato presente e ingressi sincroni della macchina

synchro_trigg, adc_read_end, -- segnale di ritorno dalla macchina secondaria per la lettura dell’ADCram_write_end -- segnale di ritorno dalla macchina secondaria per la scrittura nella

RAM)

begin...

S. Ricciarini – progettazione circuiti digitali

38

(Es. 3) Macchina sincrona in VHDL...-- in alternativa all’uso di:if (“condizione 1”) then...elsif (“condizione N”) then...else...end ifè possibile usare:case “segnale” is when “valore 1” =>... when “valore 2” =>...when others =>...end case;

-- ATTENZIONE: con “if” si specificano le assegnazioni derivanti da un certo numero di condizioni che coinvolgono vari segnali;con “case” si specificano le assegnazioni di CIASCUNO dei possibili valori di un dato segnale (non è ammesso non includere nell’elenco dei “when” anche uno solo dei possibili valori del segnale).

case st_pres iswhen nop => -- No OPeration

case synchro_trigg is -- case innestato (sottocaso)when '1' => -- c’è un trigger!!st_next <= adc_read; -- passa allo stato successivoadc_read_start <= '1'; -- avvia la macchina secondaria per la lettura dell’ADCram_write_start <= '0';ram_data_select <= '0';

when '0' => -- ancora nessun triggerst_next <= nop; -- resta nello stato presente (nop)adc_read_start <= '0';ram_write_start <= '0';ram_data_select <= '0';

end case;...

S. Ricciarini – progettazione circuiti digitali

39

(Es. 3) Macchina sincrona in VHDL...

when adc_read =>case adc_read_end is when '1' => -- è terminata la lettura dell'ADC (comunicazione dalla macchina

secondaria per lettura ADC, esterna alla macchina che stiamo descrivendo)-- NOTA: il numero di cicli di clock in cui la macchina resta in un generico stato presente

dipende dal segnale di controllo (flessibilità)st_next <= ram_write1; -- passa allo stato successivoadc_read_start <= '0';ram_write_start <= '1'; -- avvia la macchina secondaria per la scrittura nella RAMram_data_select <= '0';

when '0' =>st_next <= adc_read; -- resta nello stato presente (adc_read)adc_read_start <= '0';ram_write_start <= '0';ram_data_select <= '0'; --*****

end case;...

-- Domanda: è consentito omettere un’assegnazione, ad esempio la riga indicata con --***** ?-- Risposta: sì, tenendo conto che la funzionalità della macchina, in genere, cambia.-- Domanda: come cambia il funzionamento della macchina?-- Risposta: mentre prima, nello stato adc_read, con l’ingresso adc_read_end a 0, l’uscita

ram_data_select era necessariamente 0, adesso nelle stesse condizioni, ram_data_select MANTIENE IL VALORE CHE AVEVA PRECEDENTEMENTE: tale valore, in generale, può essere 1 o 0 a seconda di quale era la condizione della macchina (stato e ingressi) al colpo di clock precedente.

S. Ricciarini – progettazione circuiti digitali

40

(Es. 3) Macchina sincrona in VHDL...

when ram_write1 =>case ram_write_end is when '1' => -- la macchina secondaria per scrittura RAM comunica di aver terminato

la scrittura nella RAMst_next <= ram_write2; -- passa allo stato successivoadc_read_start <= '0';ram_write_start <= '1'; -- avvia DI NUOVO la macchina secondaria per la scrittura

nella RAMram_data_select <= '1'; -- ad es. seleziona il dato di un contatore invece che il

dato dell'ADC per la scrittura nella RAMwhen '0' =>

st_next <= ram_write1; -- resta nello stato presente (ram_write1)adc_read_start <= '0';ram_write_start <= '0';ram_data_select <= '0';

end case;...

S. Ricciarini – progettazione circuiti digitali

41

(Es. 3) Macchina sincrona in VHDL...

when ram_write2 =>case ram_write_end is when '1' => -- la macchina secondaria per scrittura RAM comunica di aver terminato

la (SECONDA) scrittura nella RAMst_next <= nop; -- passa allo stato successivo (chiusura del ciclo)adc_read_start <= '0';ram_write_start <= '0';ram_data_select <= '0';

when '0' =>st_next <= ram_write2; -- resta nello stato presente (ram_write2)adc_read_start <= '0';ram_write_start <= '0';ram_data_select <= '1'; -- mantiene la selezione attiva (se necessario)

end case;end case;

end process; -- NOTA: non sono mai stati usati gli operatori AND, NOT ossia non è mai stata data una specifica descrizione strutturale

... -- altra logica: macchine secondarie, registri, ecc. (non descritti qui)

end arch;

S. Ricciarini – progettazione circuiti digitali

42

Upset ed errori logici

S. Ricciarini – progettazione circuiti digitali

43

Upset ed errori logiciUn circuito sincrono, se ben progettato, garantisce massima affidabilità contro la presenza di errori logici causati dalla violazione di setup o hold time

Cosa succederebbe se il setup o hold time di un generico flip-flop fosse violato per un certo fronte di salita del clock?

• Può accadere anche in una macchina sincrona, se le condizioni richieste non sono soddisfatte (ad es.: frequenza clock troppo elevata).

• L'uscita del flip-flop (bistabile) si viene a trovare in uno stato metastabile, cioè ad un valore di tensione intermedio fra lo stato 0 (LVTTL: Vout < 0.8 V) e lo stato 1 (LVTTL: Vout > 2.0 V).

• Il flip-flop decade dallo stato metastabile in tempi brevi (~ 1 ns per FPGA tipiche) nello stato 0 o nello stato 1 (stati stabili), in maniera sostanzialmente imprevedibile.

• Per quel ciclo di clock lo stato del flip-flop può non essere corretto, cioè può essere avvenuta un’inversione (upset) del valore effettivo rispetto al valore logicamente atteso.

• NOTA: un upset può essere prodotto anche da altre cause, ad esempio dalle correnti parassite indotte nel flip-flop da una particella altamente ionizzante (ad es. un raggio cosmico).

S. Ricciarini – progettazione circuiti digitali

44

Upset ed errori logici• Qual’è la conseguenza pratica dell’upset?

• In assenza di contromisure (specificate ad esempio nella sezione “campionamento asincrono sequenziale”), l'upset nei successivi cicli di clock si propaga ad altri flip-flop nel circuito, modificandone lo stato logico in maniera scorrelata dal funzionamento atteso e in genere imprevedibile (errore logico).

• Come si rivela l'errore logico?• Meccanismi di time-out (ad es. watchdog o time-out di esecuzione di un comando) in grado di

rivelare se il circuito è rimasto bloccato in un qualche stato logico.• Controllo di consistenza delle sequenze di bit in uscita dalla macchina (ad es. Cyclic

Redundancy Check o controlli sul formato dei dati).

• Come si riporta il circuito in una configurazione corretta dopo aver rivelato la presenza di upset?

• Tipicamente con un segnale di reset asincrono (ad es. un pulsante di reset) inviato a tutti i flip-flop attraverso uno degli ingressi “asincroni” (clear o preset), che riporta il flip-flop nello stato iniziale desiderato: 0 (clear) o 1 (preset).

• NOTA: si ricorda che gli ingressi “asincroni” clear e preset sono caratterizzati dall’agire sullo stato del flip-flop indipendentemente dal clock.

S. Ricciarini – progettazione circuiti digitali

45

Campionamento asincrono

S. Ricciarini – progettazione circuiti digitali

46

Campionamento asincronoVediamo un caso pratico di campionamento asincrono.

• Abbiamo detto che non sempre è possibile realizzare in una FPGA un circuito logico completamente sincrono (unico clock per tutti i flip-flop).

• Ad esempio, una parte del circuito riceve il clock da un microprocessore; l’altra parte lo riceve da un ADC, con frequenza diversa o uguale (solo nominalmente, visto che si tratta di oggetti fisicamente distinti).

• In tal caso l’uscita del flip-flop FF_a, che usa un clock clock_a, è inviata ad un ingresso “sincrono” del flip-flop FF_b, che usa un altro clock clock_b.

• NOTA: invece del termine ingresso “sincrono”, sarebbe più appropriato dire: ingresso “che dovrebbe essere sincrono”.

• L’uscita del flip-flop A è quindi un segnale asincrono rispetto a FF_b (o anche rispetto a clock_b), anche se viene inviato ad un ingresso (che dovrebbe essere) “sincrono” del flip-flop B.

• In altri termini: il flip-flop B sta effettuando un campionamento asincrono.• ATTENZIONE: questa fenomenologia non ha nessuna relazione con gli ingressi “asincroni”

(clear e preset) del flip-flop.

S. Ricciarini – progettazione circuiti digitali

47

Campionamento asincrono ed upsetPiù in generale, si parla di campionamento asincrono per un flip-flop nei due seguenti casi:

• la relazione di fase fra il segnale inviato all’ingresso “sincrono” del flip-flop e il clock non èfissa (in generale non è nemmeno nota a priori).

• in questo caso non è possibile garantire la non violazione del setup o hold time.• la relazione di fase è fissa (il segnale è sincrono con il clock) ma non sono soddisfatte le

condizioni (ST) e (HT) per il corretto campionamento sincrono.

Per il campionamento asincrono non è possibile evitare la presenza di upset.

E’ però possibile evitare l’insorgere di errori logici, come vedremo.

La situazione è infatti fondamentalmente diversa a seconda che ci sia il campionamento asincrono di un segnale combinatorio (uscita di blocco combinatorio) o di un segnale sequenziale (uscita diretta di flip-flop).

• Il campionamento asincrono di un segnale sequenziale introduce upset in maniera casuale ma prevedibile e controllabile.

S. Ricciarini – progettazione circuiti digitali

48

Campionamento asincrono combinatorio• La linea ready_a (combinatoria) è sincrona con clock_a e indica quando la macchina A è pronta.• La linea ready_b è sincrona con clock_b e avvia una sequenza interna alla macchina B.• Sta avvenendo il campionamento asincrono combinatorio di ready_a.• Un glitch (impulso spurio) su ready_a (inevitabile sui segnali combinatori) comporta in genere un

errore logico nella macchina B, in quanto ready_b potrebbe cambiare stato per upset e la macchina B partire senza che la macchina A abbia veramente comunicato di essere pronta.

S. Ricciarini – progettazione circuiti digitali

49

Campionamento asincrono sequenziale

Il campionamento asincrono sequenzialenon comporta errori logici.

• ready_b può ancora avere un upset ma in questo caso ciò non comporta un errore logico nella macchina B, che parte solo dopo che la macchina A ha comunicato di essere pronta.

• ready_b replica tutti e soli i cambiamenti di stato di ready_a, a meno di un'incertezza (jitter) nel ritardo, che può variare di volta in volta fra circa 0 e Tclock_b a seconda della fase istantanea fra i due clock.

• per indicare il ritardo fra i due segnali ready_ae ready_b:

• si considera il ritardo medio, pari a circa 0.5 ·Tclock_b ;

• si rappresenta il jitter come un'incertezza uniformemente distribuita con ampiezza massima di circa ± 0.5 · Tclock_b .

Inserendo un flip-flop si ha un segnale ready_a per definizione privo di glitch.

S. Ricciarini – progettazione circuiti digitali