Page 1 of 1

problema tra ieee.numeric_std e ieee.std_logic_arith

PostPosted: 27 Sep 2013, 11:09
by giuseppe01051984
Salve ho scritto il seguente codice per creare un moltiplicatore a parità di bit rounding:
Code: Select all
library IEEE;
use IEEE.STD_LOGIC_1164.all;
--use ieee.numeric_std.all;    
use ieee.std_logic_arith.all;
entity moltiplicatore is
   generic (size : integer :=12);
    port(
       m1 : in signed(size-1 downto 0);
       m2 : in signed(size-1 downto 0);
       out_parity :out signed(size-1 downto 0)
        );
end moltiplicatore;


architecture moltiplicatore of moltiplicatore is


signal m_full,m_round,one: signed (2*size-1 downto 0);
signal aux1 : std_logic;
begin
m_full<=m1*m2;
one<=conv_signed(1,24);
m_round<=m_full + shl(one,11);
out_parity<=m_round(2*size-1 downto size);
 

end moltiplicatore; 
 

Come si vede dal codice ho dovuto togliere la libreria numeric_std per poter utilizzare la std_logich_arith perchè insieme
mi danno errore.Qualcuno sa dirmi perché????
Inoltre come faccio ad utilizzare lo shift shl??? provo a farlo come scritto nel codice ma mi da "Error (10517): VHDL type mismatch error at moltiplicatore.vhd(23): UNSIGNED type does not match integer literal".

Re: problema tra ieee.numeric_std e ieee.std_logic_arith

PostPosted: 27 Sep 2013, 11:25
by Leonardo
Code: Select all
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use ieee.numeric_std.all;     

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

architecture moltiplicatore of moltiplicatore is
   signal m_full,m_round,one: signed (2*size-1 downto 0);
   signal aux1 : std_logic;
begin
   m_full<=m1*m2;
   one <= to_signed(1,24);
   m_round <= m_full + SHIFT_LEFT(one,11);
   out_parity <= m_round(2*size-1 downto size);
end moltiplicatore; 


Come anticipato nel precedente thread la libreria numeric_std non necessita di std_logic_arith che ormai è "obsoleta".
Come puoi vedere dal codice corretto puoi utilizzare le funzioni to_signed ed SHIFT_LEFT

Ciao

Re: problema tra ieee.numeric_std e ieee.std_logic_arith

PostPosted: 27 Sep 2013, 16:55
by alfo84
Grazie mille Leonardo. La funzione to_signed è perfetta e utilizzerò la libreria ieee_numeric_std