Le invio il progetto svolto del 12/12/05 Tema A.
0612170039.pdf
Ho trovato alcune sue correzioni relative a questo progetto, e ho
provato a lavorare di conseguenza.
Avviso subito che nelle temporizzazioni, perché il tutto possa avere
senso, è necessario ritardare visivamente SYNC_IN e D di un colpo di ck.
Mi sono accorto in ritardo di questo errore.
Le descrivo il funzionamento atteso della SCA:
Non l'ho indicato, ma assumo che, una volta alimentata la SCA, nei
registri, FF, contatori, SIPO, PISO, arrivi un impulso di RESET che azzeri
(0 logico) il contenuto di queste componenti. L'arrivo del primo bit del
byte 0 dal mondo esterno, con contemporanea salita (1 logico) del segnale
di SYNC_IN, azzera per un ciclo di ck il contatore CNT0, il quale inizia a
contare indefinitamente. Ad ogni istante, il suo contenuto indica quale
bit del byte è contenuto nel Q7 del SIPO che riceve i dati seriali dal
mondo esterno. Quando TC0 sale, viene abilitato per un ck il WE della FIFO
per memorizzare il byte di dati. Questo prosegue per diversi ck, fino a
quando la coda si riempie e QF sale. Fatto che, per noi, indica che è
stata terminata la memorizzazione del messaggio. Da questo punto in poi,
la SCA deve leggere i byte dalla FIFO, combinarli opportunamente, e
inviarli serialmente. Quindi, si utilizza il fatto di aver visto QF=1 e lo
si memorizza in REG, uscita del quale inibisce (tramite la porta AND) la
scrittura futura di WE (fino a quando arriverà un altro messaggio da
scrivere nella FIFO). Quando è arrivato l'ultimo bit del messaggio da
scrivere nella FIFO (TC0 ritardato di un colpo di ck) e ho visto QF=1,
inizia a leggere, memorizza il byte prelevato dalla FIFO in un registro
latch, esegue la combinazione dei bit con la chiave memorizzata nel
registro da parte del processore e carica nel PISO il byte da inviare
serialmente (dalle temporizzazioni, si nota come QF=1 ritardato sia
esattamente il segnale di SYNC_OUT). Dopo 8 colpi di ck, il PISO carica un
nuovo byte e questo prosegue finché QE=0. A questo punto la SCA invia 0
logico sulla linea seriale.
Nota: nelle temporizzazioni, sulla linea Sout, D6(Bn) è in realtà
D7(Bn) e significa bit 8 (ultimo bit) del Byte n-esimo (ultimo Byte),
mentre n sulla linea REGFIFO significa ultimo byte.
La cosa che secondo me è poco realistica è l'assunzione di fondo che
ho fatto, ovvero di ipotizzare che, dopo la corretta scrittura di un
messaggio, possa stare tranquillo di non ricevere altri SYNC_IN mentre sto
codificando e inviando serialmente il messaggio.
Purtroppo, mi sono reso conto che avrei dovuto pensare meglio soltanto
verso la fine del compito.
Se questo dovesse capitare all'esame, non avrei probabilmente il tempo
di modificare in tutto o in parte quello che ho fatto.
Le domande sono:
1) Ci sono errori macroscopici che non ho notato in quanto ho fatto in
questo progetto?
2) Risulterebbe comunque sufficiente, in termini di valutazione,
utilizzare una soluzione non troppo realistica, come in questo caso?
3) Questa domanda esula dal progetto specifico. Ho notato che, a volte,
si preferiscono usare i buffer tri-state al posto dei MUX. Non è
stupefacente, considerando che si sta parlando di una porta contro,
solitamente, più porte in cascata. Allora la domanda è, perché non
usare sempre buffer tri-state? Spero non sia una domanda sciocca. |
Le invio il progetto svolto del 12/12/05 Tema A.
[...]
Direi che, a parte le considerazioni che lei stesso fa subito dopo, non
ci sono grossi problemi. Non si capisce da dove venga il segnale QREG che
concorre ad abilitare il contatore in basso a sinistra, ma immagino che
sia l'uscita del flip-flop che memorizza l'evento di coda piena.
La cosa che secondo me è poco realistica è l'assunzione di fondo
che ho fatto, ovvero di ipotizzare che, dopo la corretta scrittura di un
messaggio, possa stare tranquillo di non ricevere altri SYNC_IN mentre
sto codificando e inviando serialmente il messaggio.
Purtroppo, mi sono reso conto che avrei dovuto pensare meglio
soltanto verso la fine del compito.
Se questo dovesse capitare all'esame, non avrei probabilmente il
tempo di modificare in tutto o in parte quello che ho fatto.
Esatto.
1) Ci sono errori macroscopici che non ho notato in quanto ho
fatto in questo progetto?
No, a parte la considerazione di fondo.
2) Risulterebbe comunque sufficiente, in termini di valutazione,
utilizzare una soluzione non troppo realistica, come in questo caso?
Sicuramente sufficiente, almeno in questo caso.
3) Questa domanda esula dal progetto specifico. Ho notato che, a
volte, si preferiscono usare i buffer tri-state al posto dei MUX. Non è
stupefacente, considerando che si sta parlando di una porta contro,
solitamente, più porte in cascata. Allora la domanda è, perché non
usare sempre buffer tri-state? Spero non sia una domanda sciocca.
Qualcuno disse una volta: "Non esistono domande sciocche, solo le
risposte talvolta possono esserlo." Al di la' delle corrette
considerazioni che lei stesso fa sul numero di porte nell'uno e nell'altro
caso, occorre considerare che al multiplexer standard si invia un codice
di selezione binario, mentre al multiplexer realizzato con tri-state
occorre inviare un codice 1-su-N gia' decodificato: se tale codice non e'
gia' pronto in qualche modo, occorrera' usare un decoder, il che
probabilmente vanifica il risparmio sul numero di porte. Un'altra
considerazione spesso importante e' il numero di collegamenti e il
percorso ("routing") che essi devono fare: in un multiplexer
standard (che diremo "concentrato") gli N segnali di ingresso
devono tutti viaggiare lungo il sistema fino a raggiungere il multiplexer,
nel caso di porte tri-state (multiplexer "distribuito") l'unico
segnale che viaggia su grande scala e' l'uscita del multiplexer. In
quest'ultimo caso, tuttavia, un percorso altrettanto lungo deve essere
seguito dai segnali di abilitazione, il che ci potrebbe riportare al punto
di partenza; tuttavia, se essi possono essere generati localmente, come
nel caso delle combinazioni IORD*SEL nelle porte di input, allora il
vantaggio e' indiscutibile. Un'ultima considerazione: mentre un
multiplexer classico ha sempre un numero di ingressi pari a una potenza di
2 (numero che peraltro deve essere definito anzitempo), il multiplexer a
porte tri-state puo' facilmente essere realizzato per un numero qualunque
di ingressi, senza conseguente spreco di porte inutilizzate. (Quest'ultima
considerazione tuttavia, alla luce delle moderne tecniche di realizzazione
mediante "gate array", va presa con le molle, perche' i
"compilatori" di circuiti sono solitamente in grado di
identificare le porte non usate o comunque ridondanti e di renderle di
conseguenza riutilizzabili.) |