venerdì 2 dicembre 2016

A.S. 2016/17 - Relazione di laboratorio: Romano Mirko - Relazione sul moltiplicatore binario a 4bit in vhdl

OBBIETTIVO:

Realizzare un moltiplicatore binario associato ad una control unit.



PROCEDIMENTO:

Per prima cosa realizziamo la CONTROL UNIT necessaria per l’automatizzazione del moltiplicatore.
La Control Unit la creiamo seguendo il modello di Moore, automa a stato finito che risolve il sistema in modo automatico, in esso lo stato successivo (stato_s) dipende solo dallo corrente (stato_c) e dall’ingresso. L’uscita invece dipende solo dallo stato. Per stato s’intende la condizione in cui si trova il sistema in un certo istante.

Nel nostro caso abbiamo ben 7 stati diversi:

  • Reset, (da non confondere con la variabile “reset_in”) che rappresenta lo stato iniziale.
  • Load, che rappresenta lo stato nel quale vengono richieste le sequenze di bit da moltiplicare, si passa dallo stato reset a questo stato solamente se la variabile mol_in è uguale a 1.
  • Shift (1, 2, 3, 4), rappresentano le traslazioni dei bit nella fase della moltiplicazione, questa sequenza di stati è automatica, ad ogni colpo di clock viene controllato solamente se il pulsante reset (variabile), è attivato o meno e se la variabile moltiplicazione è sempre uguale ad 1 perché se così non fosse, si bloccherebbe allo stato corrente e il processo non andrebbe avanti.
  • Risultato, che rappresenta lo stato finale, si raggiunge questo stato solamente se si è passati attraverso tutti gli altri.

Realizziamo prima il diagramma a stati sulla piattaforma di www.draw.io:


Con il quale possiamo scrivere il codice in VHDL: (screen di notepad++)


Testiamo il codice VHDL attraverso il Testbench:


Attraverso il Testbench possiamo notare il corretto funzionamento della Control Unit, perché se attiviamo il reset_in si ricomincia da capo (si riparte dallo stato inziale) , se attiviamo mol_in si verificano i cambiamenti di stati e se durante i cambiamenti di stati spegnamo mol_in si blocca tutto.
La control unit funziona perfettamente.



Bene, arrivati a questo punto possiamo procedere con la realizzazione del vero e proprio MOLTIPLICATORE.
Partiamo come sempre dallo schema che ho realizzato sempre sulla piattaforma www.draw.io:


Come possiamo notare il moltiplicatore è composto da quattro registri:

  • mld e mlr che corrispondono ai due numeir in binario da moltiplicare.
  • reg_acc (registro accomulatore), che man mano fa la somma.
  • reg_ris (registro risultato) che quando gli arriva il risultato finale, e il ris_ready è a 1,  lo mette in uscita (uscita del moltiplicatore).

Con questo schema possiamo scrivere il codice in VHDL: (screen di notepad++)



Testiamo il codice VHDL attraverso il Testbench:


Attraverso il Testbench possiamo notare il corretto funzionamento del moltiplicatore a 4 bit, perché con l’attivazione del “reset” si azzera tutto, con l’attivazione del bit “onoff” (ovvero il bit che attiva la moltiplicazione) il moltiplicatore inizia a “lavorare”, carica i dati nei registri mlr e mld (in questo caso 1010 e 0001), e inizia il ciclo, quando il risultato è pronto si attiva il bit ris_ready che è collegato alla control unit e gli dice che il risultato è pronto.

Ed anche il moltiplicatore sembra funzionare, per vedere se realmente funziona, implementiamolo sulla scheda (nexys 4).
Implementiamolo in questo modo:

  • le variabili “onoff” e il “reset” le impostiamo con dei pulsanti.
  • per impostare i due numeri in binario da moltiplicare usiamo gli switch (partendo da destra verso sinistra, i quattro bit mld e gli altri quattro per mlr).
  • per l’uscita del risultato finale (“ris_finale”) utilizziamo otto led,  se i led si accendono corrisponderanno a 1, saranno uguali a zero nel caso contrario.
  • per visualizzare il bit che ci dice che il risultato (“ris_ready”) è pronto utilizziamo un altro led, per comodità lontano dai precendeti.



Una volta implementato il tutto, testiamolo con una qualsiasi moltiplicazione in binario:
in questo caso 1011 x 1100 (mld x mlr), assegnamo questi valori tramite gli switch posti nella parte bassa della scheda (tasto verso l’alto = 1, verso il basso = 0):




Premiamo il tasto “onoff” e vediamo cosa succede:


Il moltiplicatore a 4 bit funziona perfettamente, perché:
  •  1011 x 1100 = 10000100 (11 x 12 = 132).
  • i led si accendono perfettamente in base al risultato.
  • il led che corrisponde a “ris_ready” viene acceso solo quando il risultato è pronto.
  • premendo il tasto “reset” si spengono tutti i led perché si azzera tutto.
  • solo quando si preme il tasto “onoff” la moltiplicazione viene effettuata.

Romano Mirko 4G

Nessun commento:

Posta un commento