Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Corso programmazione VHDL - parte 5, Dispense di Elettronica

Programmazione VHDL - Sistemi Integrati - parte 5

Tipologia: Dispense

2018/2019

Caricato il 05/07/2019

dar87
dar87 🇮🇹

4

(1)

6 documenti

1 / 21

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
Il VHDL Parte 5: Descrizione di macchine a stati
1
Corso di Architettura dei Sistemi Integrati
Il linguaggio VHDL
parte 5
Macchine a stati finiti
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15

Anteprima parziale del testo

Scarica Corso programmazione VHDL - parte 5 e più Dispense in PDF di Elettronica solo su Docsity!

Il linguaggio VHDL

parte 5

Macchine a stati finiti

Macchine a stati finiti

Introduciamo i vari modi con cui si può descrivere una macchina a stati finiti

in VHDL con l'aiuto di un esempio, relativo ad un ipotetico controllore per un

banco di memoria

  • Il controllore si attiva quando si attiva il segnale di controllo ready ed inoltre viene riconosciuto un opportuno indirizzo (A 2 in esadecimale) sul bus.
  • Il colpo di clock successivo ha inizio il ciclo di lettura o di scrittura, individuato dal segnale read_write
  • Sia il ciclo di lettura che quello di scrittura terminano quando si abbassa il segnale ready.
  • Il valore dei vari segnali viene valutato in corrispondenza del fronte di salita del clock. Il segnale di reset consente di inizializzare il sistema.

Schema a blocchi

Nell'esempio, l'uscita è funzione solo dello stato attuale (macchina di Moore)

Progetto manuale

Partiamo dal diagramma a stati e dalla tabella delle uscite

Progetto manuale - 3

Effettuiamo una codifica dello stato

Progetto manuale - 4

Possiamo finalmente scrivere le equazioni che consentono di calcolare lo stato futuro in funzione dello stato attuale e degli ingressi:

Codifica one-hot

Le equazioni dello stato futuro sono spesso più semplici: D'altro canto si utilizza un numero maggiore di registri e ci sono più funzioni da calcolare.

Descrizione VHDL

Utilizziamo due processi: uno per descrivere la parte combinatoria ed uno per i registri. Non è necessario esplicitare alcuna codifica per lo stato!

Reset sincrono o asincrono

registri: process (clock,reset) begin if (reset=' 1 ') then x <= idle; elsif rising_edge(clock) then x <= y; end if; end process registri; registri: process (clock) begin if rising_edge(clock) then if (reset=' 1 ') then x <= idle; else x <= y; end if; end if; end process registri;

Asincrono

Sincrono

Utilizzo di un tipo enumerato per lo stato

type stato is (idle, scelta, leggi, scrivi); signal x,y : stato; La codifica dello stato e’ affidata al sintetizzatore.

Processo per il sistema combinatorio

case x is

when idle =>

oe <= ' 0 '; we <= ' 0 ';

if ( read=' 1 ' and bus_id=X"A 2 " ) then

y <= scelta;

else y <= idle;

end if ;

when scelta =>

Utilizziamo un costrutto case..when per descrivere le uscite e lo stato futuro a partire dallo stato attuale e dagli ingressi. In questo esempio le uscite non dipendono dagli ingressi (macchina di Moore) e sono assegnate all'inizio di ogni statement when.

Codifica esplicita per lo stato

subtype stato is std_logic_vector( 1 downto 0 );

signal x,y : stato;

constant idle : stato := “ 00 ”;

constant scelta : stato := “ 10 ”;

constant leggi : stato := “ 11 ”;

constant scrivi : stato := “ 01 ”;

E' necessaria un'ulteriore modifica nel processo per il sistema combinatorio (i casi possibili nel case..when sono ora più di 4 – il tipo std_logic può assumere 9 valori):

case x is

when idle =>

when others =>

oe <= ' 0 '; we <= ' 1 ';

end case;

Codifica one-hot e condizioni don't care

case x is when idle => oe <= ' 0 '; we <= ' 0 '; if ( read=' 1 ' and bus_id=X"A 2 " ) then

......... when scelta => ......... when scrivi => oe <= ' 0 '; we <= ' 1 '; if ( ready=' 1 ') then y <= idle; else y <= scrivi; end if; when others => oe <= ‘-‘; we <= ‘-‘; y <= ( others => ‘-‘); end case ;

Il sintetizzatore può sfruttare

le condizioni don't care per

semplificare la logica.

NOTA: se per un qualsiasi

motivo il circuito si porta in

uno stato "illegale" il

comportamento del sistema è

ignoto

Codifica one-hot e fault-tolerance

case x is when idle => oe <= ' 0 '; we <= ' 0 '; if ( read=' 1 ' and bus_id=X"A 2 " ) then

......... when scelta => ......... when scrivi => oe <= ' 0 '; we <= ' 1 '; if ( ready=' 1 ') then y <= idle; else y <= scrivi; end if; when others => oe <= ' 0 '; we <= ' 0 '; y <= idle; end case ;

Se per un qualsiasi motivo il

circuito si porta in uno stato

"illegale" la macchina si

resetta.