problema tra ieee.numeric_std e ieee.std_logic_arith

Sezione dedicata al linguaggio di descrizione hardware per logiche programmabili

problema tra ieee.numeric_std e ieee.std_logic_arith

Postby giuseppe01051984 » 27 Sep 2013, 11:09

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

Re: problema tra ieee.numeric_std e ieee.std_logic_arith

Postby Leonardo » 27 Sep 2013, 11:25

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

Re: problema tra ieee.numeric_std e ieee.std_logic_arith

Postby alfo84 » 27 Sep 2013, 16:55

Grazie mille Leonardo. La funzione to_signed è perfetta e utilizzerò la libreria ieee_numeric_std
alfo84
 
Posts: 42
Joined: 06 Sep 2013, 12:51


Return to VHDL x FPGA

Who is online

Users browsing this forum: No registered users and 2 guests

cron