Progetto Sincrono
Schematico
Specifiche
• Una rete sequenziale sincrona riceve in ingresso seriale 2 sequenze
di 8 bit (a partire dal bit meno significativo) attraverso i due segnali
di input X1 e X2. Le sequenze di 8 bit sono intervallate da 8 periodi di
clock. Tali sequenze dovranno essere prese in considerazione solo
mentre il segnale di input E è a 1. Viceversa, per E = 0 i bit in entrata
verranno scartati. La rete dovrà elaborare le sequenze in entrata in
modo che se presentano lo stesso numero di ‘1’ esse siano
sommate e il risultato della somma mandato in output in modo
seriale (a partire dal bit meno significativo) negli 8 periodi di clock
successivi alla lettura. Se ciò non è verificato, le due sequenze
dovranno essere divise per 2, sommate e mandate in output
parallelo nel periodo di clock subito successivo alla lettura.
Schematico (1)
La rete è stata realizzata con sintesi
diretta. Lo schematico a lato è stato
suddiviso in 8 blocchi funzionali:
In blu : lettura
In rosso : conteggio degli ‘1’
In verde : confronto dei conteggi
In magenta : selezione delle
sequenze da sommare
In azzurro : somma delle sequenze
In viola : uscita parallela
In arancio : uscita seriale
In giallo : contatore
Schematico (2)
La lettura delle due sequenze in
seriale è realizzata con 2 shift
register a 8 bit con reset
sincrono. Il CE è attivo se E = ‘1’,
cioè nella fase di input appunto.
Schematico (3)
Mediante 2 accumulatori, viene
conteggiato il numero di ‘1’ per
ogni sequenza. Il Carry In degli
accumulatori è caricato con il
primo pin out degli shift register,
in questo modo il conteggio verrà
incrementato se si incontrerà un
‘1’ appunto. Il CE, come per gli
shift register, è caricato con il
valore di E. ADD è tenuto a ‘1’
per far si che l’accumulatore
continui a conteggiare, mentre il
LOAD è tenuto a ‘0’ per non
influenzare il conteggio.
Gli accumulatori vengono
resettati in modo sincrono se il
reset è a ‘1’ oppure se l’output è
terminato (vedere contatore).
Schematico (4)
Con 3 XNOR messi in AND si
verifica se i due conteggi sono
uguali.
Schematico (5)
Le uscite degli shift register
vengono multiplexate in modo da
scegliere le sequenze stesse
oppure il loro valore dimezzato,
in base al risultato del controllo
sui conteggi. Il controllo dei
multiplexer è infatti assegnato
all’uscita dell’AND degli XNOR,
così da lasciar passare le
sequenze di partenza se il
controllo ha restituito ‘1’ oppure
le sequenze dimezzate se il
controllo risulta ‘0’.
Schematico (6)
Mediante un FULL ADDER a 8 bit
vengono sommate le sequenze
opportune, provenienti dalle
uscite dei multiplexer. Il risultato
della somma viene mandato ad
entrambe le uscite, che saranno
discriminate sempre in base al
risultato del controllo.
Schematico (7)
L’uscita parallela è realizzata
mediante un registro parallelo a
8 bit, sempre attivo e resettato in
modo sincrono dal reset, da E
(fase di lettura) oppure dal
controllo positivo del conteggio
(si attiva l’uscita seriale).
Schematico (8)
Anche in questo caso, l’uscita
seriale è realizzata mediante un
FlipFlop Delay resettato in modo
sincrono dal reset, da E (fase di
lettura) oppure dal controllo
negativo dei conteggi (si attiva
l’uscita parallela).
Per fare in modo che dall’uscita
seriale esca la somma delle
sequenze a partire dal bit meno
significativo, le uscite del FULL
ADDER sono multiplexate e
controllate dal contatore: ad ogni
ciclo di clock verrà lasciato
passare il bit opportuno, a
cominciare, appunto, da quello
meno significativo.
Schematico (9)
E’ stato utilizzato un contatore a
4 bit per realizzarne uno x8. Il
contatore a 4 bit sarà dunque
resettato dopo la fine del
conteggio (Q3 = 1, reset
sincrono). Il contatore è resettato
anche dal reset oppure da E (fase
di lettura).
L’OR in alto a sinistra tra il
segnale di reset e il
raggiungimento di ‘7’ nelle uscite
del contatore va a resettare gli
accumulatori per il conteggio
degli ‘1’.
Testbench VHDL (1)
Librerie ed entity
Architecture:
component
Segnali
Port Map
Testbench VHDL (2)
Clock_process per
la gestione del
clock e
Reading_process
per la gestione del
segnale E
Testbench VHDL (3)
Prima lettura:
X1 = «00001101»
X2 = «00100110»
Testbench VHDL (4)
Seconda lettura:
X1 = «00100111»
X2 = «01001100»
Simulazione behavioral
<<<<<
Nella zona in arancio vediamo che si attiva l’uscita
seriale, come da specifiche (X1 = «00001101» e
X2 = «00100110» hanno lo stesso numero di ‘1’).
Negli 8 clock successivi alla fine della lettura
l’uscita seriale porta in output la sequenza
«11001100». Le specifiche parlavano di uscita
seriale dal bit meno significativo, dunque la
nostra sequenza di uscita sarà «00110011», cioè
la somma tra X1 e X2.
Nella zona in giallo si attiva invece l’uscita parallela
(X1 = «00100111» e X2 = «01001100» non hanno lo
stesso numero di ‘1’). Per 8 clock successivi alla fine
della lettura l’uscita parallela porta in output la
sequenza «00111001». Essendo X1 / 2 = «00010011»
e X2 / 2 = «00100110», la sequenza in output è
uguale alla somma di X1 e X2 dimezzati, come da
specifiche.
Simulazione post-route (1)
Comportamento analogo alla behavioral,
con introduzione dei ritardi.
Simulazione post-route (2)
Si può notare un ritardo di 7,702 ns
tra il fronte del clock e l’attivazione
dell’uscita seriale.
Per quanto riguarda l’uscita
parallela, prima di una
configurazione stabile abbiamo
un ritardo di 7,736 ns.
Troviamo una differenza di 34
ps trai due ritardi.
Scarica

Presentazione