Università di Roma "La
Sapienza" - Facoltà di Ingegneria
Laurea Specialistica in Ingegneria Informatica - Corso di Reti Logiche
[ Precedente ][ Indice ][ Successivo ] |
|
||
Date: Fri, 22 Dec 2006
15:13:15 +0100 Subject: Progetti di Calcolatori 2 |
||
In previsione dell'esame di reti di Gennaio le
invio le 2 prove di Calcolatori 2 fatte. Nella seconda in particolare,
SEROUT, il comportamento temporale del sistema, durante la seconda fase di
lettura, è errata. Il Terminal Cout del contatore abilita il
trasferimento dati nel buffer 3-state solo quando il secondo bit sta
transitando. Dove ho sbagliato?
|
||
SERIN ===== (1) Attenzione all'uso di XSYNC come Clear asincrono: se arrivano due blocchi consecutivi di dati, il contatore resterebbe (erroneamente) al conteggio 0 per *due* clock consecutivi. In circostanze del genere, usare sempre un'inizializzazione *sincrona* del contatore di controllo. (2) Per una ragione opposta, e' bene arrestare il contatore quando e' arrivato al conteggio terminale: se il successivo XSYNC arriva dopo oltre 12 clock, TC ridiventa attivo, il che potrebbe avere conseguenze indesiderate. (3) Non serve a nulla condizionare IORD*SEL anche con l'uscita del flip-flop: se la CPU va a leggere quando il dato non e' ancora pronto, che differenza fa farle leggere un dato errato oppure lo stato del Data Bus non pilotato? (4) Il registro di uscita deve essere caricato tramite un Enable derivato in qualche modo dal TC, non mediante il clock. (5) Il flip-flop di I/O Status deve generare un interrupt, oppure forzare Ready sul bus; altrimenti, come fa la CPU a capire che e' pronto un nuovo dato? SEROUT (1) Il registro di input non puo' essere caricato da STARD, che e' semplicemente un segnale di controllo, ma dalla combinazione IOWR*SEL. (2) Manca una abilitazione al caricamento del PISO, che dovrebbe essere derivata sincronizzando in qualche modo la combinazione IOWR*SEL di cui sopra al clock XCLK; questa stessa abilitazione, ritardata di in XCLK, diventa (in maniera naturale) XSYNC da mandare in uscita. (3) XDATA non va alla CPU, ma al mondo esterno; di conseguenza non ha senso condizionarlo ad un IORD. (4) Il TC deve generare un interrupt, o forzare Ready: altrimenti, come fa la CPU a sapere che il dato e' stato completamente emesso? |
|
||
Date: Tue, 26 Dec 2006
11:41:05 +0100 Subject: Progetti d'esame del 2006-09-14 e del 2006-12-18 |
||
Le invio le mie soluzioni per l'esame di
calcolatori elettronici II del 14-09-06 e per quello di reti logiche
appena svoltosi.
|
||
IFMVP ===== (1) Non e' chiaro quando e in conseguenza di che cosa abbiano inizio le operazioni dell'interfaccia. (2) Dal momento che l'accumulatore invia sempre i suoi dati ad altri registri, puo' risparmiarsi il multiplexer per la costante "0" semplicemente mantenendo l'accumulatore in Clear quando l'interfaccia e' a riposo. (3) Conviene ipotizzare che i registri X abbiano uscita tri-state, evitando cosi' il multiplexer per i dati B del modulo FPMA: i multiplexer richiedono sempre un mucchio di porte! Le ultime due osservazioni non sono veri e propri errori, semplicemente mettono in evidenza dei possibili affinamenti; per il resto la soluzione va benissimo. BINBCD E' piu' o meno cosi' che andava fatto il progetto. Solo alcune osservazioni: (1) Lei ipotizza che, al termine di un blocco da 32 bit, ne abbia subito inizio un altro; nelle trasmissioni seriali non e' cosi', tra un blocco e il successivo puo' trascorrere un numero indefinito di clock, e dunque di dati da ignorare. Cio' comporta che lei avrebbe dovuto contare i 32 bit e caricare il registro di uscita al termine del conteggio, dopo di che aspettare il prossimo XSYNC -- che puo' arrivare anche immediatamente, ma non e' detto. (2) Non ci vuol molto ad aggiungere a ciascuna delle sue celle un rivelatore di zero, inviare le rispettive uscite a un codificatore a priorita', e di qui individuare qual e' la prima cifra signficativa diversa da zero, in modo da iniziare l'emissione a partire proprio da questa cifra. |
[ Precedente ][ Indice ][ Successivo ] |
Last update 2007-02-03 22:14