real a std_logic_vector en VHDL

0

Tengo problemas para entender la conversión entre los diferentes tipos de datos en VHDL y necesité ayuda con la conversión al tipo 'STD_LOGIC_VECTOR' en VHDL.

Quiero que el código siguiente se sintetice de manera que pueda usarse en hardware real.

Por ahora tengo la configuración del código de la siguiente manera

signal   VREF  : real := 65536/3.3;
constant SIG   : real := 2.33;
signal TEMP    : unsigned(15 downto 0);

signal WORD_A : STD_LOGIC_VECTOR(23 downto 0) ;
signal SIG_A  : STD_LOGIC_VECTOR(15 downto 0);

BEGIN

TEMP <= to_unsigned(VREF,16)*to_unsigned(SIG,16);
SIG_A <= STD_LOGIC_VECTOR(TEMP);
WORD_A <= "00110000" & SIG_A;

Utilicé las siguientes bibliotecas: IEEE_NUMERIC_STD.ALL, IEEE.MATH.REAL

Me sale el siguiente error ERROR: [VRFC 10-1471] type error near VREF ; current type real; expected type natural

Se agradece cualquier entrada

Gracias

    
pregunta CanisMajoris

2 respuestas

2

real no es sintetizable en FPGA. Puedes usar:

library ieee

paquete es_fixed_pkg.all

    
respondido por el MITU RAJ
0

Este código compila:

LIBRARY  ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.numeric_std.ALL;

ENTITY TEST IS

END ENTITY TEST;

ARCHITECTURE BEH OF TEST is
  signal   VREF  : real := 65536.0 /3.3;
  constant SIG   : real := 2.33;
  signal TEMP    : unsigned(31 DOWNTO 0);

  signal WORD_A : STD_LOGIC_VECTOR(23 DOWNTO 0);
  signal SIG_A  : STD_LOGIC_VECTOR(15 DOWNTO 0);

BEGIN
  TEMP <= to_unsigned(natural(VREF),16)*to_unsigned(natural(SIG),16);
  SIG_A <= STD_LOGIC_VECTOR(TEMP(15 DOWNTO 0));
  WORD_A <= "00110000" & SIG_A;
END ARCHITECTURE BEH;

Tenga en cuenta el tipo de conversión natural (), ya que los reales no se pueden convertir directamente a unsigned utilizando solo las bibliotecas IEEE básicas.

El tipo "real" no es sintetizable: no puede sintetizar señales de tipo real, PERO puede calcular constantes utilizando reales y convertirlas en números enteros en código sintetizable.

    
respondido por el TEMLIB

Lea otras preguntas en las etiquetas