Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Prodotto e somma VHDL signed

Strumenti informatici per la matematica applicata, le simulazioni, il disegno: Mathcad, Matlab, Scilab, Microcap, PSpice, AutoCad ...

Moderatori: Foto Utenteg.schgor, Foto Utentedimaios

0
voti

[1] Prodotto e somma VHDL signed

Messaggioda Foto Utenteireon » 20 mar 2013, 17:51

Sto studiando da qualche settimana il VHDL, ho iniziato ad introdurre la libreria IEEE.STD_LOGIC_SIGNED.ALL però avrei qualche dubbio a riguardo non so se qualcuno può aiutarmi. Supponiamo di definire due vettori A e B a 4 bit d'ingresso e un vettore C sempre a 4 bit in uscita quindi:

A,B: in std_logic_vector(3 downto 0)

C: out std_logic_vector(3 downto 0)

Consideriamo la rappresentazione relativa dei numeri binari con complemento a 2:

0111=7
0110=6
0101=5
0100=4
0011=3
0010=2
0001=1
0000=0
1111=-1
1110=-2
1101=-3
1100=-4
1011=-5
1010=-6
1001=-7
1000=-8


Supponiamo di eseguire l'operazione A*B con A=0100=4 e B=1111=-1 otterrei come risultato C=1100=-4 e fin qui nessun problema. Adesso supponiamo sempre il prodotto con A=0111=7 e B=0110=6, il risultato che avrò in uscita sarà C=1010=-6, risultato errato poiché il risultato corretto sarebbe uguale a C'=101010 ma ovviamente essendo la risoluzione di 4 bit, mi perdo gli ultimi due bit e vado in overflow, infatti avrei bisogno di più bit per eseguire correttamente l'operazione, ma dichiarando l'uscita come C: out std_logic_vector(7 downto 0) il sintetizzatore mi dà un messaggio di warning con scritto <C> has a width of 8 bits but assigned expression is 4-bit wide. Anche se il prodotto può dare come risultato fino a 8 bit. Il problema l'ho risolto introducendo le variabili e assegnando il prodotto ad una variabile, andando poi a prendere i 4 bit più significativi e meno significativi assegnati alle due variabili su due uscite diverse per avere quindi il risultato completo. Poi ho notato che eseguendo un prodotto che mi dà come risultato 1000=-8 il risultato che ottengo utilizzando quindi le due variabili è1111 1000 invece di 0000 1000, anche se in questo caso non avrei overflow, come mai avviene ciò? Inoltre la somma non può essere salvata come il prodotto utilizzando le variabili poiché mi appare un messaggio di errore quindi deduco che ogni volta che eseguo la somma mi perdo sempre un bit? Cioè ad esempio se faccio 0111+0110=6+7=13 ottengo come risultato a 4 bit
1101=-3, mentre il risultato corretto dovrebbe essere 01101=13. Non so se qualcuno all'interno del forum ne capisce di VHDL però se qualcuno riesce ad aiutarmi lo ringrazio in anticipo! :-)
Avatar utente
Foto Utenteireon
14 1 2 6
Frequentatore
Frequentatore
 
Messaggi: 237
Iscritto il: 24 ott 2010, 12:21

0
voti

[2] Re: Prodotto e somma VHDL signed

Messaggioda Foto Utenteireon » 21 mar 2013, 0:41

Ho risolto :-)
Avatar utente
Foto Utenteireon
14 1 2 6
Frequentatore
Frequentatore
 
Messaggi: 237
Iscritto il: 24 ott 2010, 12:21


Torna a Programmi applicativi: simulatori, CAD ed altro

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti