Università di Roma "La Sapienza" - Facoltà di Ingegneria
Laurea Specialistica in Ingegneria Informatica - Corso di Reti Logiche

Q & A (6)

[ Precedente ][ Indice ][ Successivo ]

 


Date: Wed, 13 Dec 2006 19:34:06 +0100
Subject: Progetto d'esame del 2005-01-11
Relativamente al progetto dell'11/01/2005 le ho inviato in allegato un'immagine che contiene solo la parte del progetto sulla quale mi interessa chiederle spiegazioni

pdf32.jpg (977 bytes)
0612171723.pdf

Vorrei sapere se è corretto il modo che ho realizzato per gestire i CE dei due contatori. Va bene oppure è troppo contorto e/o dispendioso in componenti?

Molto piu' semplicemente (v. allegato), io avrei:

(1) trasformato il fronte di salita del segnale "tasto premuto" KP in un impulso P prodotto applicando KP all'ingresso di un flip-flop D, con P = And(KP,Q*);

(2) con quest'impulso P avrei pilotato l'ingresso J del flip-flop JK di Interrupt Request, con IACK sul Clear;

(3) con la combinazione Nor(IRQ,KP) avrei generato il Count Enable.

La sua logica e' sostanzialmente identica, solo meno immediata da comprendere e un po' piu' contorta.

pdf32.jpg (977 bytes)
0612171723-1.pdf

 


Date: Wed, 13 Dec 2006 23:27:22 +0100
Subject: Chiarimenti...
Nei progetti capita di dover lavorare con numeri di bit che non sono potenze di 2. A questo proposito vorrei sapere quando devo estendere gli ingressi con degli 0. Per quali componenti gli ingressi devono essere necessariamente delle potenze di 2? Ad esempio se devo sommare due numeri a 22 bit, li estenderò con due zeri per arrivare a 24, giusto? Per quali componenti dunque devo fare questo ragionamento? Inoltre di che tagli dispongo...ingressi da 2, 4, 8, 16, 32, 64? Oppure posso utilizzare anche ingressi ad esempio da 12 bit, 20 bit, ecc...?

Potrebbe anche mostrarmi nuovamente l'hardware per interfacciare una RAM da 2 milioni di word (intese come 16 bit) in scrittura da parte di un microprocessore a partire dall'indirizzo 80000000h? Da quello che ho capito a ricevimento dovrebbe essere così:

- negli indirizzi della RAM entrano i bit 2..22 del MAB (Memory Address Bus);
- il WE della RAM è l'AND tre il segnale MWR (Memory WRite) e l'AND dei bit 23..31 del MAB in configurazione 100000000 ;
- nell'ingresso dati della RAM entrano i 32 bit del MDB (Memory Data Bus);
- nel CS della RAM entrano i bit Mb0 ed Mb1 (che dovranno essere sempre entrambi pari ad 1 dal momento che sto scrivendo delle word).

Quello che ho scritto è corretto e completo?

Diciamo che nei "nostri" progetti questi sono problemi del secondo o del terzo ordine, che diventano importanti solo quando si ha che fare con moduli (di yipo commerciale) in cui il numero di ingressi e' predefinito, e noi dobbiamo adattarci ad esso. In realta', con le moderne logiche programmabili, in cui si hanno a disposizione in un singolo chip migliaia e miglia di porte che possono essere interconnesse (pressoche') a piacimento, questo problema e' davvero poco sentito: nel "mondo reale" ci si trova ad aver a che fare con "librerie" di moduli con numero di ingressi predefinito, gli ingressi non utilizzati vengono forzati a 0 o a 1 secondo necessita', e poi ci pensano i "compilatori" di circuiti ad eliminare dai moduli precostituiti le porte ridondanti, i doppi invertitori, e cosi' via.

Potrebbe anche mostrarmi nuovamente l'hardware per interfacciare una RAM da 2 milioni di word (intese come 16 bit) in scrittura da parte di un microprocessore a partire dall'indirizzo 80000000h? Da quello che ho capito a ricevimento dovrebbe essere così:
- negli indirizzi della RAM entrano i bit 2..22 del MAB (Memory Address Bus);

2 Mword = 4 Mbyte, dunque sono impegnati 22 bit di indirizzo (dal bit 0 al bit 21); ma i bit 0 e 1 non esistono fisicamente sul bus, essendo implicitamente decodificati sulle line MB[0-3] (Memory Bank). Ad esempio, se voglio accedere alla word di indirizzo 0, avro' MAB[2-31] = 000...0, MB0 = MB1 = 1, MB2 = MB3 = 0 (perche' la word in questione appare sui due byte meno signficativi del Memory Data Bus); se invece voglio accedere alla word di indirizzo 2, avro' ancora MAB[2-31] = 000...0, ma stavolta MB0 = MB1 = 0, MB2 = MB3 = 1 perche' la word appare adesso sui due byte piu' significativi del Memory Data Bus. Se voglio accedere a un singolo byte, un solo MBx sara' ad 1 (e mi indica su quale byte dei quattro del Memory Data Bus e' presente il dato in questione) e tutti gli altri tre a 0; se voglio accedere a una longword (con indirizzo allineato ai 4 byte, ossia esattamente divisibile per 4), avro' tutti gli MBx contemporaneamente attivi.

- il WE della RAM è l'AND tre il segnale MWR (Memory WRite) e l'AND dei bit 23..31 del MAB in configurazione 100000000 ;

Dei bit 22-31, non 23-31.

- nell'ingresso dati della RAM entrano i 32 bit del MDB (Memory Data Bus);
- nel CS della RAM entrano i bit Mb0 ed Mb1 (che dovranno essere sempre entrambi pari ad 1 dal momento che sto scrivendo delle word).

Lei puo' organizzare la RAM in due modi, a parole da 16 bit o a parole da 32 bit. Nel primo caso, semplifica le operazioni di lettura da parte dell'interfaccia e complica leggermente quelle di scrittura da parte della CPU; nel secondo caso, rende la RAM direttamente compatibile con il System Bus ma complica un po' le operazioni di lettura da parte dell'interfaccia. Dia un'occhiata al PDF allegato.

pdf32.jpg (977 bytes)
0612171732-1.pdf

 


Date: Thu, 14 Dec 2006 16:20:34 +-100
Subject: Comparatori
La mia domanda riguarda i comparatori:

Che senso ha effettuate il confronto di due numeri (A e B) a N bit ciascuno confrontando tutti gli N bit (qualsiasi sia l'architettura del comparatore) quando dal confronto dei primi M bit (con M<N) più significativi posso dedurre già che A>B o viceversa?

Faccio un esempio per essere più chiaro:

A= 01001010....1010 (64 bit)
B= 01010010....0101 (64 bit)

Posso dedurre che A>B analizzando i primi 4 bit più significativi, senza analizzare gli altri 60 bit.

Sulla base di questa mia deduzione, penso che sarebbero più efficienti comparatori che siano in grado di confrontare valori (A e B di N bit) partendo dai più significativi, in modo tale che alla prima coppia di bit non uguale tra A e B posso già dedurre quale è il maggiore. Nel peggiore dei casi analizzo tutti i bit se A=B.

Il suo ragionamento e' piu' che corretto; ne' e' molto difficile progettare una cella elementare di comparatore nel caso in cui il confronto abbia luogo a partire dal bit piu' significativo anziche' dal meno significativo, e applicare a tale struttura tutte le ottimizzazioni che il libro di testo ci suggerisce (in realta', quasi tutti i comparatori commerciali operano proprio su questo principio). Tuttavia, tale ragionamento e' applicabile solo se i dati appaiono in parallelo, oppure se appaiono in seriale a partire dal bit piu' significativo.

(Ne' nascondo il fatto che a lezione, per ragioni squisitamente didattiche, preferisco deviare il meno possibile da cio' che il libro di testo propone.)

 


Date: Thu, 14 Dec 2006 16:47:27 +0100
Subject: Progetto d'esame del 2005-06-27
Le invio la prova d'esame del 27-06-2005.

pdf32.jpg (977 bytes)
0612171746.pdf

(1) L'interfacciamento al Memory Bus del PD-32 e' un po' piu' complicato di quanto non appaia nel suo progetto, perche' i byte sul Data Bus possono apparire sui bit 0-7, oppure sui bit 8-15, oppure sui bit 16-23, oppure sui bit 24-31, a seconda che il resto del loro indirizzo diviso per 4 sia rispettivamente 0, 1, 2, o 3. Inoltre, le linee MAB[0-1] non sono fisicamente presenti, ma la loro funzione e' in parte svolta dalle linee ausiliarie MB[0-3] (Memory Bank).

(2) C'e' una reale necessita' di usare il valore N-1, anziche' N, all'ingresso del comparatore?

(3) I registri che fanno da porte di input vengono caricati in continuazione; occorre invece gestire il loro Load Enable nel momento opportuno.

 


Date: Thu, 14 Dec 2006 17:16:52 +-100
Subject: Temporizzazioni SCO-SCA
Guardando i vecchi compiti d'esame, ho visto un esercizio sulle temporizzazioni di reti con le varie combinazioni di SCA e SCO Mealy, Moore e DMealy. Volevo chiederle se noi del nuovo ordinamento dobbiamo quindi studiare queste combinazioni.
Direi di si'. Una volta afferrato il meccanismo, non mi pare che sia molto difficile passare dall'una all'altra combinazione. Quel tipo di domanda, d'altra parte, puo' capitare su un qualunque circuito, che comprenda o meno flip-flop o registri.

 


Date: Thu, 14 Dec 2006 19:49:59 +0100 (CET)
Subject: Tempi di setup, hold, etc.
Non mi è molto chiara la differenza tra tempo di hold, setup e reg.

Mi potrebbe dare una definizione precisa.

Il Treg (meglio: tempo di commutazione) e' l'intervallo di tempo che trascorre tra l'istante in cui arriva il fronte attivo (tipicamente, di salita) del clock e l'istante in cui tutte le uscite del registro si sono definitivamente assestate sul nuovo stato. Questo nel caso di circuiti sincroni, ossia asserviti a un clock; nel caso di circuiti asincroni, e' il tempo che passa dall'istante in cui varia uno degli ingressi e l'istante in cui le uscite e/o lo stato si assestano definitivamente sui nuovi conseguenti valori.

Poiche' un flip-flop (o un registro) non e' ovviamente in grado di reagire ad una variazione di ingresso che avvenga troppo poco tempo prima del fronte attivo del clock, il Tsetup e' l'intervallo minimo di tempo "prima" del fronte di clock entro cui l'ingresso deve essersi assestato affinche' il suo nuovo stato possa essere "percepito". In altri termini: se un ingresso commuta all'istante T, e il fronte di clock si presenta a un istante Tclk < T + Tsetup, la corretta commutazione non e' garantita.

Poiche' un flip-flop (o un registro) ha bisogno di un certo tempo per assestare i suoi circuiti interni in conseguenza di un certo ingresso, il Thold e' l'intervallo di tempo "dopo" il fronte attivo di clock entro cui gli ingressi devono restare ancora stabili affinche' la transizione di stato desiderata abbia correttamente luogo. In altri termini: se un ingresso commuta all'istante T, il fronte di clock si presenta a un istante Tclk > T + Tsetup (dunque i vincoli sul tempo di setup sono rispettati) ma l'ingresso commuta ancora a un istante T' < Tclk + Thold, la corretta commutazione non e' garantita.

In definitiva, detti T e T' gli istanti di due successive commutazioni dell'ingresso, la transizione desiderata in corrispindenza al valore degli ingressi che si ha nell'intervallo [T, T'] e' garantita solo se l'istante Tclk in cui si presenta il fronte attivo del clock soddisfa le due condizioni:
         T + Tsetup < Tclk < T' - Thold

 


Date: Thu, 14 Dec 2006 20:45:07 +0100
Subject: IFKEY con ricerca binaria
Ho svolto il progetto IFKEY visto a lezione implementando la ricerca binaria.

La temporizzazione che ho prodotto è eccessivamente parziale e di soli 3 colpi di ck. Serve solo a far capire il motivo del caricamento asincrono nei registri RMIN e RMAX.

pdf32.jpg (977 bytes)
0612171755.pdf

Non c'e' necessita' del registro RM: RMIN e RMAX producono un dato stabile, dunque anche l'addizionatore produce un dato stabile fino al prossimo clock. Il resto va abbastanza bene.

 


Date: Fri, 15 Dec 2006 10:51:46 +0100
Subject: Progetto d'esame del 2005-04-14
Per preperarmi all'esame stò svolgendo alcuni progetti assegnanti dal prof. Chiari nel 2005 (quelli messi in rete da Lei). Tra quelli che mi hanno dato più problemi c'è sicuramente il tema del 14-4-2005 (equalizzatore digitale).

pdf32.jpg (977 bytes)
0612171801.pdf

La sua soluzione, di distribuire i bit di ciascun campione su 8 shift register e di prelevare poi alla fine gli 8 bit del campione multiplexando gli 8 shift register, e' semplicemente improponibile. Molto piu' semplice caricare gli 8 bit di ciascun campione su un unico shift register, e poi copiarli su un pipeline di 8 registri, risparmiando in tal modo un decoder e un multiplexer (piuttosto corposo: quello che lei disegna all'ingresso della ROM e' un multiplexer, non un demultiplexer).

Altrettanto improponibile e' la soluzione di una ROM con parola da 8x32 bit seguita da multiplexer (anche in questo caso, quello che lei disegna e' un multiplexer, non un demultiplexer come illustrato): e'sufficiente una ROM a parole da 8 bit, con 32x256 parole, il che evita del tutto l'uso di multiplexer all'uscita.

 


Date: Fri, 15 Dec 2006 15:50:34 +0100 (CET)
Subject: Dubbio sulle memorie FIFO
Mi è venuto un dubbio sulle memorie FIFO, vorrei sapere se possono essere lette e scritte solo a byte o anche a word e longword.
E' un po' come le RAM o le ROM: esistono moduli con determinati tagli in termini di dimensione della parola, ma se abbiamo bisogno di parole con dimensioni particolari e' sempre possibile mettere assieme piu' moduli in maniera opportuna e ottenere la dimensione desiderata. Cosi', ad esempio, e' possibile usare due FIFO con lo stesso numero di byte per ottenere un singolo FIFO con lo stesso numero di word.

 


Date: Fri, 15 Dec 2006 22:23:54 +0100
Subject: Abilitazione contemporanea di E e OE?
Abbiamo letto che forse non ce la fa a correggere i progetti mandati in ritardo ma questo è il nostro primo progetto inviatole e quindi vorremmo conferma di nostre convinzioni che poi magari sono false.

Le allego SCA e SCO dell'esame di Calcolatori Elettronici del 14/09/06.

Inoltre le pongo una domanda: ad un registro di tipo D si possono contemporaneamente abilitare la scrittura(E) e la lettura(OE)?

Secondo noi no e infatti il progetto è realizzato supponendo che contemporaneamente non si possono fare queste operazioni.

Rispondo subito alla domanda, ma per la correzione del progetto purtroppo vi devo mettere in fila.

La risposta alla domanda e' "si'". Che cosa mai potrebbe vietarlo? Non c'e' nessun tipo di interferenza tra ingresso e uscita (a meno che non la si crei appositamente all'esterno del registro; e anche se fosse, il fatto che il cambio di stato nel registro e' asservito al clock implica che avremo comunque un comportamento "ordinato"). Considerate cosa accade se vengono contemporaneamente abilitati E e OE: prima dell'arrivo del prossimo clock, sulle uscite si presenta il contenuto attuale del registro, appena arriva il clock il registro cambia di stato e questo cambiamento appare anche sulle uscite. Come vedete, non c'e' stata nessuna particolare anomalia.

 

[ Precedente ][ Indice ][ Successivo ]


Last update 2006-12-17 18:58