Moltiplicatore vhdl

Sezione dedicata al linguaggio di descrizione hardware per logiche programmabili

Moltiplicatore vhdl

Postby giuseppe01051984 » 13 Sep 2013, 10:02

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; 
giuseppe01051984
 
Posts: 49
Joined: 06 Sep 2013, 13:16

Re: Moltiplicatore vhdl

Postby Leonardo » 13 Sep 2013, 11:37

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
Il mio blog di elettronica: http://electro-logic.blogspot.it
User avatar
Leonardo
 
Posts: 502
Joined: 29 May 2013, 22:31
Location: Parma

Re: Moltiplicatore vhdl

Postby giuseppe01051984 » 13 Sep 2013, 16:12

Grazie...
giuseppe01051984
 
Posts: 49
Joined: 06 Sep 2013, 13:16

Re: Moltiplicatore vhdl

Postby alfo84 » 13 Sep 2013, 19:14

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ò?
alfo84
 
Posts: 42
Joined: 06 Sep 2013, 12:51

Re: Moltiplicatore vhdl

Postby Leonardo » 13 Sep 2013, 19:54

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/
Il mio blog di elettronica: http://electro-logic.blogspot.it
User avatar
Leonardo
 
Posts: 502
Joined: 29 May 2013, 22:31
Location: Parma


Return to VHDL x FPGA

Who is online

Users browsing this forum: No registered users and 12 guests