progettazione digitale e VHDL...

85
Sergio Ricciarini ~ IFAC (CNR) - Firenze Corso di Elettronica Generale I Laurea Magistrale in Scienze Fisiche e Astrofisiche Università di Firenze 2019-11-04 Progettazione di circuiti digitali e linguaggio VHDL 1

Transcript of progettazione digitale e VHDL...

  • Sergio Ricciarini~

    IFAC (CNR) - Firenze

    Corso di Elettronica Generale I

    Laurea Magistrale in Scienze Fisiche e Astrofisiche

    Università di Firenze

    2019-11-04

    Progettazione di circuiti digitali e linguaggio VHDL

    1

  • 2

    Sommario

    Circuiti digitali integrati.

    Descrizione di un circuito digitale in VHDL.

    Sincronia, asincronia, tempi di propagazione e transizione.

    Struttura della macchina sincrona e realizzazione in VHDL.

    Compilazione e verifica del progetto.

    Upset da violazione di setup/hold time; asincronia e risincronizzazione.

    Upset da perturbazioni esterne.

    Per la bibliografia è conveniente cercare risorse in rete, in funzione delle esigenze.• Queste dispense non si basano su alcun libro specifico, ma raccolgono e armonizzano

    informazioni provenienti da innumerevoli fonti, oltre che da esperienza personale.

    S. Ricciarini – progettazione circuiti digitali

  • 3

    Circuiti digitali integrati.

    S. Ricciarini – progettazione circuiti digitali

  • 4

    Circuito digitale integrato Un circuito digitale integrato è un dispositivo

    elettronico ("chip") che contiene al suo interno un insieme di celle logiche opportunamente interconnesse in modo da realizzare la funzionalità desiderata.

    • Un circuito digitale integrato può anche contenere una parte analogica (ad es. ADC).

    Ogni cella logica è formata da una combinazione di elementi logici di base:flip-flop, porte AND e porte NOT.

    Un primo tipo di circuito è l'ASIC: Application

    Specific Integrated Circuit (Analog Device, Texas...).

    • Interconnessioni fissate dal produttore al momento della fabbricazione del chip, in base all’applicazione

    richiesta.

    • Il circuito è programmato una volta per tutte durante la fabbricazione.

    S. Ricciarini – progettazione circuiti digitali

  • 5

    Circuito digitale integrato Un secondo tipo di circuito è la FPGA:

    Field Programmable Gate Array (Intel-Altera, Xilinx, MicroSemi-Actel...)

    • Interconnessioni programmabili dal progettista in base al campo ("field") di applicazione.

    • Rete di piste e celle fissata dal produttore, con interruttori che collegano/scollegano i tratti di pista adiacenti secondo la scelta del progettista.

    • La programmazione del chip avviene attraverso i piedini esterni:

    • direttamente a bordo scheda;

    • oppure (soluzione meno comoda) inserendolo in speciali dispositivi “programmatori” prima del montaggio sul circuito stampato (PCB, "Printed Circuit Board" o brevemente "scheda").

    • Dopo la programmazione una parte della FPGA risulta inutilizzata.

    S. Ricciarini – progettazione circuiti digitali

  • 6

    "Interruttori" nella FPGA Possono essere non-riprogrammabili o

    riprogrammabili.

    Non-riprogrammabili: ad esempio, connessioni ad antifusibile (Actel).

    • Alla fabbricazione, l'antifusibile è un interruttore aperto.

    • Una volta "bruciato", la connessione è permanente e quindi non-volatile (cioè si mantiene dopo lo spengimento della FPGA).

    Riprogrammabili: ad esempio, connessioni realizzate con transistor NMOS.• Lo stato degli interruttori NMOS è

    memorizzato in una porzione della FPGA che funge da interfaccia di programmazione (quindi con struttura fissata, come una ASIC).

    • Lo stato può essere riprogrammato in seguito.

    • La memoria dello stato può essere volatile(es. su RAM nell’interfaccia di programmazione) o non-volatile (es. su E2PROM esterna o interna alla FPGA).

    S. Ricciarini – progettazione circuiti digitali

  • 7

    Cella logica di una FPGA Cella logica della FPGA: struttura di porte logiche e flip-flop predefinita dal

    produttore.

    Esempi di celle logiche semplici.(a) Cella combinatoria: solo logica combinatoria: combinazione di porte AND e NOT;

    (b) Cella sequenziale: un flip-flop (registro a 1 bit) e logica combinatoria.

    S. Ricciarini – progettazione circuiti digitali

  • 8

    Cella logica di una FPGA Esempio di cella logica complessa: di tipo sequenziale, integra una parte combinatoria più

    complessa. Progettata per maggiore versatilità, impiega più elementi circuitali delle cellesemplici.

    S. Ricciarini – progettazione circuiti digitali

  • 9

    Descrizione di un circuito digitale in VHDL

    S. Ricciarini – progettazione circuiti digitali

  • 10

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

    Uno dei linguaggi per la descrizione funzionale di qualsiasi circuito digitale (FPGA, ASIC...), indicati genericamente come HDL.

    Il VHDL è largamente diffuso a livello mondiale (standard IEEE).• Un altro linguaggio di analoga diffusione è il Verilog HDL.

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

    Un compilatore (software installato su PC) traduce la struttura HDL astratta in una struttura specifica da poter riprodurre in un dato dispositivo (ASIC o FPGA).

    Il linguaggio HDL permette di realizzare un insieme di descrizioni funzionali e strutturali.• Invece, un disegno schematico rappresenta necessariamente una specifica struttura.

    S. Ricciarini – progettazione circuiti digitali

  • -- I commenti sono preceduti da "--": il compilatore li riconosce e li ignora.

    -- Questo è un esempio di progetto elementare (solo combinatorio per semplicità).

    -- In blu sono evidenziate alcune delle parole riservate per la codifica del linguaggio VHDL.

    -- In rosso sono evidenziati i nomi di oggetti che devono essere scelti dal progettista (in

    -- modo da essere immediatamente compresi nella rilettura del codice).

    -- Gli enunciati terminano con ";" e possono esser scritti su più righe.

    -- Il compilatore non tiene conto di MAIUSCOLE e minuscole.

    -- E' necessario indentare e spaziare ordinatamente le sezioni di codice (ad esempio

    -- nel modo utilizzato dispense, o utilizzando "template" di scrittura) per massimizzare

    -- la leggibilità del codice.

    library IEEE;

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

    entity ex1 is -- Entità = interfaccia esterna del circuito; "ex1" è il nome,

    -- definito dal progettista.

    port ( -- Elenco dei segnali esterni di ex1.

    input1, input2: in std_logic; -- std_logic (tipo del segnale): due valori logici possibili. output: out std_logic

    );

    end ex1;

    11

    (Es. 1) Semplice progetto VHDL

    S. Ricciarini – progettazione circuiti digitali

  • 12

    (Es. 1a) Descrizione strutturale in VHDL

    architecture struct1 of ex1 is -- Architettura = struttura/funzionalità interna.

    -- Struct1 è il nome scelto dal progettista.

    -- Prima di begin è necessario inserire le dichiarazioni (elenco dei segnali interni,

    -- elenco dei componenti interni, ecc.).

    signal int1 : std_logic; -- Un solo segnale interno in questo esempio.

    begin -- Questa descrizione è strutturale (viene indicata una specifica combinazione di porte

    -- logiche).

    int1

  • 13

    (Es. 1b) Descrizione funzionale in VHDL-- Descrizione funzionale equivalente alla precedente struct1: architettura behav1 da compilare

    -- invece che struct1 (per la stessa entità ex1).

    architecture behav1 of ex1 is -- Architettura = struttura/funzionalità interna.

    -- Behav1 è il nome scelto dal progettista.

    -- Non ci sono segnali interni!

    begin

    process (input1, input2) -- "Processo" = descrizione funzionale: non indica una

    -- specifica combinazione di NOT e AND fra quelle equivalenti (ne sono riportate ad esempio

    -- due nelle figure), ma piuttosto indica astrattamente la funzione desiderata, cioè le

    -- combinazioni dei valori in ingresso per cui l'uscita è 1.

    -- La lista di sensibilità ("sensitivity list"), es. (input1, input2), contiene i segnaliche vengono valutati nelle condizioni "if...end if" e simili che descrivono la funzione, contiene cioè gli ingressi del circuito.

    begin

    if input1 = '1' then -- notare uso di "="

    -- nella condizione

    output

  • 14

    Funzione o struttura? In una descrizione strutturale (disegno schematico o codice HDL strutturale) viene

    specificata una sola struttura logica interna del circuito, fra le tante equivalenti che realizzano la data funzione.

    • La descrizione strutturale diventa utile quando ci sono esigenze molto particolari in termini di numero di celle utilizzate per realizzare il circuito, ritardi fra ingressi e uscite del circuito ecc.

    La descrizione funzionale ("behavioural"), in quanto astratta, evita di specificare la struttura logica interna.

    • Codice più sintetico e intuitivo: comprensione più immediata, minore possibilità di introdurre errori umani nel codice, risparmio di tempo durante la codifica del circuito e le successive modifiche/correzioni.

    • Diventa in pratica indispensabile per circuiti di media o alta complessità (> 100 flip-flop).

    Relazione funzione/struttura analoga a relazione fra linguaggio di alto livello (C, FORTRAN ecc.) e linguaggio macchina per un processore.

    • Entrambi descrivono sequenze di operazioni: linguaggio C ecc. lo fa in modo astratto, mentre il linguaggio macchina individua una specifica sequenza fra tutte quelle equivalenti (cioè con gli stessi effetti).

    S. Ricciarini – progettazione circuiti digitali

  • 15

    Progettare un generico circuito logico Un generico circuito logico (o circuito sequenziale o macchina logica) è composto di un

    insieme di flip-flop e di una rete combinatoria (combinazione di porte NOT e AND).

    • I flip-flop memorizzano lo "stato logico" della macchina.

    • La rete combinatoria definisce, con la propria struttura, la sequenza degli stati del circuito.

    S. Ricciarini – progettazione circuiti digitali

  • Per comodità pratica il progettista suddivide il circuito logico in un certo numero di blocchilogici (detti anche componenti) organizzati in maniera gerarchica.

    • Si noti l'analogia con la routine (funzione, metodo...) nella programmazione di un processore.

    • Conviene definire la gerarchia in modo da poter ripetere più volte nel progetto lo stessocomponente (ad es. C in figura, che può essere un contatore a N bit), con ovvi vantaggi in termini di comprensione del codice, affidabilità e velocità di codifica.

    16

    Progettare un generico circuito logico

    S. Ricciarini – progettazione circuiti digitali

  • -- Architettura "arch" gerarchica a blocchi logici dell'entità "ex2" (contiene un solo componente interno "component1").

    architecture arch of ex2 is

    -- Segnali interni.

    signal in1_and_in2 : std_logic;

    -- Componenti interni di questa architettura.

    component component1 -- Componente = blocco logico. Il nome e l'interfaccia esterna del componente devono corrispondere a un'entità decritta altrove. L'architettura del componente è descritta altrove.

    port (input1, input2: in std_logic;

    output: out std_logic

    );

    end component;

    begin

    in1_and_in2

  • 18

    (Es. 2) Descrizione del componente-- Tipicamente il componente è descritto in un file diverso da quello del circuito

    -- in cui viene chiamato. In alcuni compilatori (come Quartus) ciò è obbligatorio.

    library IEEE;

    use IEEE.std_logic_1164.all;

    entity component1 is -- L'interfaccia deve essere coerente con quella dichiarata nelle

    -- chiamate.

    port (

    input1, input2: in std_logic;

    output: out std_logic

    );

    end component1;

    architecture struct1 of component1 is -- In questo esempio, il nome e la descrizione-- (strutturale) dell'architettura sono gli stessi usati nell'esempio 1a (ma si noti il-- diverso formalismo permesso dalla sintassi del VHDL, anche per indicare una stessa-- struttura).

    begin

    output

  • 19

    Vantaggi della descrizione gerarchica Lo stesso componente può essere inserito in N copie (cioè chiamato N volte) in uno stesso

    circuito logico.• Ogni copia è identificata da una diversa etichetta ("label") scelta dal progettista:

    component1_inst1: component1 port map (…); -- prima chiamata

    component1_inst2: component1 port map (…); -- seconda chiamata

    Per modificare l'architettura (struttura/funzionalità interna) di tutte le copie è sufficientecambiare una sola volta la descrizione dell'architettura del componente.

    È possibile anche definire diverse architetture per una stessa entità (interfaccia) e poi scegliere quella da utilizzare in compilazione per ciascuna chiamata o gruppo di chiamate, quando si dichiara il componente nell'architettura che lo contiene.Ad esempio:

    component … end component;

    for component1_inst1, component1_inst2 : component1 use entity work.component1(arch1);

    for component1_inst3 : component1 use entity work.component1(arch2);

    oppure:

    component … end component;

    for all: component1 use entity work.component1(arch1);

    S. Ricciarini – progettazione circuiti digitali

  • 20

    Come descrivere un'architettura in VHDL Riepilogando, un'architettura in VHDL può contenere 3 diverse tipologie descrittive

    (inserite fra begin e end):

    architecture arch of circuit is

    begin

    ........................ in3_pin,

    output => out_pin

    );

    Seconda tipologia: assegnazione (descrizione strutturale), come in esempio 1a.

    output

  • 21

    Come descrivere un'architettura in VHDL• Terza tipologia: processo (descrizione funzionale), come in esempio 1b.

    process (input1, input2) -- La lista di sensibilità (“sensitivity list”), contiene i

    -- segnali che vengono valutati nelle condizioni “if...end if” e simili che descrivono la

    -- funzione, ossia gli ingressi del componente.

    -- Membri di sinistra nelle assegnazioni: uscite del componente.

    -- La sintassi in begin...end contiene l'architettura del componente.

    begin -- Descrizione funzionale: non indica una specifica combinazione di NOT e AND

    -- fra quelle equivalenti, ma piuttosto indica astrattamente la funzione desiderata, cioè

    -- le combinazioni di valori dei segnali valutati per cui l'uscita è 1 (e per cui è 0).

    if input1 = '1' then

    output

  • All'interno della codifica del processo (fra "begin" e "end process"), è permesso avere piùdi un'assegnazione per ciascun segnale di uscita. In tal caso, prevale l'ultimaassegnazione nell'ordine di scrittura, fra quelle al momento verificate dalla combinazione di segnali di ingresso.Il codice dell'es. 1b può assumere la forma funzionalmente equivalente:

    process (input1, input2)

    begin

    output

  • 23

    Macrofunzioni ("macro") I componenti più comuni possono in genere essere ottenuti senza codificarli a mano (in

    HDL o disegno schematico), utilizzando un generatore di macrofunzioni, di solito accessibile tramite interfaccia grafica nell'ambiente software di sviluppo (nell'ambiente Quartus di Intel-Altera: MegaWizard Plug-in Manager).

    • Oggetti semplici (ad es. contatori, registri, multiplexer, decodificatori) o complessi (ad es. FIFO, CPU).

    • Configurabili dal progettista: numero di bit, presenza di ingressi asincroni preset e/o clear, presenza di ingressi sincroni addizionali (enable, load, reset ecc.)

    Ogni macrofunzione è un componente che può essere incluso nella struttura del progetto come i componenti descritti a mano dal progettista, con la sintassi "port map" vista prima.

    Vantaggi.

    • Nel caso di componenti complessi (es. CPU) si ha un risparmio di tempo notevole (servono pochi secondi per generare e configurare una macro di tipo CPU tramite interfaccia grafica).

    Svantaggi.

    • L'architettura della macrofunzione non è descritta in VHDL, ma con codifica propria dell'ambiente software di sviluppo, quindi non è in genere utilizzabile in un diverso ambiente software. E' però in genere possibile creare automaticamente il codice HDL funzionale equivalente.

    S. Ricciarini – progettazione circuiti digitali

  • 24

    Concetto di "concorrenza" All'interno del codice HDL, l'ordine in cui vengono scritti chiamate, assegnazioni e

    processi non ha effetto sulla struttura del circuito logico.

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

    • Il disegno schematico è una descrizione “bidimensionale”.

    L'elenco di descrizioni nell'architettura HDL non ha nulla a che vedere con l'elenco di istruzioni, da eseguire ordinatamente nel tempo, codificate in un programma scritto in linguaggio di alto livello per processori (ad es. linguaggio C).

    Tutte le descrizioni elencate nel codice HDL sono concorrenti simultaneamente a definirela funzionalità dell'intero circuito, in quanto rappresentano parti del circuito interconnesseelettricamente fra loro.

    • Consideriamo un processo: la variazione di un segnale nella lista di sensibilità (cioè un ingressodel blocco logico) implica in generale la variazione delle uscite del processo e quindi degliingressi di altri componenti del circuito, indipendentemente dal punto del codice in cui sonodescritti.

    Viceversa, le istruzioni codificate in un programma C sono (in genere) attive in successione nel tempo (il processore esegue un'istruzione alla volta).

    S. Ricciarini – progettazione circuiti digitali

  • 25

    Bus in VHDL come vettori Un "bus" è definito come un insieme di linee digitali (è un vettore di bit).

    • Il simbolo formale più diffuso per un bus a N bit è:

    • Le singole linee sono identificate da un indice con N valori in un campo intero arbitrario.Per evitare confusione conviene sempre scegliere il campo 0 .. N-1 ed elencare sempre le linee per indice decrescente nel codice, seguendo la stessa notazione posizionale dei numeri binari!

    La rappresentazione strutturale del bus in VHDL è intuitiva. Ad esempio:signal bus_struct : std_logic_vector (7 downto 0); -- bus a 8 bit, 256 valori!

    • Le linee del bus possono essere trattate singolarmente o a gruppi.

    Nel codice possiamo trovare assegnazioni per gruppi di linee (notare l'uso dei doppi apici):bus_struct(5 downto 2)

  • 26

    Bus in VHDL come interi Una rappresentazione astratta del bus si ottiene con un numero intero in un campo che

    copre tutte le 2N combinazioni di valori del bus.signal bus_funct is: integer range 1023 downto 0; -- 1024 valori

    -- Necessariamente bus a 10 bit, infatti 210 = 1024

    • Il compilatore calcola quante linee (bit) sono necessarie a rappresentare il bus nella struttura.

    • DOMANDA: quante linee servono per rappresentare il bus seguente?

    signal bus_funct_test is: integer range 16 downto 0;

    • Il codice è più sintetico e intuitivo, rinunciando a specificare le singole linee del bus.

    • Possiamo quindi trovare l'assegnazione (notare l'assenza di apici per il valore intero):bus_funct

  • 27

    Diagramma logico temporale

    S. Ricciarini – progettazione circuiti digitali

    Rappresenta l'andamento temporale dei segnali logici, ossie delle loro transizioni.

    L'asse del tempo non è rappresentato (implicito).

    L'approssimazione con cui viene rappresentato l'andamento temporale dei segnali nel diagramma varia in funzione dello scopo della rappresentazione.

    In prima approssimazione, si possono rappresentare le transizioni come istantanee e quindi i rispettivi fronti come linee verticali.

    E' possibile rappresentare con un singolo diagramma l'andamento temporale di un bus piuttosto che un singolo segnale. I valori possono essere rappresentati mediante numeri (binari, esadecimali ecc.) o in modo astratto.

  • 28

    Sincronia, asincronia, tempi di propagazione e transizione.

    S. Ricciarini – progettazione circuiti digitali

  • Come far avvenire le sequenze di operazioni in un circuito logico in modo che le transizioni logiche avvengano in modo sincrono in tutto il circuito?

    Serve un segnale dato da un "orologio" ("clock"), che viene utilizzato per sincronizzare il funzionamento di tutti i flip-flop del circuito.• Il segnale clock viene inviato agli ingressi dedicati (ingressi clock) di tutti i flip-flop.

    • In questo modo viene creato un circuito sincrono o macchina sincrona.

    Quale forma d'onda è preferibile per il segnale clock?• E' chiaro che una forma d'onda periodica (periodo Tck) permette di controllare in modo

    semplice l'intervallo di tempo T fra due operazioni:

    T = N * Tckcon N numero di cicli di clock fra le due operazioni.

    • Come si genera tale forma d'onda? Alcuni esempi.• Primario: un oscillatore periodico ad alta stabilità (circuito integrato).

    • Secondario: il flip-flop i-esimo di un contatore agisce come divisore di frequenza (per 2i+1).

    • Secondario: un "anello ad aggancio di fase" ("phase-locked loop", PLL), circuito analogico, agisce come moltiplicatore di frequenza. 29

    Sincronia e clock

    S. Ricciarini – progettazione circuiti digitali

  • Il caso più generale di circuito logico è quello di uncircuito asincrono, composto cioè di due o piùmacchine sincrone che sono asincrone fra loro,in quanto usano segnali di clock fisicamente distinti.

    Tipici casi pratici di circuito asincrono:• Un circuito che usa due oscillatori di diversa frequenza.

    • Un circuito che usa due oscillatori fisicamente distinti confrequenze nominalmente uguali: infatti, per quanto strette siano le tolleranze di fabbricazione di diversi esemplari dello stesso modello di oscillatore, le frequenze reali non possono essere perfettamente uguali.

    In un circuito asincrono la fase fra i diversi clock asincroni è in genere continuamente variabile.

    30

    Circuito asincrono

    S. Ricciarini – progettazione circuiti digitali

  • 31

    Un caso particolare di circuito asincrono con fase fissata fra i due clock si ottiene con un clock primario e uno secondario derivato da esso (divisione o moltiplicazione di frequenza): il periodo di uno è multiplo dell'altro.

    • Dal punto di vista funzionale, è equivalente utilizzare un solo clock e abilitare il blocco di flip-flop più lenti mediante segnali di enable ripetuti con il periodo desiderato.

    • Dal punto di vista fisico, il clock più lento compie un numero inferiore di transizioni, con risparmio di energia.

    Circuito asincrono

    S. Ricciarini – progettazione circuiti digitali

  • 32

    Flip-flop: ingressi "sincroni" e "asincroni"

    S. Ricciarini – progettazione circuiti digitali

    Ingressi "sincroni".

    • Internamente: hanno effetto sull'uscita solo in corrispondenza del fronte di salita("rising edge") di clock.

    • Setup time e hold time definiscono l'intervallo temporale nell'intorno del fronte di salita del clock, in cui questi ingressi devono essere stabili per non rischiare di introdurre in uscita un rovesciamento o "upset" (caricamento del valore "rovesciato" cioè sbagliato).

    • Esternamente: possono essere pilotati da linee sincrone (che variano cioè con lo stesso segnale di clock del flip-flop) o asincrone.

    Ingressi "asincroni".

    • Internamente: hanno effettosull'uscita immediatamente e indipendentemente dal clock.

    • Esternamente: possono esserepilotati da linee sincrone o

    asincrone.

  • "Glitch": impulso spurio fisico su di una linea, cioè non voluto logicamente (e imprevedibile). Può avvenire per vari motivi, ad es.:

    • è presente interferenza elettromagnetica esterna sulla linea;

    • la linea è l'uscita di una porta logica (ad es. AND): quando gli ingressicommutano fra due configurazioni per cui l'uscita non cambia (ad es.da 01 a 10), c'è sempre un glitch, dato che la commutazionenon è mai esattamente simultanea.

    Un glitch sull'ingresso clock di un flip-flop comporta in genere un ciclo di clock spurio(cioè non voluto logicamente e imprevedibile).

    Il segnale di clock non può avere glitch!

    • In particolare, l'uscita di una porta logica non può essere usata come clock!

    33

    Requisiti dell'ingresso dedicato clock

    S. Ricciarini – progettazione circuiti digitali

  • Un glitch su un ingresso asincrono del flip-flop comporta in genere un'azione spuria (cioè non voluta logicamente e imprevedibile) di impostazione a 1 (preset) o 0 (clear).

    I segnali usati per pilotare gli ingressi asincroni dei flip-flop non possono avere glitch!

    • In particolare, l'uscita di una porta logica non può essere usata per pilotare un ingresso asincrono!

    Quali segnali possono quindi essere usati come clock o ingressi asincroni dei flip-flop?• Le uscite dei flip-flop, dato che non hanno glitch per costruzione.

    Attenzione: non ha senso pilotare l'ingresso asincrono (preset/clear) di un flip-flop con un segnale sincrono (inclusa una funzione dell'uscita del flip-flop stesso).

    • L'uscita del flip-flop commuterebbe prima in modo sincrono e poco dopo in modo asincrono: questa seconda commutazione non deve avvenire durante l'hold time, altrimenti si può avere upset.

    • Si introdurrebbe un ulteriore effetto (anomalo) di temporizzazione di cui il compilatore deve tener conto e per il cui controllo il tipico compilatore è inadeguato.

    • Lo stesso comportamento funzionale si ottiene utilizzando gli ingressi sincroni, spostando la seconda commutazione al clock successivo.

    Ha invece senso pilotare l'ingresso asincrono del flip-flop (1) con l'uscita di un flip-flop (2) asincrono rispetto (1). 34

    Requisiti degli ingressi asincroni

    S. Ricciarini – progettazione circuiti digitali

  • 35

    Requisiti degli ingressi sincroni Se un ingresso sincrono subisce una transizione o un glitch durante il setup time o hold

    time (si dice che si ha una "violazione del setup/hold time"), c'è una probabilità non nullache il flip-flop carichi in uscita il valore sbagliato (upset).

    • Quindi, in una macchina logica reale (FPGA o ASIC), il valore caricato in uscita su ciascun flip-flop non dipende soltanto dalla struttura logica, ma anche dalle tempi di propagazione dei segnali.

    • La corretta funzionalità del circuito dipende quindi non solo dall'aver realizzato una struttura logica corretta, ma anche dall'aver tenuto conto delle temporizzazioni e delle loro possibili variazioni.

    I segnali usati per pilotare gli ingressi sincroni possono avere glitch, ammesso che non avvengano durante il setup o hold time.

    S. Ricciarini – progettazione circuiti digitali

  • 36

    Tempi di propagazione

    S. Ricciarini – progettazione circuiti digitali

    I tempi di propagazione dei segnali sono dovuti alla velocità finita dei segnali.

    I tempi di propagazione sono i ritardi fra la transizione in un punto fisico di una linea facente parte del circuito logico e la transizione logicamente conseguente in un altro punto fisico.

    • Per l'esattezza, la definizione di tempo di propagazioneconsidera l'istante di attraversamento del livello postoal 50% fra VOL e VOH (in pratica, posto a metà strada frail livello basso e alto in uscita).

  • 37

    Tempi di propagazione I tempi di propagazione dei segnali dipendono da:

    • tecnologia del dispositivo (circuito integrato), ossia caratteristiche fisiche delle celle logiche (ad es. dal tipo di transistor utilizzato, in particolare capacità d'ingresso);

    • struttura reale del circuito: struttura logico/fisica realizzata (ad es. lunghezza delle interconnessioni fra celle, numero di porte logiche in cascata fra due flip-flop).

    Essi variano con:• tolleranze di fabbricazione: ogni singolo dispositivo di una serie ha caratteristiche che fluttuano

    in un intorno delle specifiche nominali della serie;

    • invecchiamento (“aging”) del dispositivo: da normale usura (passaggio di corrente, cicli termici fra accensioni e spengimenti...) o da radiazione assorbita;

    • parametri operativi: tensione di alimentazione e temperatura interna T del semiconduttore ("junction temperature", sempre maggiore della T ambiente).

    S. Ricciarini – progettazione circuiti digitali

    Actel ProASIC3E

  • Come si è visto, i tempi di transizione (durata della salita/discesa del segnale) contribuiscono ai tempi di propagazione dei segnali.

    • Dato che in genere sono trascurabili rispetto agli altri contributi ai tempi di propagazione, per brevità nei diagrammi logici temporali i fronti di salita/discesa sono disegnati in modo approssimato, come istantanei (fronti perfettamente verticali).

    Il tempo di transizione su una linea è caratterizzato dalla costante di tempo (RC) data da capacità di carico C e resistenza R della linea.

    • La capacità di carico aumenta linearmente col numero di porte o flip-flop reali pilotati da una singola linea (cioè con il fan-out). Nota: "fan" = ventaglio.

    • Il compilatore limita il fan-out (tipicamente a ~30) tramite la duplicazione (ridondanza) della porta o flip-flop in questione.

    • Questo permette di limitarei tempi di propagazione deisegnali e soddisfare lecondizioni (ST) e (HT) visteprima, su setup time e hold time.

    38

    Tempi di transizione (salita/discesa)

    S. Ricciarini – progettazione circuiti digitali

  • 39

    Macchina sincrona Come si è detto, un circuito sincrono o macchina sincrona è un circuito logico

    caratterizzato dall'avere un unico segnale periodico di clock per tutti i flip-flop.

    • “Unico segnale” significa che la frequenza di ripetizione del segnale di clock è perfettamenteuguale su ogni flip-flop.

    • Sono presenti inevitabili sfasamenti legati ai diversi tempi di propagazione ai vari flip-flop a partire dal punto di origine del segnale (ad es. oscillatore periodico ad alta stabilità).

    • Se questo circuito è diviso in blocchi logici, ciascuno di essi è una macchina sincrona e i blocchisono sincroni fra loro.

    S. Ricciarini – progettazione circuiti digitali

  • Per una macchina sincrona, la seguente condizione garantisce che non avvenga mai la violazione di setup time per un dato ingresso sincrono di un flip-flop (j):

    TCTO(i)max + Tcomb(i)

    max + Tskew(i-j)max + Tsetup

    max < Tclockmin (ST)

    per ogni flip-flop (i) che contribuisce a pilotare quell'ingresso.• L'indice "max/min" si riferisce alla variabilità dei tempi di propagazione (tolleranze, parametri

    operativi, invecchiamento). Tclock è il periodo del clock.

    Tcomb(i) è il ritardo (attraverso un blocco puramente combinatorio) fra la transizionesull'uscita data_out_i del flip-flop (i) e la conseguente transizione sull'ingresso data_in_jdel flip-flop (j). Dipende da:

    • numero di celle combinatorie attraversate (tipicamente ognuna dà un ritardo < 0.1 ns);

    • lunghezza delle piste metalliche attraversate.

    40

    Macchina sincrona e "setup time"

    S. Ricciarini – progettazione circuiti digitali

  • 41

    Macchina sincrona e "setup time" TCTO(i) (CTO: "clock-to-out") è il ritardo di propagazione interno al flip-flop (i).

    Tskew(i-j) = trising(i) - trising(j) rappresenta lo sfasamento ("skewness") fra i fronti di salita del

    clock su flip-flop diversi.• Stiamo parlando dello stesso segnale esterno di clock, che arriva in diversi punti fisici interni

    del circuito: clock(i) all'ingresso del flip-flop (i), clock(j) all'ingresso del flip-flop (j).

    • Lo sfasamento deriva dalla diversa lunghezza del cammino del segnale di clock dall'oscillatore ai due flip-flop (vsegnale ~ 20 cm/ns ≈ 2/3 vluce).

    • Può essere positivo o negativo.

    • Tipicamente |Tskew(i-j)| 0 .

    S. Ricciarini – progettazione circuiti digitali

  • Nel caso di circuito asincrono, abbiamo almeno due distinti segnali di clock.• Si dice che il flip-flop (2) realizza una risincronizzazione (o campionamento asincrono) del

    segnale data_in_2.

    Per esempio consideriamo clock_1 (va al flip-flop (1)) più lento di clock_2 (va al flip-flop (2)).

    • Consideriamo le temporizzazioni per il setup time del flip-flop (2): dato che lo sfasamento in genere varia ad ogni ciclo, necessariamente a un certo punto (dopo un numero finito di cicli di clock_2) si avrà una transizione di data_in_2 troppo vicina a quella di clock_2, con violazione di setup time.

    • In altri termini, per un circuito asincrono la relazione (ST)a un certo punto non sarà soddisfatta.Ciò comporta la possibilità di avere un upset.

    42

    Circuito asincrono e "setup time"

    S. Ricciarini – progettazione circuiti digitali

  • 43

    Macchina sincrona e "hold time" Per una macchina sincrona, la non violazione di hold time per un dato ingresso

    "sincrono" di un flip-flop (j) è garantita se:

    TCTO(i)min + Tcomb(i)

    min > Tholdmax + Tskew(j-i)

    max (HT)

    per ogni flip-flop (i) che contribuisce a pilotare l'ingresso "sincrono" di (j).

    In questo caso la relazione non dipende dalla frequenza operativa (frequenza di clock) e quindi può essere soddisfatta in maniera più agevole che la (ST).

    Nel caso asincrono, valgono considerazioni analoghe a quelle svolte per il setup time.

    S. Ricciarini – progettazione circuiti digitali

  • 44

    Vantaggi della macchina sincrona Come abbiamo visto, in una macchina sincrona la non violazione di setup e hold time può

    essere garantita su tutti i flip-flop, anche tenendo conto della variabilità dei tempi di propagazione (ad es. facendo in modo che Tsetup_margin(j-i) > 0 per tutte le coppie di flip-flop).

    Come vedremo, il compilatore automaticamente sceglie e ottimizza la struttura reale della macchina sincrona (tipo di celle logiche, loro disposizione geometrica e interconnessioni), con lo scopo di soddisfare i margini temporali su setup e hold time nel modo migliore possibile, per tutte le coppie di flip-flop.

    S. Ricciarini – progettazione circuiti digitali

  • 45

    Svantaggi del circuito asincrono

    S. Ricciarini – progettazione circuiti digitali

    Nel circuito asincrono, gli upset sono inevitabili: richiedono quindi di essere trattatiopportunamente per garantire la funzionalità desiderata del circuito (vedremo poi come).

    Nel circuito asincrono, occorre in genere tenere il conteggio dei cicli dei vari clock impiegati, per assicurare la simultaneità di determinate azioni da parte dei rispettivi blocchilogici (asincroni fra loro).

    • Se Tclock_1 = 110% · Tclock_2, 10 cicli di clock_1 durano quanto 11 cicli di clock_2.

    Il circuito asincrono richiede in sostanza un notevole lavoro addizionale da parte del progettista.

    • Lavoro addizionale che non conviene fare, se la stessa funzionalità si può ottenere con una macchina sincrona.

  • 46

    Struttura della macchina sincrona e realizzazione in VHDL.

    S. Ricciarini – progettazione circuiti digitali

  • Una qualsiasi macchina sincrona è scomponibile (per equivalenze logiche) in:• un registro di stato ("status register") a N bit composto da N flip-flop elementari (cioè

    ciascuno con un solo ingresso sincrono, data_in);

    • una look-up-table (LUT) cioè un generico circuito puramente combinatorio (senza flip-flop).

    I flip-flop formano la memoria della macchina, immagazzinando l'informazione relativa allo stato della macchina duranteciascun ciclo di clock.

    • La macchina sincrona è, per questo, anche chiamata macchina a stati.

    • L'uscita del registro di statoè detta bus di stato presente.

    • L'ingresso del registro di statoè detta bus di stato successivo.

    • Ogni configurazione di valori caricatinegli N flip-flop costituisce uno stato:gli stati possibili sono 2N.

    47

    Macchina sincrona: struttura

    S. Ricciarini – progettazione circuiti digitali

  • Lo stato della macchina durante il ciclo di clock successivo dipende da:1. stato presente (uscita del registro di stato);

    2. funzione logica realizzata dalla LUT;

    3. (nel caso in cui la macchina sia componente di circuito sincrono) ingressi di controllosincroni, che assieme alla LUT determinano l'ingresso del registro di stato.

    Non tutti gli stati possibili sononecessariamente raggiunti (cioè usati).Ciò è dovuto agli ingressi di controllosincroni (segnali esterni).

    48

    Macchina sincrona: struttura

    S. Ricciarini – progettazione circuiti digitali

  • Una generica macchina sincrona è non periodica: la presenza degli ingressi di controlloimplica che lo stato successivo non dipende soltanto dalla LUT.

    • La sequenza di stati e la loro durata (numerodi cicli di clock) non è in genere prefissata.

    • Il numero di cicli di clock che intercorre fradue ripetizioni dello stesso stato non èin genere prefissato.

    Un caso particolare è la macchina sincrona periodica.• Nessun ingresso di controllo. Quindi lo stato (necessariamente) cambia ad ogni ciclo di clock e

    la successione di stati è fissata dalla LUT.

    Una macchina sincrona periodica con N' flip-flope una LUT L' è logicamente equivalente a:

    • un contatore a N ≤ N' bit;

    • una LUT L (contiene la parte di L' che non èinglobata nel contatore).

    49

    Macchina sincrona e periodicità

    S. Ricciarini – progettazione circuiti digitali

  • 50

    (Es. 3) Macchina sincrona Esempio pratico. Una FPGA contiene una macchina sincrona, che esegue una sequenza di

    operazioni (ciascuna corrisponde a uno stato):• dopo l'accensione della FPGA, stato iniziale: idle oppure no operation (nop); viene impostato

    mediante un impulso di reset che va a tutti i flip-flop (ingresso asincrono preset o clear).

    • avvio da parte di un impulso esterno (ad es. impulso di trigger da un rivelatore);

    • lettura di un ADC esterno e trasferimento del dato in una RAM esterna (ram_write1);

    • incremento del numero di evento e suo trasferimento in RAM (ram_write2);

    • ritorno nello stato iniziale, in attesa di un nuovo trigger.

    La macchina genera sequenze sincrone su un certonumero di uscite digitali verso ADC e RAM.

    S. Ricciarini – progettazione circuiti digitali

    reset

  • 51

    (Es. 3) Macchina sincrona Conviene scegliere la struttura gerarchica della macchina sincrona in modo opportuno:

    • una macchina principale Main che coordina e attiva varie macchine secondarie quandonecessario;

    • una macchina secondaria SecADC dedicata a leggere l'ADC e immagazzinare il dato in un registro temporaneo (registro: macro! Interfaccia dedicata all'ADC: progettista!);

    • una macchina secondaria Seccount che conta il numero di eventi (contatore: macro!);

    • una macchina secondaria SecRAM dedicata a trasferire il dato dal registro temporaneo o dal contatore alla RAM (interfaccia dedicata alla RAM: codificata dal progettista!).

    Ogni macchina secondaria è specializzata per generareuna specifica sequenza digitale su uno specifico gruppo di uscite.

    La stessa macchina secondaria (~ subroutine) può essere

    attivata in momenti diversi del funzionamento dellamacchina principale:

    • ad es. la scrittura nella RAM avviene due volte per ogni trigger e implica la stessa sequenza di controllo verso la RAM (mentre i dati trasferiti possono cambiare ogni volta).

    S. Ricciarini – progettazione circuiti digitali

  • Scrivo qui soltanto il codice VHDL che descrive la macchina principale Main.

    entity main is

    port (

    synchro_trigg, adc_read_end, ram_write_end: in std_logic;

    adc_read_start, ram_write_start, ram_data_select: out std_logic

    );

    end main; -- DOMANDA: ci sono tutti i segnali necessari?

    La descrizione dell'interfaccia (entità)di Main comporta di aver chiaro qualisono i segnali di ingresso e di uscita cheservono a Main per coordinare il lavoro dellealtre macchine Sec.

    Conviene quindi aver disegnato/pensatouno schema a blocchi del circuito, comequello mostrato qui.

    Nota: non ho considerato qui le linee di clock ereset asincrono e le uscite di controllo dellemacchine secondarie verso ADC e RAM.

    (Es. 3) Macchina sincrona in VHDL

    S. Ricciarini – progettazione circuiti digitali

    Il trigger da rivelatore è un segnale asincrono rispetto al clock;il risincronizzatore "trigger resync" è descritto più avanti.

    52

  • Abbiamo visto che l'architettura interna di unamacchina sincrona è descritta in modo naturalescomponendola in due blocchi logici:

    • un registro di stato (tutti e soli i flip-flop);

    • una LUT (blocco puramente combinatorio).

    In questa descrizione della macchina Main, i segnaliinterni sono i due bus di stato.

    architecture arch of main is

    -- ... DOMANDA: servono altri segnali interni?

    type st_value is ( -- con questa descrizione funzionale (astratta) il bus di stato

    -- (ingresso e uscita del registro di stato) viene rappresentato in maniera ben leggibile,

    -- definendo un apposito tipo di segnale i cui valori sono rappresentati da stringhe.

    nop, adc_read, ram_write1, ram_write2 -- la macchina che definisco in questo esempio ha

    -- 4 diversi stati, equivalenti ai 4 possibili valori di 2 linee digitali: 00,01,10,11

    -- presi in qualunque ordine.

    );

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

    -- (uscita registro) e stato successivo (ingresso registro).

    : st_value;

    -- ...53

    (Es. 3) Macchina sincrona in VHDL

    S. Ricciarini – progettazione circuiti digitali

  • Descriviamo ora i due blocchi logici.

    begin

    process (reset, clock, st_next) -- primo blocco logico: è il registro di stato della macchina

    -- (processo = descrizione funzionale).

    begin

    if (reset = '1') then -- "reset" inviato agli ingressi "asincroni" clear o preset di

    -- tutti i flip-flop, per avere uno stato di partenza definito dopo l'accensione.

    -- DOMANDA: in che stato vanno i flip-flop all'accensione?

    st_pres

  • -- ...

    st_next

  • 56

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

    -- In alternativa all'uso di:

    -- if ("condizione 1") then...elsif ("condizione N") then...else...end if;

    -- (in cui la condizione "else" PUÒ anche essere omessa)

    -- è possibile usare:

    -- case "bus" is when "valore 1" =>... when "valore 2" =>...when others =>...end case;

    -- (in cui la condizione "when others" NON PUÒ essere omessa).

    -- ATTENZIONE: con "if" si specificano le assegnazioni derivanti da un sottoinsieme dei

    -- possibili valori di un bus (gli altri valori non modificano il valore in uscita);

    -- con "case" si specificano le assegnazioni derivanti da ciascuno dei

    -- possibili valori del bus (è obbligatorio includere nell'elenco dei "when" TUTTI

    -- i possibili valori del bus: esplicitamente, o implicitamente con "when others").

    case st_pres is

    when nop =>

    if (synchro_trigg = '1') then -- c'è un trigger!

    st_next

  • -- ...

    when adc_read =>

    if (adc_read_end = '1') then -- è terminata la lettura dell'ADC (comunicazione da SecADC).

    st_next

  • 58

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

    when ram_write2 =>

    if (ram_write_end = '1') then -- SecRAM comunica di aver terminato la (seconda) scrittura

    -- nella RAM.

    st_next

  • 59

    (Es. 4) Progettazione parametrica In VHDL è possibile descrivere un blocco logico con una o più caratteristiche parametriche

    e specificare poi indipendentemente per ciascuna chiamata il valore dei parametri.

    Esempio: un contatore limitato ad un conteggio count_max variabile fra 10 e 40, a seconda di come specificato nella chiamata.

    entity user_count is

    generic ( -- generic = parametro

    count_max : integer range 40 downto 10 := 20 -- se non assegnato nella chiamata,

    -- viene posto a 20 (default).

    -- Notare la sintassi ":=" per assegnare il valore al parametro. Diversa da:

    -- "" (mappatura segnale di un componente)

    -- "=" (condizione su di un segnale nel processo)

    );

    port (

    reset, clock : in std_logic;

    count : out integer range 40 downto 0 -- bus rappresentato in modo astratto, come intero

    );

    end entity user_count;

    S. Ricciarini – progettazione circuiti digitali

  • 60

    (Es. 4) Progettazione parametrica La descrizione dell'architettura di "user_count" contiene la sintassi seguente:

    count

  • 61

    Compilazione e verifica del progetto.

    S. Ricciarini – progettazione circuiti digitali

  • 62

    Compilazione del progetto: sintesi La compilazione avviene in due fasi: sintesi e configurazione.

    • Un software (compilatore) permette di automatizzare la maggior parte del lavoro.

    • Eventuali raffinamenti, in entrambe le fasi, sono apportati a mano.

    Prima fase: sintesi.

    Il codice HDL (descrizione funzionale/strutturale) o disegno schematico (descrizione strutturale) ètradotto dal software di sintesi in una specifica struttura di elementi logici di base (AND, NOT e flip-flop) indicata come netlist (abbreviazione di “network list”).

    • Si parte con il codice HDL (ad esempio uno o più file di testo VHDL, con estensione .vhd) o il codice che rappresenta il disegno schematico (in tal caso, codifica ed estensione del file dipendono dall'ambiente di sviluppo).

    • Si ottiene tipicamente un file di testo con codifica EDIF, con estensione .edf(EDIF = Electronic Design Interchange Format, formato di riferimento in campo industriale).

    La netlist non fa riferimento ad alcun dispositivo specifico (FPGA o ASIC).

    S. Ricciarini – progettazione circuiti digitali

  • 63

    Con la sintesi la struttura logica del circuito viene in genere ottimizzata automaticamente, a partire dalla descrizione funzionale/strutturale data dal progettista.

    • L'ottimizzazione avviene secondo vari criteri e sfruttando le equivalenze logiche.

    • La struttura della netlist può essere molto diversa da quella specificata nei file di input. La funzionalità è la stessa.

    Un esempio di ottimizzazione: sono eliminate le parti logiche ridondanti (cioè duplicate nel codice originale) in modo da ridurre il numero di elementi logici necessari.

    • Si ricordi che il numero di elementi logici disponibili in un dato dispositivo è limitato.

    • Si riduce così la potenza assorbita (consumo).

    • Data la sintesi automatica, il codice che descrive il circuito logico può essere scritto dal progettista in maniera ridondante (cioè non necessariamente sintetica), quindi in modo più intuitivo.

    • Un caso pratico: la descrizione del circuito fatta dal progettistacontiene due flip-flop che pilotano parti diverse delcircuito, ma che hanno lo stesso segnale logicoin ingresso: uno dei due flip-flop può quindi essereomesso (ma attenzione: il fan-out sull'altro aumenta).

    Sintesi e ottimizzazioni

    S. Ricciarini – progettazione circuiti digitali

  • 64

    Compilazione del progetto: configurazione Seconda fase: configurazione del dispositivo o place and route cioè “posizionamento

    (elementi) e instradamento (segnali)”.

    La netlist viene tradotta dal software di configurazione in un codice di configurazione per un determinato tipo di dispositivo e salvato in uno o più file di configurazione (codifica ed estensione del file dipendono dall'ambiente di sviluppo).

    Il codice di configurazione viene utilizzato nella fase di realizzazione fisica del circuito nel dispositivo (programmazione FPGA o fabbricazione ASIC).

    Il codice di configurazione descrive una specifica struttura reale del circuito logico (cioè la disposizione fisica degli elementi logici e delle interconnessioni in un dato tipo di dispositivo), scelta fra quelle logicamente equivalenti alla struttura descritta nella netlist.

    • Per una FPGA la scelta della configurazione si basa sulle celle e interconnessioni a disposizione.

    • Per una ASIC la struttura reale viene definita tenendo conto dei vincoli costruttivi legati alla tecnologia di fabbricazione utilizzata (dimensioni dei transistor, interdistanza fra piste, ecc.).

    S. Ricciarini – progettazione circuiti digitali

  • 65

    Configurazione e temporizzazioni Anche nella fase di configurazione il compilatore effettua delle ottimizzazioni, che possono

    essere di tipo logico (analoghe alla fase di sintesi) o temporale (ad esempio: minimizzazione dei ritardi nelle interconnessioni).

    Per le ottimizzazioni temporali, il compilatore tiene conto dei seguenti parametri, che devono essere specificati dal progettista:

    • frequenza operativa massima richiesta;

    • campo di valori attesi per i parametri operativi: tensione di alimentazione e temperatura internadel semiconduttore.

    e di un data base che contiene i tempi di propagazione attesi dei segnali per lo specificotipo di dispositivo, in funzione dei valori dei parametri operativi.

    Il progettista deve conoscere a priori la frequenza operativa massima richiesta al suo circuito (o a ciascuna parte di esso).

    • E' buona norma richiedere al compilatore di soddisfare una frequenza operativa significativamente maggiore di quella massima richiesta (margine di sicurezza per tener conto dell'approssimazione dei tempi di propagazione in compilazione). Indicativamente, almeno il 25% in più (ad es. per 40 MHz, indicare 50 MHz).

    S. Ricciarini – progettazione circuiti digitali

  • 66

    Configurazione e avvisi Il compilatore applica i propri algoritmi per soddisfare setup e hold time per tutti i flip-flop

    sincroni, per frequenze e parametri operativi indicati dal progettista.• Se la procedura non ha completo successo, il compilatore fornisce la lista dei cammini di segnale

    che violano setup o hold time e indica la loro presenza tramite un avviso ("warning").

    • Il progettista DEVE sempre controllare il rapporto di compilazione, individuare i suddetti cammini e modificare il progetto (o il dispositivo o altro), in modo da eliminare questi problemi.

    Il progettista in genere DEVE leggere e comprendere tutti gli avvisi ("warning") nel rapporto del compilatore, e intraprendere azioni opportune.

    • Ad esempio, un tipico errore concettuale (non di sintassi VHDL!) è l'inserimento di un latch (ramo di reazione) in un elemento combinatorio.

    • Il latch significa che l'uscita dell'elemento è anche suo ingresso: l'uscita può quindi commutare senza stimoli esterni!

    • Consideriamo il seguente elemento combinatorio (LUT e porta AND) con la condizione iniziale indicata in figura (input2 = 0).

    DOMANDA: dove è stato (erroneamente)

    inserito il latch?

    DOMANDA: cosa accade ad output2

    se input2 diventa 1?

    S. Ricciarini – progettazione circuiti digitali

  • 67

    Verifica del progetto Ci sono due modi per verificare la corretta funzionalità del circuito digitale progettato:

    simulazione e prove in laboratorio.• In entrambi i casi si forniscono al circuito sequenze temporali (forme d'onda) di segnali digitali in

    ingresso 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.

    DOMANDA: perché?

    S. Ricciarini – progettazione circuiti digitali

  • 68

    • La simulazione avviene tipicamente mediante un apposito software.

    • La visualizzazione del comportamento del circuito (segnali interni ed esterni) avviene tramite una finestra grafica, dove sono rappresentati i diagrammi logici temporali dei segnali o bus considerati.

    • E' possibile assegnare le forme d'onda in ingresso tramite la stessa interfaccia grafica o tramite codifica testuale.

    • Nel caso di assegnazione grafica, per evitare violazioni di setup/hold time (e per chiarezza) è desiderabile che i segnali di ingresso sincroni abbiano transizioni sufficientemente distanti dal fronte di salita del clock (ad esempio, un quarto di ciclo dopo).

    • Nell'ambiente software di sviluppo è in genere possibile generare automaticamente il "testbench" (banco di prova) in VHDL per il circuito progettato. Questo "testbench" realizza le interconnessioni con il mondo esterno e permette di codificare sequenze logiche sugli ingressi del circuito, anche in funzione delle uscite del circuito (simulazione di un'interfaccia automatica), mediante la sintassi:

    process (input1)

    begin

    input1 = '1';

    wait for 100 ns;

    input1 = '0';

    wait for 100 ns;

    ...

    end process;

    Simulazione

    S. Ricciarini – progettazione circuiti digitali

  • 69

    Tipi di simulazione Simulazione funzionale: trascura gli effetti dei tempi di propagazione nel funzionamento

    del circuito.• E' rapida: il simulatore non tiene conto degli effetti dei tempi di propagazione e assume che non

    avvengano violazioni di setup e hold time.

    • Permette quindi di individuare tutti e soli i problemi logici del progetto.

    • Non è strettamente necessaria, ma è utile prima della simulazione temporale, per separare la ricerca dei problemi logici da quella dei problemi di temporizzazione.

    Simulazione temporale: simulazione completa degli effetti dei tempi di propagazione.• Il simulatore riproduce i tempi di propagazione attesi dei segnali nel circuito, per uno specifico

    tipo di dispositivo e per determinati valori dei parametri operativi, utilizzando un data base dei tempi di propagazione, come fatto dal compilatore.

    S. Ricciarini – progettazione circuiti digitali

  • 70

    Limiti della verifica Limiti della verifica del progetto:

    • in simulazione, le temporizzazioni reali sono riprodotte in modo necessariamente approssimato;

    • in simulazione e in laboratorio, per semplice mancanza di tempo, non è generalmente possibileprovare:

    • tutte le possibili combinazioni di valori dei parametri operativi in cui il circuito opererà, anche assumendo che all'interno di determinati campi di valori V, T i tempi di propagazione restino invariati ai fini pratici;

    • tutte le possibili casistiche di utilizzo (cioè sequenze di segnali in ingresso) in cui il circuitoopererà.

    Il circuito deve essere affidabile (cioè correttamente funzionante in tutte le condizioni operative attese e per tutte le possibili casistiche di utilizzo).

    • Dati i limiti della verifica indicati sopra, conviene sempre progettare una macchina sincrona (nei casi in cui ciò sia possibile) perché, come si è detto, le problematiche temporali di cui tenere conto sono minimizzate, in quanto si riducono a soddisfare setup e hold time per tutte le coppie di flip-flop, e di queste può occuparsi automaticamente il compilatore.

    S. Ricciarini – progettazione circuiti digitali

  • 71

    Upset da violazione di setup/hold time; asincronia e risincronizzazione

    S. Ricciarini – progettazione circuiti digitali

  • 72

    Upset da violazione di setup/hold time Si ricorda la definizione di upset ("rovesciamento"): il valore dell'uscita di un flip-flop

    diviene l'inverso di quello che al momento sarebbe logicamente corretto.

    Qual'è la conseguenza pratica dell'upset?• Nei successivi cicli di clock l'upset si può propagare ad altri flip-flop nel circuito.

    • In generale l’upset introduce un errore logico, cioè una variazione logicamente non prevista delle uscite del circuito. Ad es.: un contatore passa dal conteggio N a N+2.

    Un upset può verificarsi se setup o hold time di un flip-flop sono violati per un qualchefronte di salita di clock.

    • L'uscita del flip-flop (bistabile) si viene a trovare in uno stato metastabile (cioè di equilibrio instabile) caratterizzato da un valore di tensione intermedio fra lo stato 0 e 1.

    • Il flip-flop decade dallo stato metastabile in tempi brevi (~ 1 ns) nello stato 0 o nello stato 1 (stati stabili), in maniera sostanzialmente imprevedibile, tipicamente a causa delle oscillazioni di rumore elettronico: può quindi decadere nello stato logicamente sbagliato rispetto a quello che sisarebbe dovuto caricare in base ai valori degli ingressi "sincroni" del flip-flop, può cioè avvenirel'upset.

    S. Ricciarini – progettazione circuiti digitali

  • 73

    Caso della macchina sincrona In una macchina sincrona la violazione di setup/hold time può avvenire per una coppia

    i,j di flip-flop se non sono soddisfatte le relazioni viste prima:

    TCTO(i)max + Tcomb(i)

    max + Tskew(i-j)max + Tsetup

    max < Tclockmin (ST)

    TCTO(i)min + Tcomb(i)

    min > Tholdmax + Tskew(j-i)

    max (HT)

    • L'indice "max/min" si riferisce alla variabilità dei tempi di propagazione (tolleranze, parametri operativi, invecchiamento): non soddisfare le relazioni significa non poter garantire l'assenza di upset per la coppia i,j.

    • Un caso tipico è quando la frequenza di clock è troppo elevata, per cui (ST) non puòessere soddisfatta per tutti o parte dei flip-flop del circuito.

    • La probabilità di questo tipo di upset viene azzerata se si riesce a soddisfare (ST) e (HT).

    S. Ricciarini – progettazione circuiti digitali

  • In un circuito asincrono (cioè con due o più segnali di clock distinti), i flip-flop cherealizzano la risincronizzazione (o campionamento asincrono) avranno violazione di setup/hold time per determinati fronti di salita del proprio clock (a seconda del corrispondente sfasamento fra i due clock).

    • La probabilità di questo tipo di upsetnon può mai essere azzerata.

    • E' però possibile azzerare la probabilitàdi errore logico nel circuito.

    74

    Caso del circuito asincrono

    S. Ricciarini – progettazione circuiti digitali

  • 75

    Campionamento asincrono combinatorio

    S. Ricciarini – progettazione circuiti digitali

    Si ricorda che il campionamento asincrono può essere di tipo combinatorio(risincronizzazione su uscita di porta logica) oppure sequenziale (risincronizzazione su uscita di flip-flop).

    La figura mostra un esempio di campionamento asincrono combinatorio.• La linea ready_1 è l'uscita di un elemento combinatorio (porta logica), è sincrona con clock_1 e

    indica quando la macchina 1 è pronta.

    • La linea ready_2 è sincrona con clock_2e avvia una sequenza interna alla macchina 2.

  • 76

    Un segnale combinatorio come ready_1 presenta dei glitch (impulsi spuri).• Le transizioni di signal_a e signal_b non sono mai esattamente simultanee, nonostante i due

    segnali siano generati da flip-flop sincroni, a causa dei tempi di propagazione dei segnali nel dispositivo reale.

    Nell'esempio, per determinati fronti di salita di clock_2 (a seconda dello sfasamentointercorrente fra i due clock) il glitch su ready_1 avverrà troppo vicino al fronte di salita di clock_2, con violazione di setup o hold time e quindi con possibile upset sulla linea ready_2 e conseguente errore logico nella macchina 2.

    • In caso di upset ready_2 cambia stato e la macchina 2 avvia la sequenza interna, senza che la macchina 1 abbia veramente comunicato di essere pronta!

    Nel caso generale di circuito con campionamenti asincroni combinatori, sono presenti upset dovuti a glitch, ossia transizioni logicamente non attese (errori logici) nel circuito a valle.

    Nota bene: anche nel caso di campionamento sincrono combinatorio ci sono dei glitch, ma se (ST) e (HT) sono soddisfatte, questi glitch non danno mai upset, in quanto avvengonoal di fuori dell'intorno del fronte di salita del clock, identificato da setup e hold time.

    S. Ricciarini – progettazione circuiti digitali

    Campionamento asincrono combinatorio

  • 77

    Campionamento asincrono sequenziale

    • ready_2 può ancora avere un upset ma ciò non comporta un errore logico nella macchina 2, che parte quando desiderato, cioè solo dopoche la macchina 1 ha comunicato di esserepronta con ready_1 .

    • ready_2 replica le transizioni di ready_1 a menodi una fluttuazione ("jitter") nel ritardo, chepuò variare di volta in volta fra circa 0 e Tclock_2a seconda della fase fra i due clock al momentodel campionamento.

    • Per indicare il ritardo fra i due segnali ready_1 e ready_2:

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

    • si rappresenta il jitter come un'incertezza δt distribuita uniformemente con ampiezzamassima pari a: δt = ± 0.5 · Tclock_2

    Inserendo opportunamente un flip-flop nel circuito visto prima, si ha un segnale ready_1per definizione privo di glitch.

    S. Ricciarini – progettazione circuiti digitali

  • 78

    Campionamento asincrono sequenziale Il campionamento asincrono di tipo sequenziale (cioè su uscita di flip-flop) azzera la

    probabilità di errore logico, in quanto sull'uscita del flip-flop non sono presenti glitch.

    Nella risincronizzazione di tipo sequenziale, pur non avendo glitch, avvengono comunque e inevitabilmente gli upset.

    Gli upset avvengono però solamente in corrispondenza di una transizione logicamente attesa dell'uscita del flip-flop e il loro unico effetto è quello di introdurre una fluttuazione temporale (dovuta alla fase variabile fra i due clock) per la transizione logicamente attesanel circuito a valle.

    S. Ricciarini – progettazione circuiti digitali

  • 79

    Upset da perturbazioni esterne

    S. Ricciarini – progettazione circuiti digitali

  • 80

    Upset da perturbazioni esterne Un upset può anche avvenire a causa di perturbazioni esterne, come le correnti parassite

    indotte nel flip-flop da una particella altamente ionizzante (ad es. un raggio cosmico).• La carica negativa temporaneamente accumulata su D2

    ne abbassa la tensione: se l'abbassamento è sufficiente,questo rovescia lo stato dell'altra porta NOT del latch.

    • Il rovesciamento si propaga alla porta NOT originale.

    • A questo punto il latch si trova definitivamentenello stato rovesciato: upset!

    S. Ricciarini – progettazione circuiti digitali

  • 81

    Upset da perturbazioni esterne Non è possibile azzerare la probabilità di questo tipo di upset, perché è intrinsecamente

    associata al flip-flop (e alla presenza di radiazione elettromagnetica e radiazione ionizzante in natura).

    Non è possibile azzerare la probabilità che questo tipo di upset comporti un errore logico, perché può avvenire in qualunque flip-flop del circuito.

    Si può ridurre la probabilità che questo upset comporti un errore logico, introducendouna qualche forma di ridondanza che funziona come sistema di correzione automaticadell'errore logico. Vediamo di seguito alcuni esempi.

    1. Tripla ridondanza.

    • Un segnale logico è realizzato da 3 flip-flop: il dato in ingresso viene caricato simultaneamentesui 3 flip-flop; il dato in uscita è il valore (1 o 0) presente in maggioranza (serve la opportunalogica combinatoria).

    • Il dato in uscita viene automaticamente sovrascritto in ingresso (ad es. ad ogni clock), in modo da eliminare l'upset.

    • La frazione di informazione è 1/3: servono 3 flip-flop per ciascun bit di informazione.

    S. Ricciarini – progettazione circuiti digitali

  • 82

    Upset da perturbazioni esterne 2. Codifica Hamming.

    • Quando un valore A viene scritto in un registro a N bit, viene anche scritto un codice B in un registro ausiliario di H bit; B=f(A). Si parla di codifica Hamming (N+H, N).

    • Il valore letto è una combinazione logica delle N+H uscite tale che, in caso di upset di uno o piùflip-flop fra gli N+H dopo la scrittura di A e B, il valore letto resti identico a quello scritto A.

    • Il valore letto viene automaticamente sovrascritto in ingresso (ad es. ad ogni clock), in modo da eliminare l'upset dai flip-flop.

    • Il numero di upset simultanei nei registri A e/o B che possono essere corretti cresce con il numero H di bit ausiliari.

    Nota: anche con la ridondanza, l'errore logico è sempre possibile: ad esempio, nel caso di tripla ridondanza, un doppio upset (su due flip-flop simultaneamente) non verrebbe corretto automaticamente.

    S. Ricciarini – progettazione circuiti digitali

  • 83

    Rivelazione dell'upset Di seguito alcuni tipici metodi per rivelare la presenza di un upset.

    • Si configura la logica di ridondanza in modo da segnalare gli upset che essa non puòcorreggere.

    • La tripla ridondanza è in grado di correggere un singolo upset ma non è in grado di segnalare upset superiori. DOMANDA: perché?

    • Una codifica Hamming (7,4) ossia con N=4, H=3 è in grado di correggere un singolo upset e segnalare un doppio upset (cioè upset su due diversi bit) mediante una linea di allarme, mentre nulla viene segnalato in caso di upset tripli o superiori.

    • Si utilizzano altri tipi di codici di controllo in grado di segnalare gli upset.• Bit di parità, cioè un bit P che rappresenta la parità (P=1 se pari, P=0 se dispari) del numero

    di volte che compare '1' negli N bit che compongono un blocco di dati:

    Es.: 00001100001000011 ha P=0 (infatti '1' compare 5 volte)

    • Il bit P viene scritto in un flip-flop al momento della scrittura degli N bit di dati.

    • In seguito, quando i dati vengono letti, la parità P' viene calcolata di nuovo.

    • In caso di un numero dispari (singolo, triplo ecc.) di upset presenti nel blocco di dati, la parità calcolata P' è invertita rispetto a quella salvata P.

    • In caso di un numero pari (doppio, quadruplo ecc.) di upset, il controllo è inefficace!

    • In pratica si utilizzano controlli analoghi più sofisticati, con codici di controllo a M>1 bit (ad es. CRC: Cyclic Redundancy Check).

    S. Ricciarini – progettazione circuiti digitali

  • 84

    Rivelazione dell'upset

    • Si effettuano controlli sul contenuto dei dati trasmessi.• I dati in uscita devono contenere sequenze di bit prefissate ("pattern", "frame").

    • Un circuito esterno (controllore) verifica che il circuito logico agisca nel modo corretto entro un tempo massimo prefissato:

    • watchdog (“cane da guardia”): un contatore sempre attivo deve essere azzerato dal circuito logico prima che venga raggiunto un determinato conteggio, col quale viene asserita una linea di allarme.

    • time-out sull'esecuzione di un comando esterno (sequenza di bit in ingresso): la risposta deve avvenire entro un tempo massimo prefissato; altrimenti il circuito esterno, che ha inviato il comando e attivato un proprio contatore di time-out, interviene.

    S. Ricciarini – progettazione circuiti digitali

  • 85

    Contromisure all'upset Come si riporta il circuito in una configurazione corretta dopo aver rivelato la

    presenza di upset? Di seguito i metodi più semplici.

    • Con un impulso di reset asincrono inviato a tutti i flip-flop attraverso i loro ingressi"asincroni" (clear o preset), che riportano i singoli flip-flop nello stato inizialedesiderato.

    • Si ricorda che gli ingressi "asincroni" clear e preset sono caratterizzati dall'agire sullo statodel flip-flop indipendentemente dal clock.

    • Con lo spengimento e riaccensione del circuito.

    S. Ricciarini – progettazione circuiti digitali