Descrizione di macchine a stati tramite VHDL

35
Descrizione di macchine a stati tramite VHDL M. Favalli Engineering Department in Ferrara (ENDIF) FSMs VHDL Ling. di descr. dell’hardware 1 / 35

Transcript of Descrizione di macchine a stati tramite VHDL

Page 1: Descrizione di macchine a stati tramite VHDL

Descrizione di macchine a stati tramite VHDL

M. Favalli

Engineering Department in Ferrara

(ENDIF) FSMs VHDL Ling. di descr. dell’hardware 1 / 35

Page 2: Descrizione di macchine a stati tramite VHDL

Motivazioni

Introdurre la descrizione di FSM in VHDL

Introdurre il modello di macchine a stati esteselargamente utilizzato a livello di design-entry

puó anche essere il prodotto della sintesi ad alto livello

esempio di modello VHDL di una macchina a stati estesa

Formalismi alternativi

(ENDIF) FSMs VHDL Ling. di descr. dell’hardware 2 / 35

Page 3: Descrizione di macchine a stati tramite VHDL

Riepilogo su FSM

FSM: i) insieme finito di simboli di ingresso; ii) insieme finito disimboli di uscita; iii) un insieme finito di stati; iv) funzione di statofuturo; v) funzione di uscita; vi) stato iniziale;

Formalismi per la progettazione: STG e State Table

Modello per l’implementazione: Huffman

Modello per le transizioni di stato: sincrono

(ENDIF) FSMs VHDL Ling. di descr. dell’hardware 3 / 35

Page 4: Descrizione di macchine a stati tramite VHDL

Esempio di FSM (Moore)

Automa con un ingresso x e due uscite y ,w

Riconosce le sequenze di ingresso 01 e 001 (non sovrapponibili)producendo le uscite 01 e 10

Quando non viene riconosciuto alcun simbolo, le uscite valgono00

(ENDIF) FSMs VHDL Ling. di descr. dell’hardware 4 / 35

Page 5: Descrizione di macchine a stati tramite VHDL

Esempio di FSM (Moore)

A,00 B,00 C,01

D,00 E ,10

0

1

1

0

0

1

0 1

0

1

(ENDIF) FSMs VHDL Ling. di descr. dell’hardware 5 / 35

Page 6: Descrizione di macchine a stati tramite VHDL

Descrizione VHDL

Non corrisponde esattamente almodello di FSM: clock e reset

Modello di Huffman (struttura)

Modello simulabile esintetizzabile

Tecnica di descrizionemulti-segment

output logic

next statelogic

register

input

output

presentstate

next state

clock

reset

(ENDIF) FSMs VHDL Ling. di descr. dell’hardware 6 / 35

Page 7: Descrizione di macchine a stati tramite VHDL

VHDL (I)

library ieee;use ieee.std_logic_1164.all;entity fsm isport(x: in std_logic;

clk: in std_logic;y,w: out std_logic);

end entity fsm;

architecture msegmnt of fsm istype state is (A,B,C,D,E);signal state_curr, state_next: state;

begin

-- state reg. (asynchr. reset)

process(clk,reset)beginif (reset=’1’) thenstate_curr <= A;

elsif (rising_edge(clk)) thenstate_curr <= state_next;

end if;end process;

(ENDIF) FSMs VHDL Ling. di descr. dell’hardware 7 / 35

Page 8: Descrizione di macchine a stati tramite VHDL

VHDL (II)

-- next-state logicprocess(state_curr,x)begincase state_curr is

when A => if (x=’1’) thenstate_next <= A;

elsif (x=’0’) thenstate_next <= B;

end if;when B => if (x=’1’) then

state_next <= C;elsif (x=’0’) then

state_next <= D;end if;

when C => if (x=’1’) thenstate_next <= A;

elsif (x=’0’) thenstate_next <= B;

end if;

when D => if (x=’1’) thenstate_next <= E;

elsif (x=’0’) thenstate_next <= B;

end if;when E => if (x=’1’) then

state_next <= A;elsif (x=’0’) then

state_next <= B;end if;

end case;end process;

(ENDIF) FSMs VHDL Ling. di descr. dell’hardware 8 / 35

Page 9: Descrizione di macchine a stati tramite VHDL

VHDL (III)

-- Moore output

process(state_curr)begincase state_curr is

when A => y<=’0’;w<=’0’;

when B => y<=’0’;w<=’0’;

when C => y<=’0’;w<=’1’;

when D => y<=’0’;w<=’0’;

when E => y<=’1’;w<=’0’;

end case;end process;end architecture msegmnt;

(ENDIF) FSMs VHDL Ling. di descr. dell’hardware 9 / 35

Page 10: Descrizione di macchine a stati tramite VHDL

Sintesi

La sintesi e ottimizzazione della FSM prevede i seguenti passi:1 minimizzazione del numero di stati2 codifica dello stato e verifica che la FSM sia safe3 sintesi e ottimizzazione della parte combinatoria della rete4 prima stima della frequenza di clock

A questi passi segue poi la sintesi fisica e la valutazione accuratadella frequenza di clock

(ENDIF) FSMs VHDL Ling. di descr. dell’hardware 10 / 35

Page 11: Descrizione di macchine a stati tramite VHDL

Extended Finite State Machines - EFSM

Alcune FSM presentano un numero molto grande e non gestibileesplicitamente di stati

un semplice contatore binario realizzato con n flip-flop ha 2n stati (éuna FSM il cui stato codifica un numero binario s realizzando larelazione di stato futuro sk+1 = sk + 1)in generale non é possibile gestire esplicitamente lo stato dimacchine che utilizzano registri

Una EFSM é una generalizzazione del concetto di FSM

Permette di elevare il livello di astrazione nella descrizione di retisincrone, ottenendo descrizioni piú compatte di quelle basate suFSM

(ENDIF) FSMs VHDL Ling. di descr. dell’hardware 11 / 35

Page 12: Descrizione di macchine a stati tramite VHDL

Extended Finite State Machines - EFSM

Una FSM (Mealy) calcola l’uscita e lo stato futuro sulla base diingresso e stato presente

In una EFSM, a ingresso e uscita vengono aggiunte condizioni(guard) e azioni (action) relative a un ambiente costituito da unnumero finito di registri (data)

Tali registri rappresentano implicitamente variabili di stato dellaEFSM

Le guard sono tipicamente costruite applicando operatorirelazionali sui dati o comunque operatori che ritornano unacondizione booleana

Le action consistono spesso in operazioni aritmetiche o logichesui dati

(ENDIF) FSMs VHDL Ling. di descr. dell’hardware 12 / 35

Page 13: Descrizione di macchine a stati tramite VHDL

Sintesi di EFSM

Il modello di EFSM corrisponde naturalmente al paradigma diprogetto basato su data-path e controllo

Il data-path é costituito da registri, multiplexer, blocchi logici earitmeticiIl controllo é una FSM convenzionale che interagisce conl’ambiente esterno alla EFSM tramite gli ingressi e le uscite dellaEFSM, e con il data-path tramite:

segnali di uscita che controllano il data-path (determinati dalleaction)segnali di ingresso dal data-path che forniscono le condizioniindividuate dalle guard

(ENDIF) FSMs VHDL Ling. di descr. dell’hardware 13 / 35

Page 14: Descrizione di macchine a stati tramite VHDL

Esempio di sintesi da EFSM a controllo e data-path

mpx mpx

mpx

+ | | >

reg reg

control

data-path

control signals deter-mining actions

data-pathsignals tobe used byguardsdata inputs and outputs

control inputs andoutputsEFSM from manual

design or high-levelsynthesis

(ENDIF) FSMs VHDL Ling. di descr. dell’hardware 14 / 35

Page 15: Descrizione di macchine a stati tramite VHDL

Esempio

Implementazione via hardware di un semplice algoritmo algebrico(Euclide) che calcola il massimo comun divisore di due interisenza segnoPrima specifica al livello behavioral in VHDL

simulabilenon sintetizzabile direttamente (ciclo unbounded)nessuna informazione sul timing e sull’interfaccia con l’esternonessuna informazione sul tipo di realizzazionenessuna informazione sulla sincronizzazione dei dati(sincrono/asincrono)

(ENDIF) FSMs VHDL Ling. di descr. dell’hardware 15 / 35

Page 16: Descrizione di macchine a stati tramite VHDL

gcd - descrizione ad alto livello

-- high-level description of a gcd evaluator, no timing, description-- non directly synthesizablelibrary IEEE;use IEEE.STD_LOGIC_1164.all,ieee.numeric_std.all;entity gcd is

port(a : in STD_LOGIC_VECTOR(7 downto 0);b : in STD_LOGIC_VECTOR(7 downto 0);gcd : out STD_LOGIC_VECTOR(7 downto 0));

end gcd;architecture behav of gcd isbegin

(ENDIF) FSMs VHDL Ling. di descr. dell’hardware 16 / 35

Page 17: Descrizione di macchine a stati tramite VHDL

gcd - descrizione ad alto livello

process(a,b)variable vara,varb: unsigned(7 downto 0);constant zero: std_logic_vector(7 downto 0):=(others=>’0’);begin

if (a=zero) or (b=zero) or (is_x(a)) or (is_x(b)) thengcd <= (others=>’X’);

elsevara:=unsigned(a);varb:=unsigned(b);while (vara/=varb) loopif (vara<varb) then

varb:=varb-vara;elsevara:=vara-varb;

end if;end loop;gcd <= std_logic_vector(vara);

end if;end process;

end architecture behav;

(ENDIF) FSMs VHDL Ling. di descr. dell’hardware 17 / 35

Page 18: Descrizione di macchine a stati tramite VHDL

Descrizione come EFSM

L’algoritmo puó essere descritto come EFSM

Si sceglie l’implementazione sincrona

Si definisce un protocollo di comunicazione con l’esterno basatosu segnali di start , data-ready e di error

Le operazioni da svolgere vengono assegnate agli stati di unaEFSM definendo un controllo e un data-path

(ENDIF) FSMs VHDL Ling. di descr. dell’hardware 18 / 35

Page 19: Descrizione di macchine a stati tramite VHDL

gcd - EFSM VHDL - entity VHDL - architecture

idle VHDL

dr <= ’0’err <= ’0’

check VHDL

dr <= ’0’err <= ’0’

test1 VHDL

dr <= ’0’err <= ’0’

err VHDL

dr <= ’0’err <= ’1’

output VHDL

dr <= ’1’err <= ’0’

test2 VHDL

dr <= ’0’err <= ’0’

sub1 VHDL

dr <= ’0’err <= ’0’

sub2 VHDL

dr <= ’0’err <= ’0’

Inputs: blue

Moore outputs: black textinside the nodes

Mealy outputs: not used

Guards: brown

Actions: green

x=’-’

gcd<=vara

x=’-’

start=’0’

vara:=avarb:=b

start=1

vara=0orvarb=0start=’-’

vara=varbstart=’-’

start=’-’vara\=varb

vara>varb start=’-’ vara<varb

vara:=vara-varb start=’-’

start=’-’not(vara=0orvarb=0)

varb:=varb-varastart=’-’

(ENDIF) FSMs VHDL Ling. di descr. dell’hardware 19 / 35

Page 20: Descrizione di macchine a stati tramite VHDL

gcd - codice VHDL della EFSM EFSM

-- extended FSM version of the gcd evaluator, synthesizable with a few-- adjustmentslibrary IEEE;use IEEE.STD_LOGIC_1164.all,ieee.numeric_std.all;

entity gcd_efsm isport(

start : in STD_LOGIC;clk : in STD_LOGIC;a : in STD_LOGIC_VECTOR(7 downto 0);b : in STD_LOGIC_VECTOR(7 downto 0);err : out STD_LOGIC;dr : out STD_LOGIC;gcd : out STD_LOGIC_VECTOR(7 downto 0)

);end gcd_efsm;

(ENDIF) FSMs VHDL Ling. di descr. dell’hardware 20 / 35

Page 21: Descrizione di macchine a stati tramite VHDL

gcd - codice VHDL della EFSM EFSM

-- Mealy machine-- a,b should be steady at start, any change after start is ignored-- the error and the data redy signal are provided for one clock cyclearchitecture behav of gcd_efsm istype states is (idle,check,test1,test2,sub1,sub2,output,err_state);signal curr_state,next_state: states;begin-- next state and output logicp0: process(curr_state,start,a,b)constant zero:unsigned(7 downto 0):=(others=>’0’);variable vara,varb: unsigned(7 downto 0);begincase curr_state iswhen idle =>

if (start=’1’) thennext_state <= check;vara:=unsigned(a);

varb:=unsigned(b);end if;dr <= ’0’ after 1 ns;err <= ’0’ after 1 ns;

(ENDIF) FSMs VHDL Ling. di descr. dell’hardware 21 / 35

Page 22: Descrizione di macchine a stati tramite VHDL

gcd - codice VHDL della EFSM EFSM

when check =>if (vara=zero) or (varb=zero) or (is_x(a)) or (is_x(b)) thennext_state <= err_state;gcd <= (others=>’0’);

elsenext_state <= test1;

end if;dr <= ’0’ after 1 ns;err <= ’0’ after 1 ns;

when test1 =>if (vara = varb) thennext_state <= output;

elsenext_state <= test2;

end if;dr <= ’0’ after 1 ns;err <= ’0’ after 1 ns;

(ENDIF) FSMs VHDL Ling. di descr. dell’hardware 22 / 35

Page 23: Descrizione di macchine a stati tramite VHDL

gcd - codice VHDL della EFSM EFSM

when test2 =>if (vara > varb) thennext_state <= sub1;

elsenext_state <= sub2;

end if;dr <= ’0’ after 1 ns;err <= ’0’ after 1 ns;

when sub1 =>next_state <= test1;vara:=vara-varb;dr <= ’0’ after 1 ns;err <= ’0’ after 1 ns;

when sub2 =>next_state <= test1;varb:=varb-vara;dr <= ’0’ after 1 ns;err <= ’0’ after 1 ns;

(ENDIF) FSMs VHDL Ling. di descr. dell’hardware 23 / 35

Page 24: Descrizione di macchine a stati tramite VHDL

gcd - codice VHDL della EFSM EFSM

when output =>next_state <= idle;dr <= ’1’ after 1 ns;err <= ’0’ after 1 ns;gcd <= std_logic_vector(vara);

when err =>next_state <= idle;dr <= ’0’;err <= ’1’;

-- useful when encodingwhen others =>

next_state <= idle;dr <= ’0’ after 1 ns;err <= ’1’ after 1 ns;

end case;end process p0;

p1: process(clk) -- state updatebeginif (rising_edge(clk)) thencurr_state <= next_state;

end if;end process p1;

end architecture behav;

(ENDIF) FSMs VHDL Ling. di descr. dell’hardware 24 / 35

Page 25: Descrizione di macchine a stati tramite VHDL

Note

L’assegnazione delle operazioni ai diversi stati é in parte arbitraria(nel flusso della sintesi ad alto livello la EFSM viene speficicatadopo lo scheduling e prima del binding)

Ci sono margini per l’ottimizzazione sia a partire dalla descrizionebehavioral che dalla EFSM

Esistono algoritmi di sintesi in grado di trasformare l’EFSM (RTLcomportamentale) in un RTL strutturale estraendo data-path econtrollo

(ENDIF) FSMs VHDL Ling. di descr. dell’hardware 25 / 35

Page 26: Descrizione di macchine a stati tramite VHDL

gcd - livello RTL strutturale

mpx mpx

rega regb

mpx mpx

a = 0 ∨ b = 0 subtractor a ≥ b

a b a b

a− b

a b

we we

0 1 0 1

0 1 0 1

start

dr

err

g ediffz

a b

vara varb

ControlFSM

(ENDIF) FSMs VHDL Ling. di descr. dell’hardware 26 / 35

Page 27: Descrizione di macchine a stati tramite VHDL

Esercizio

Si descriva tramite FSM e poi come EFSM un contatore binariosincrono avente come ingressi un segnale di start e una parola a

che rappresenta un numero binario senza segno. Non appena ricevutoil segnale di start, il contatore conta da 0 a a e poi si arresta. L’uscitaz si porta a 0 a inizio conteggio e assume il valore 1 a fine conteggio.Si consideri il caso (per la FSM) di a ≤ 15 .

(ENDIF) FSMs VHDL Ling. di descr. dell’hardware 27 / 35

Page 28: Descrizione di macchine a stati tramite VHDL

ASM

Sommario

1 ASM

(ENDIF) FSMs VHDL Ling. di descr. dell’hardware 28 / 35

Page 29: Descrizione di macchine a stati tramite VHDL

ASM

Algorithmic State Machines

Si tratta di un formalismo alternativo a quello di FSM e EFSM

Riprende il formalismo dei diagrammi di flusso usati nell’ambitodel software

Utile dal punto di vista dell’implementazione del codice VHDL

(ENDIF) FSMs VHDL Ling. di descr. dell’hardware 29 / 35

Page 30: Descrizione di macchine a stati tramite VHDL

ASM

ASM - blocco (stato con 2 archi uscenti)

state entry

Moore outputstate name

booleandecision

Mealy output Mealy output

yes no

to anotherASM block

to anotherASM block

stateprova

state entry

to anotherstate

to anotherstate

EquivalentSTG notation

a

input value/Mealy output input value/Mealy output

(ENDIF) FSMs VHDL Ling. di descr. dell’hardware 30 / 35

Page 31: Descrizione di macchine a stati tramite VHDL

ASM

ASM - esempio gcd

start =′ 1′?

dr <= ’0’

err <= ’0’

vara:=a

varb:=b

yes no

start

dr <= ’0’

err <= ’0’

vara=0 or

varb=0

yesno

dr <= ’0’

err <= ’0’

vara=varbyesno

dr <= ’0’

err <= ’0’

vara>varbyes no

dr <= ’0’

err <= ’0’

dr <= ’0’

err <= ’0’

vara:=

vara-varbvarb:=

varb-vara

dr <= ’0’

err <= ’1’

dr <= ’1’

err <= ’0’

gcd <=

vara

(ENDIF) FSMs VHDL Ling. di descr. dell’hardware 31 / 35

Page 32: Descrizione di macchine a stati tramite VHDL

ASM

ASM - blocco (stato con 4 archi uscenti)

state entry

Moore outputstate name

boolean

decision

boolean

decision

boolean

decision

Mealyoutput

Mealyoutput

Mealyoutput

Mealyoutput

yes no

yes no yes no

to anotherASM block

to anotherASM block

to anotherASM block

to anotherASM block

stateprova

state entry

to anotherstate

to anotherstate

to anotherstate

to anotherstate

EquivalentSTG notation

a

input value/Mealy output input value/Mealy outputinput value/Mealy output input value/Mealy output

(ENDIF) FSMs VHDL Ling. di descr. dell’hardware 32 / 35

Page 33: Descrizione di macchine a stati tramite VHDL

ASM

Confronto fra HLS e utilizzo di EFSM

La sintesi ad alto livello deve essere supportata da tool di EDA

Il CDFG dopo lo scheduling corrisponde a una EFSM

La EFSM (o ASM) assume implicitamente uno scheduling delleoperazioni

EFSM (o ASM) sono piú adatte a uno stile di progetto manuale

(ENDIF) FSMs VHDL Ling. di descr. dell’hardware 33 / 35

Page 34: Descrizione di macchine a stati tramite VHDL

ASM

ASM - Esempio

(ENDIF) FSMs VHDL Ling. di descr. dell’hardware 34 / 35

Page 35: Descrizione di macchine a stati tramite VHDL

ASM

ASM - VHDL code

(ENDIF) FSMs VHDL Ling. di descr. dell’hardware 35 / 35