Modello di Moore
module Rete_di_Moore( z, x, clock, reset_); //o (Xn-1,...,x=X0, Zm-1,...,Z0,etc)
input clock, reset_;
input[N-1:0] x;
output[M-1:0] z;
reg[W-1:0] STAR;
parameter S0 = codifica0, S1 = codifica1, Sk-1 = codificak-1;
assign {zM-1,...,z0} = (STAR == S0) ? ZS0 :
(STAR == S1) ? ZS1 :
...
/*(STAR == Sk-1) */ ZSk-1;
always @(reset_ == 0) #1 STAR<=statointernoiniziale;
always @(posedge clock) if (reset_ == 1) #3
casex(STAR)
S0 : STAR <= AS0(xN-1,...,x0);
S1 : ...
..
Sk-1 : STAR <= ASk-1(xN-1,...,x0);
endcase
endmodule
Le reti di Moore sono reti NON trasparenti.
Sono composte da due Rete Combinatoria e un Registro STAR.
- La rete RCa, funzione di SIP e X, definisce il SIS
- Il registro STAR contiene il SIP
- la rete RCz, funzione di STAR, definisce Z
Leggi di Temporizzazione
- meno stringente della prima e può essere ignorata
Modello di Mealy
Se si combinano due reti di Mealy ottieni un anello combinatorio, no good.
L’unica differenza rispetto al Modello di Moore è che qua anche RCB ha in ingresso le variabili di ingresso, oltre al registro STAR.
Modello di Mealy Ritardato
L’unica differenza rispetoo al Modello di Mealy è che questo presenta un registro OUTR a supporto delle varaibili di uscita, che la rende una rete ==non trasparente== (nessun pericolo di anello combinatorio).
RSS complesse
- microoperazioni: i assegnamenti
Rq<=Rsk,q(x,Rq-1,...,R0)
relativi ai registri operativi. - microsalti: i assegnamenti
STAR<=(x,R1-1,...,R0)
relativi al registro di stato. - statement di etichetta : gli statement completi all’interno al costrutto
casex .. endcase
.
Precisazioni sulle microooperazioni
- descrive l’assegnamento del registro con i contenuti di .
- equivale a DUE microoperazioni:
- è sostanzialmente scorretta, in quanto A OGNI clock TUTTO il registro viene riassegnato, quindi equivarrebbe a:
Handshake /dav, rfd
- /dav : data valid: se \dav=1 allora il dato fornito non è attendibile, se \dav=0 il dato è corretto e disponibile
- rfd : ready for data: se rfd=1, il consumatore è pronto a ricevere, se rfd=0 allora il consumatore non è pronto a leggere il dato
Funzionamento:
- S0: : il dato del produttore non è pronto, il consumatore è pronto a ricevere
- S1: : il dato è pronto
- S2: : il consumatore ha prelevato il dato e non è pronto a riceverne altri
- S3: : il produttore è pronto a produrre un nuovo byte
- S0: : ritorno allo stato iniziale
Partendo da una condizione iniziale in cui rfd=1 e \dav=1:
Il produttore compie la prima mossa: aggiorna il dato e pone \dav=0, ad indicare che il dato è adesso valido.
Il consumatore, legge \dav=0, pone quindi rfd=0, preleva il dato, e lo elabora.
Il produttore riporta allora \dav=1 e attende che il consumatore riport rfd=1, per ritornare alal condizione iniziale.
Tutte queste variabili di handshake necessitano di un registro di supporto, ognuno dello stesso nome della variabile.
Handshake soc, eoc
- soc: start of computation: soc=0 consumatore non ha bisogno di nuovo byte, soc=1 indica al produttore di fornire un nuovo byte.
- eoc: end of computation: eoc=0 produttore ha iniziato la preparazione di un nuovo byte, eoc=1 il produttore è pronto a preparare un nuovo byte.
Funzionamento:
SOC ha bisogno di un registro.
- S0: : consumatore non è pronto a nuovo byte e produttore è disponibile ad iniziarne una nuova
- S1: : consumatore è pronto
- S2: : produttore inizia produzione
- S3: : consumatore notifica di aver capito e non chiede più altri dati
- S0: : il produttore ha finito e il consumatore preleva il dato
S0R: begin
SOC = 1;
STAR <= (eoc == 1'b0) ? S1R : S0R;
end
S1R: begin
SOC = 0;
STAR <= (eoc == 1'b1) ? S2R : S1R;
end
S2R: begin
X0 <= x;
STAR <= MJR;
end