Prova di laboratorio: luglio 1998


Per l'uso delle librerie si vedano le note.

Testo:

Convertitore da codice binario a Gray a 4 bit.

Si costruisca una rete sequenziale con due ingressi ck e Bin ed una uscita Gr. L' ingresso ck va collegato ad un generatore di un segnale di clock con periodo Ti. Si supporra' che il segnale di clock stia a '0' tra t=0 e t=Ti-fi e stia a '1' per un tempo fi tra Ti-fi e Ti (Il segnale di clock per il testing viene gia' fornito). L' ingresso Bin e' a quattro bit. Tali bit rappresentano un numero tra 0 e 15 in codice binario. Il bit Bin(3) e' il bit più significativo mentre Bin(0) rappresenta il bit meno significativo. Anche l'uscita Gr e' a quattro bit. La rete deve fornire in uscita i quattro segnali Gr(3) - Gr(0), relativi al codice Gray (la sequenza di valori utilizzata nelle mappe di Karnaugh) corrispondente agli ingressi Bin(3) - Bin(0).

La tabella di conversione da codice binario a codice Gray per un ingresso a 4 bit e' la seguente:

Num

Bin(3)

 

Bin(2)

Bin(1)

Bin(0)

Gr(3)

Gr(2)

Gr(1)

Gr(0)

0

0

0

0

0

0

0

0

0

1

0

0

0

1

0

0

0

1

2

0

0

1

0

0

0

1

1

3

0

0

1

1

0

0

1

0

4

0

1

0

0

0

1

1

0

5

0

1

0

1

0

1

1

1

6

0

1

1

0

0

1

0

1

7

0

1

1

1

0

1

0

0

8

1

0

0

0

1

1

0

0

9

1

0

0

1

1

1

0

1

10

1

0

1

0

1

1

1

1

11

1

0

1

1

1

1

1

0

12

1

1

0

0

1

0

1

0

13

1

1

0

1

1

0

1

1

14

1

1

1

0

1

0

0

1

15

1

1

1

1

1

0

0

0

 

I valori del codice Gray vengono inviati sulle uscite sul fronte di discesa del clock ck. Si assume che sull' ingresso Bin i valori restino costanti lungo tutto il periodo di clock e cambino sul fronte di discesa del clock. Le uscite si riferiranno dunque SEMPRE al valore presentato nel PRECEDENTE periodo. Le uscite saranno tutte nulle per t=0.

Nel costruire la rete si produca:

entity bin_gray is 
 generic (Ti:time;fi:time);
 port(Bin:bit_vector(3 downto 0);ck:bit;Gr:out bit_vector(3 downto 0));
end bin_gray;

Si richiede di sviluppare tale entita' nel file bin_gray.vhd (OBBLIGATORIO)

Si possono ottenere indicazioni sulla correttezza dell' elaborato utilizzando il test 461 .

Il candidato, qualora il suo elaborato non superi detto test, e' tenuto a segnalare questo fatto nell' elaborato stesso e può addurre una giustificazione plausibile di questa manchevolezza, se ritiene che la soluzione da lui proposta sia comunque consistente con l'enunciato.

 


Traccia di soluzione alla prova di laboratorio del 2/07/98


Convertitore da codice binario a Gray a 4 bit.

Per questa prova di laboratorio vengono presentate due possibili soluzioni, contenute rispettivamente nel file bin_gray.vhd e nel file bin_gray_rom.vhd .

La prima soluzione è più tradizionale, essendo costituita da una rete combinatoria in ingresso ad elementi di memoria; nella seconda la rete combinatoria viene sostituita da una rom, in cui sono stati memorizzati i valori da porre in uscita al sistema in funzione degli ingressi.

Dall'analisi del testo d'esame (…I valori vengono inviati sulle uscite sul fronte di discesa del clock ck …) e scorrendo le entita' descritte nelle varie librerie si puo' decidere di usare un registro a 4 bit di tipo master slave, dove ciascun ingresso e' campionato sul fronte di salita di ck e viene riportato sull' uscita sul fronte di discesa di ck. Si veda a tal proposito la descrizione in rms all'interno di questo stesso file; il codice è contenuto nel file ffg.vhd .

A partire da tale componente è possibile descrivere il circuito come un insieme di quattro di questi registri master-slave, le cui uscite sono Gr(3) - Gr(0) , mentre gli ingressi sono quattro uscite obit(3) -obit(0), risultato di una rete combinatoria costituita da exor, a cui afferiscono i 4 ingressi Bin(3) - Bin(0). Il tutto risulta così rappresentato:

 

Lo sviluppo della rete combinatoria può prendere spunto dalla tavola di verità che lega i suoi 4 ingressi Bin(3)-Bin(0) alle 4 uscite obit(3) - obit(0). L' ingresso Bin è a quattro bit. Tali bit rappresentano un numero tra 0 e 15. Il bit Bin(3) è il bit più significativo, mentre Bin(0) rappresenta il bit meno significativo. La rete combinatoria fornisce in uscita quattro segnali obit(3) -obit(0).

Con riferimento alla figura, obit(3) è l'ingresso del master slave più significativo, la cui uscita è Gr(3), mentre obit(0) è l'ingresso del master slave meno significativo, la cui uscita è Gr(0). 

I valori vengono inviati sulle uscite Gr(3) -Gr(0) sul fronte di discesa del clock ck.

Analizzando la tabella , è possibile sviluppare con degli exor le relazioni tra ingressi e uscite (per semplicità o3 sta per obit(3), Bin3 sta per Bin(3) e così via):

 

obit(0) <= (Bin(1) xor Bin(0)) after delay_xor;

obit(1) <= (Bin(2) xor Bin(1)) after delay_xor;

obit(2) <= (Bin(3) xor Bin(2)) after delay_xor;

obit(3) <= Bin(3) ;

Scegliendo il ritardo di propagazione più lungo, questo è pari a delay_xor. Tale ritardo deve essere inferiore a (Ti - fi), periodo di tempo in cui il clock rimane alto, dopo di chè il suo fronte di discesa fa cambiare le uscite.

Quindi: delay_xor < Ti - fi, per cui si può porre delay_xor = (Ti- fi- 1ns). Nell'esempio con Ti = 250 ns e fi = 60 ns si ottiene delay_xor = 189 ns.


Il codice vhd corrispondente a tale soluzione si trova nel file bin_gray.vhd .



Anziché sviluppare la rete combinatoria in questo modo, è possibile memorizzare le varie uscite della rete combinatoria ( obit(3) - obit(0) ) in una rom, il cui bus indirizzi è collegato agli ingressi Bin(3) - Bin(0). Occorre però fare le opportune conversioni da bit_vector a standard_logic e viceversa. La struttura del sistema è rappresentata in figura:

 

Per la ROM si è usata la definizione della RAM contenuta nel file ram_____.vhd: essendo una ROM, risulta abilitata solo in lettura (RnW viene posto a '1') e il segnale CS è posto a '1' dopo un certo ritardo (turn_on_delay) dallo start_up; nel disegno tale ritardo è rappresentato con un rettangolo dai bordi arrotondati per distinguerlo dai componenti veri e propri. I dati vengono trasferiti in uscita con un ritardo rom_delay; anche questo è rappresentato con un rettangolo dai bordi arrotondati.

I 4 segnali d'ingresso Bin afferiscono agli indirizzi (addr) della ROM previa un'opportuna conversione dei primi (di tipo bit vector) in segnali di tipo standard logic, chiamati int_addr. Per evidenziare la necessità di tale conversione tra nBCD e int_addr è interposto un ellisse con il nome della funzione To_StdLogicVector contenuta nel file ieee.vhd. Dualmente i 4 segnali data in uscita dalla ROM vanno convertiti in segnali di tipo bit vector, essendo essi di tipo standard logic. La funzione utilizzata è To_BitVector ed è indicata in un ellisse nel disegno. Tale funzione si può trovare nel file ieee.vhd.

I dati convertiti (int_data_bit) entrano in 4 master slaves, e sul fronte di discesa del clock CK pongono in uscita 4 bit che pilotano Gr. Circa la definizione dei master slaves si rimanda al contenuto del file ffg.vhd .

Dovendo inizializzare la ROM si è utilizzato il file gray.bin per memorizzare le 16 parole da 4 bit che fanno le veci della rete combinatoria i cui ingressi sono Bin e le uscite sono Gr.

I ritardi sono stati fissati rispettivamente:

In pratica dall'inizio del clock, dopo 1 ns si attiva la Rom e dopo rom_delay ( 1ns) prima dell'inizio del fronte di salita del clock vengono presentati i dati ai 4 master slaves.


Il codice vhd corrispondente a tale soluzione si trova nel file bin_gray_rom.vhd .



Appunti a cura di genovesi@disi.unige.it