1) Vorrei capire a fondo il funzionamento di determinati segnali;
prendendo ad esempio il contatore, come si utilizzano esattamente TC,
LE, CLR? Cioè, come viene generato il TC?
Il TC viene generato semplicemente decodificando il conteggio terminale
del contatore: in un contatore up modulo N, esso sara' la decodifica del
conteggio N-1; in un contatore down modulo N, esso sara' la decodifica del
conteggio 0, qualunque sia N.
Il TC puo' essere o meno condizionato al CE (Count Enable) del
contatore. (Nei contatori reali disponibili in commercio, spesso esistono
due CE, ad uno solo dei quali il TC e' condizionato; il contatore e'
abilitato al conteggio solo se entrambi i due CE sono attivi.) Questa
proprieta' e' legata all'uso che si fa del TC. Ad esempio, se vogliamo
connettere due o piu' contatori in cascata, collegheremo il TC di ogni
contatore al CE del contatore successivo -- ma in tal caso, per il
corretto funzionamento del tutto, il TC di ogni contatore deve esere
condizionato al proprio CE. Se invece vogliamo usare il TC per bloccare il
contatore una volta che esso e' arrivato al massimo conteggio, allora
connettiamo il TC negato al CE -- ma in tal caso e' evidente che TC non
deve essere condizionato al CE, altrimenti il loop CE - TC - invertitore -
CE entrerebbe in oscillazione!
Posso assumere che esso resta alto per tutto il periodo il cui il
contatore è nell'ultimo stato?
Certamente, essendo appunto la decodifica di un particolare conteggio.
Ma, essendo un segnale 'sporco' per cosa posso usarlo
effettivamente?
Ad esempio per inviarlo all'Enable di un registro D, o al Count Enable
di un altro contatore, perche' in questi casi il segnale viene campionato
solo all'arrivo del clock, e dunque si spera che nel frattempo il TC si
sia assestato.
LE è un segnale sincrono, quindi potrei mandare il TC
nell'ingresso di LE senza aver problemi?
Nei contatori commerciali LE si trova sia sincrono che asincrono, senza
una netta prevalenza dell'uno o dell'altro. Per questa ragione, e' bene
specificare *sempre* nei progetti quale caso si sta assumendo.
Il CLR invece, è sempre asincrono oppure può anche essere
sincrono?
Normalmente e' asincrono; in rari casi, se la cosa ci puo' far comodo,
possiamo assumere che sia sincrono. (E' opportuno specificare sempre, nel
progetto, se ci troviamo in uno di questi "rari casi" oppure
no.)
Poiché CLR è asincrono, mandare TC nel suo ingresso mi può
creare problemi, giusto? Mi renderebbe instabile (di breve durata)
l'ultimo stato del contatore, giusto?
Si', ma non e' detto che questo sia dannoso. Come ho fatto vedere a
lezione nel caso generale, la decodifica di un conteggio M inviata al
Clear asincrono consente di realizzare in maniera semplice un contatore di
modulo M-1. Normalmente non ci sono problemi, salvo quando la frequenza di
clock diventa eccessivamente alta e allora la durata di quello stato
"instabile" diventa significativa.
Poiché il CE è sincrono, potrei usare tranquillamente il TC di
un contatore per abilitare il CE di un altro contatore, giusto?
Esatto, ne abbiamo parlato anche sopra.
Può darmi dei consigli, delle 'dritte' (del tipo "cosa non
fare mai..." o "quando conviene usare un determinato
segnale...", ecc..), su come utilizzare al meglio i vari segnali
sincroni e non?
Non e' facile dire, cosi' su due piedi. I segnali di controllo
asincroni agiscono immediatamente, mentre quelli sincroni hanno effetto
solo all'arrivo del clock; l'uno e l'altro effetto possono essere sia
vantaggiosi che svantaggiosi, a seconda delle circostanze.
Un caso che mi sento di mettere in evidenza, perche' appare molto
spesso ma altrettanto spesso viene trattato con superficialita', e' quello
di un segnale della durata di un clock che viene applicato al Clear
asincrono di un contatore per farlo ripartire (tipico segnale di Start).
In questo caso c'e' da fare molta attenzione, poiche', se si analizza la
situazione, si vedra' che lo stato 0 del contatore permane per *due*
periodi di clock: non appena viene applicato il segnale, il contatore
passa immediatamente a 0, poi arriva un clock e il segnale scompare subito
dopo, e il contatore passera' al conteggio 1 soltanto dopo il prossimo
clock!
2) Relativamente ai FF di tipo edge-triggered ed ai FF Latch: a
parte il fatto che l'edge-triggered è sensibile solo sul fronte (salita
o discesa) mentre il latch è sensibile su tutto lo stato di
"1" del segnale di gate, ci sono altre differenze sostanziali?
No, non vi sono altre differenze sostanziali, non dal punto di vista
logico, almeno.
In particolare, su quali tipi di connessioni viene preferito il
latch all'edge-triggered e viceversa?
Il latch viene usato quando il segnale di caricamento non e' legato a
un clock, oppure quando il clock a cui esso e' sincronizzato non e'
disponibile. In tutti i casi in cui invece tale clock e' disponibile, e'
raccomandabile usare il D-FF -- a meno che non sia necessario che il dato
da catturare venga presentato immediatamente all'uscita. Tipicamente, il
latch viene usato lato interfaccia; all'interno del circuito, dove tutto
e' (o dovrebbe essere) sotto il controllo del progettista, raramente vi
sono ragioni per non usare il D-FF.
So che nei sistemi che progettiamo in questo corso utilizziamo un
solo clock di tipo a fronte;
Non e' detto. Possono anche capitare (sono capitati) progetti che
richiedono l'uso di due o piu' clock distinti.
i latch li usiamo come registri di interfaccia (data-buffer) con i
microprocessori (solo per le periferiche di output del microprocessore,
giusto?),
Beh, si', le porte di input (in uscita dall'interfaccia) sono sotto il
nostro controllo, e dunque, come ho detto sopra, raramente vi sono ragioni
per usare latch.
di cui si può utilizzare l'AND tra i segnali IOWR e SEL come
ingresso di sincronizzazione (gate) del latch. L'uscita del latch può
essere collegata all'ingresso di un registro interno allo SCA
sincronizzato con il clock del sistema. C'è altro?
Direi di no.
3) Slide di Chiari, Parte 1 - Reti Combinatorie - slide 87: in
riferimento ai due schemi a fondo pagina che implementano le due
funzioni cablate, ho capito che si usano porte normali prive della
resistenza, in quanto viene utilizzata un'unica resistenza di pull-up
sul bus che è in comune per tutte le porte connesse al bus, ma: la
prima figura sembra un NOR, ma accanto c'è scritto NOR CABLATO, OR
CABLATO, AND CABLATO, perchè? la seconda sembra una funzione espressa
come OR di AND e poi negata, ma accanto c'è scritto NOR CABLATO, OR
CABLATO, AND CABLATO, perchè? Come funzionano esattamente queste
funzioni 'cablate'?
Intanto qui sono buffer tri-state, un po' diversi dalle porte normali
prive di resistenza (meglio: prive dello stadio di uscita superiore che
forza il livello "1" sull'uscita). Il funzionamento di queste
"porte" e' molto semplice:
(a) se l'abilitazione del singolo buffer tri-state e' a 1, allora il
livello logico presente al suo ingresso viene trasferito sull'uscita;
(b) se l'abilitazione del singolo buffer tri-state e' a 0, allora il
livello logico presente al suo ingresso e' irrilevante e la sua uscita
(essendo ad alta impedenza) non da' alcun contributo al livello logico
presente sull'uscita della "porta";
(c) se tutti buffer tri-state hanno i rispettivi Enable a 0, allora il
livello di uscita viene determinato dalla tensione connessa al resistore
di carico (che verra' chiamato di "pull-up" se la tensione e'
positiva, e di "pull-down" se il resistore e' collegato a massa
o a una tensione negativa)
Il comportamento della prima "porta", quella identificata
come "NOR cablato", che ha buffer tri-state con ingressi a 0 e
un resistore connesso a una tensione positiva, e' allora il seguente:
(a) se tutti gli Ei stanno a 0, allora l'uscita e' 1
(b) se almeno un Ei sta ad 1, allora l'uscita e' 0
che e' esattamente il comportamento di un NOR.
Il comportamento della seconda "porta", quella identificata
come "OR cablato", che ha buffer tri-state con ingressi a 1 e un
resistore connesso a una tensione negativa, e' invece il seguente:
(a) se tutti gli Ei stanno a 0, allora l'uscita e' 0
(b) se almeno un Ei sta ad 1, allora l'uscita e' 1
che e' esattamente il comportamento di un OR.
Il termina "cablato" significa che una particolare funzione
logica di piu' ingressi viene realizzata semplicemente
"cablando" tra di loro in parallelo le uscite di piu' circuiti.
4) Libro Reti Combinatorie.
A) Pag. 98, paragrafo III.3.5: dobbiamo studiare anche la logica
steering dinamica? Se sì, come funziona?
No, non dobbiamo studiarla; non l'abbiamo fatta a lezione, dunque non
si porta all'esame. (Peccato, era una cosa interessante...)
B) Pag. 115 [errate corrige?]: la seconda formula in questa pagina
è la seguente:
f1 = I1 + I3 ; f2 = yz + x ; f3 = I1 + I2
ma non dovrebbe essere:
f1 = I1 + I2 ; f2 = yz + x ; f3 = I1 + I3
E' esatto, c'e' evidentemente un errore di stampa.
C) Pag. 132, figura V.6 [errate corrige]: già le avevo mostrato
questa figura ed avevamo appurato che gli indici non erano corretti;
comunque gliela segnalo nuovamente nel caso in cui volesse correggerli
per l'eventuale errata corrige.
La copia del testo che io ho e' quella temporaneamente cedutami dal
Prof. Cioffi, che ha gia' apportato parecchie correzioni a matita sugli
indici nella figura in questione. Purtroppo, questo comporta che non
riesco a leggere le espressioni per gli indici prima della correzione, e
leggo con difficolta' quelle dopo la correzione. Se potesse mandarmi una
scansione a risoluzione relativamente alta della figura, posso vedere di
mettere a posto la cosa.
D) Pag. 142 [errate corrige?]: Alla 3° riga non mi torna la frase
"La struttura completa di un moltiplicatore 5 x 5 è riportata in
fig. V.16." ... la figura V.16 non mostra un moltiplicatore 5 x 5
....; inoltre la struttura non mi sembra completa...vedo solo il
circuito per addizionare i prodotti parziali, ma non la matrice dei
prodotti parziali...
Infatti, e' un generico moltiplicatore n x n.
5) Libro Reti Sequenziali.
A) Pag. 19 [errate corrige?]: relativamente alla seconda matrice in
questa pagina, se ho capito bene come funziona, all'incrocio (riga
- colonna) B - C non dovrebbe essere 0 ?
Si', ma personalmente sono portato a ritenere che invece sia sbagliata
la Fig. 1-13. Se ci fa caso, dallo stato A si esce con ingresso 0 sia
verso lo stato B (con uscita 0) sia verso lo stato C (con uscita 1) -- il
che e' impossibile (almeno per una macchina a stati finiti
"deterministica"); la stessa cosa accade per lo stato C e
l'ingresso 1 (e qui sono portato a ritenere che la freccia da C a B vada
invertita, da cui segue che l'elemento della matrice delle adiacenze da
lei citato abbia in realta' valore corretto). Temo che nella Fig. 1-13
manchi qualche transizione, e/o che l'etichetta o la direzione di qualche
transizione sia sbagliata.
B) Pag. 21, prime 6 righe: non riesco a capire perché l'uscita
per una macchina di Mealy è disponibile dopo un tempo Tw, mentre per
una macchina di Moore è disponibile dopo un tempo Tdelta + Tw ...
Basta osservare la Fig. 1-15 (pag. 20) per rendersi conto che, in una
macchina di Mealy, una variazione in ingresso si propaga all'uscita
passando attraverso il blocco omega (da cui Tw); mentre in una macchina di
Moore, una variazione in ingresso deve prima provocare un cambio di stato
(Tdelta) ed e' poi quest'ultimo che si propaga attraverso il blocco omega
(da cui l'ulteriore tempo Tw).
C) Pag. 40 [errate corrige?]: in riferimento all'ultima riga della
pagina, dove si ha "...alla rete è diventato sk, la macchina
passerebbe in si.", non dovrebbe essere "...alla rete è
diventato sk, la macchina passerebbe in sj."?
Si', secondo la tabella 2-3 la transizione avverrebbe in sj. |