Rete Sincrona
Una rete sequenziale sincrona, è dotata di un
ingresso E, di un segnale di Clock e uno di reset.
Ad ogni fronte del Clock, deve essere
campionato il segnale presente sull'ingresso E.
Ogni 4 bit ricevuti in ingresso bisogna verificare
che tale sequenza rispetti il codice di parità
(numeri di 1 pari). Se così avviene, il numero
deve essere moltiplicato per 2 e salvato in un
registro parallelo, altrimenti deve essere diviso
per 2, ne deve essere fatto il complemento a 2 e
inviato in uscita parallelamente.
Codice VHDL
Questo è il port, dove si possono notare i segnali di ingresso e quelli di uscita
Process 1°parte
Variabili interne al process
Il Reset è sincrono, infatti
è stato inserito dentro la
condizione che si è
verificato un fronte positivo
del Clock
Process 2°parte
Spiegazione
Come si può notare inizialmente, il reset è sincrono. Infatti prima deve
scattare il fronte positivo del Clock, poi si valuta immediatamente il Reset,
che porta tutto nello stato iniziale.
Internamente al process è presente una variabile count che oltre a fungere da
indice nell'inserimento dei bit in ingresso in un vettore interno, mi è utile
per vedere quando devo andare a verificare la mia condizione. Si noti
infatti la presenza di if (count=4) …
Un altro fattore importante è l'altra variabile int che ogni volta che ricevo un bit
in ingresso se era un 1 mi viene incrementata, altrimenti no.
Infine dopo che ho ripetuto diverse volte il processo, almeno 4 volte (si veda
count) guarda se il numero rispettava il codice grazie alla mia variabile e
quindi prendo la mia scelta grazie al costrutto if (…) then …. else … end if
...
Schematico
Spiegazione
Il numero entra dall'ingresso E dal bit meno significativo, ed ad ogni fronte di Clock
viene inserito nel Flip Flop.
Intanto mentre vengono inseriti i bit nel registro,
vengono passati anche a questa rete,
che ha il compito di contare gli 1, per vedere
se il numero rispetterà il codice di parità.
Funziona come un Half Adder retro azionato:
entra il bit, se è un 1 viene sommato con il
Numero precedente. Il riporto non viene
contato per un semplice motivo,
Se il numero finale (ovvero dopo aver
ricevuto tutti i bit) è 0 allora il numero rispetta
il codice, altrimenti no.
Contatore a due bit, dotato di
comando di Reset sincrono e di Clock
Enable (posto sempre a 1 grazie ad
una costante).
Se il numero non rispetta il codice di parità, esso viene diviso per 2, mediante uno
shift dei suoi bit verso destra, e ne viene fatto il complemento a 2.
Per fare ciò i suoi bit devono essere tutti invertiti, e deve essergli sommato “0001”
Il tutto viene salvato in un registro parallelo, a condizione che abbiamo ricevuto i 4 bit
e che il numero non rispetti il codice. Questo controllo è effettuato grazie all'And a 2 ingressi
posto davanti i vari Flip Flop.
N.B. Ho utilizzato quindi il fatto che A and 1 = A ovvero se l'ingresso dell'And è 1, viene
“lasciato passare” l'altro segnale di ingresso. Il Mux davanti i Flip-Flop serve per
re-iscrivere il numero al suo interno per 4 volte (il segnale di controllo del Mux è il Carry del
contatore)
Se il numero rispetta invece il codice, esso viene semplicemente moltiplicato per 2,
grazie ad uno shift dei sui bit a sinistra, di una posizione. Verrà quindi salvato nel registro
solo se ho contato 4 bit e se esso rispetta il codice di parità, altrimenti verrà caricato uno 0,
grazie alla proprietà della porta And citata nella slide precedente.
Anche in questo caso, il numero viene re-iscritto 4 volte dentro i Flip-Flop
Scarica

Presentazione Rete Sincrona