Page 1 of 1

Moltiplicatore vhdl

PostPosted: 13 Sep 2013, 10:02
by giuseppe01051984
Salve,
come faccio a dare una rappresentazione Qm.n alla mia word.
Ad esempio vorrei che il valore 0101 non fosse 3 ma un numero con la virgola.
Inoltre dal codice che posto mi risulta che il moltiplicatore si prende gli ultimi 4 LSB
non sarebbe più corretto fare prima uno shift a destra per prendere gli ultimi 4 MSB(se si non sono ancora riuscito a
capire come si inserisce lo shift).
Code: Select all
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use ieee.numeric_std.all;     -- è la libreria per i tipi signed

entity moltiplicatore is
   generic (size : integer :=4);
    port(
       m1 : in signed(size-1 downto 0);
       m2 : in signed(size-1 downto 0);
       mout : out signed(size-1 downto 0)
        );
end moltiplicatore;

architecture moltiplicatore of moltiplicatore is
signal m_full : signed (2*size-1 downto 0);
begin
   
   m_full <= m1 * m2;
   mout <= m_full (size-1 downto 0);
   
   

end moltiplicatore; 

Re: Moltiplicatore vhdl

PostPosted: 13 Sep 2013, 11:37
by Leonardo
come faccio a dare una rappresentazione Qm.n alla mia word


In assenza di un'implementazione fornita dalla libreria standard (devi controllare se hai qualcosa di simile che puoi utilizzare, forse qualche libreria fixed point?) puoi implementare la rappresentazione Qm.n definendo il tipo, gli operatori, etc.. è un task abbastanza lungo anche se molto didattico. Puoi studiare il sorgente di numeric_std per avere un'idea di come fare analizzando ad esempio come viene implementato il tipo signed. Trovi il sorgente in C:\altera\13.0\quartus\libraries\vhdl\ieee anche se non è un task semplice se ti sei da poco affacciato al VHDL e per il momento non te lo consiglio.

Altri magari ti sapranno dare più informazioni sul Qm.n

non sarebbe più corretto fare prima uno shift a destra per prendere gli ultimi 4 MSB(se si non sono ancora riuscito a
capire come si inserisce lo shift).


Modificando la riga
Code: Select all
mout <= m_full (size-1 downto 0);

puoi indicare quali bit prendere e in che "direzione".

Ad ogni modo gli operatori di shifting sono sll, srl, sla, sra, rol, ror

Ciao

Re: Moltiplicatore vhdl

PostPosted: 13 Sep 2013, 16:12
by giuseppe01051984
Grazie...

Re: Moltiplicatore vhdl

PostPosted: 13 Sep 2013, 19:14
by alfo84
Salve, ho letto che per quanto riguarda la sintetizzazione servendosi dei programmi altera o aldec non viene riconosciuta la rappresentazione floating point. Sapete qualcosa riguardo a ciò?

Re: Moltiplicatore vhdl

PostPosted: 13 Sep 2013, 19:54
by Leonardo
Quartus 13 non supporta ancora pienamente VHDL 2008 che definisce alcuni package per utilizzare fixed e floating point, si può però ovviare al problema seguendo le istruzioni alla seguente pagina: http://www.vhdl.org/fphdl/