Soy nuevo en este campo. Tengo un problema con la conversión de la entrada lógica estándar en valores reales. He estado usando to_float
la función pero siempre mostraba un error. Cuando usé el paquete float_generic_pkg
, mostró un error:
No se puede encontrar en la biblioteca.
También intenté crear una nueva biblioteca ieee_proposed
pero aún mostraba un error.
Intenté usar IEEE.numeric_std.all
, también.
Nuevamente dio error <to_real>
no declarado.
¿Necesito usar algún otro paquete de biblioteca?
Estoy usando ISE Design Suite 14.7. Una cosa más: también es para síntesis. Por favor, ayúdame.
Aquí está el código:
library ieee;
use ieee.std_logic_1164.all;
use ieee.float_pkg.all;
use ieee.float_generic_pkg.all;
entity dafsm is
port (x : in std_logic_vector (1 downto 0);
y : out std_logic_vector (1 downto 0));
end dafsm;
architecture fpga of dafsm is
signal r,s : real range 0.0 to 15.0;
begin
r <= to_float(x);
s <= r * 0.5;
y <= to_slv(s);
end fpga;
Los mensajes de error:
Línea 4: No se puede encontrar <float_pkg> en la biblioteca <ieee>. Asegúrese de que la biblioteca se compiló y que una biblioteca y una cláusula de uso están presentes en el archivo VHDL.
Línea 5: No se puede encontrar <float_generic_pkg> en la biblioteca <ieee>. Asegúrese de que la biblioteca se compiló y que una biblioteca y una cláusula de uso están presentes en el archivo VHDL.
Línea 12: <real> no se declara.
Línea 14: <r> no se declara.
Línea 15: <s> no se declara.
Línea 16: <y> no se declara.
Hice algunos cambios en tu código. Los cambios se explicarán a continuación.
library ieee;
use ieee.std_logic_1164.all;
library ieee_proposed;
use ieee_proposed.float_pkg.all;
entity dafsm is
port (
x: in std_logic_vector (31 downto 0) := x"0000002A";
y: out std_logic_vector (31 downto 0)
);
end dafsm;
architecture fpga of dafsm is
function to_string(inp: std_logic_vector) return string is
variable image_str: string (1 to inp'length);
alias input_str: std_logic_vector (1 to inp'length) is inp;
begin
for i in input_str'range loop
image_str(i) := character'VALUE(std_ulogic'IMAGE(input_str(i)));
end loop;
-- report "image_str = " & image_str;
return image_str;
end;
signal r,s : real range 0.0 to 15.0;
begin
r <= to_real(to_float(x));
s <= r * 0.5;
y <= to_slv(to_float(s));
monitor:
process(s)
begin
report "y = " & to_string(to_slv(to_float(s)));
end process;
end architecture fpga;
Esta analizada, elaborada y simulada.
Los cambios:
Usted borró cuidadosamente cualquier información de identificación del proveedor de sus mensajes de error y no tengo sus implementaciones de ninguna manera, usé ghdl.
Primero compilé las fuentes en un directorio llamado ieee_proposed para crear una biblioteca ieee_proposed:
ghdl -a --work=IEEE_PROPUESTA adiciones_estándar_c.vhdl
ghdl -a --work=IEEE_PROPUESTA adiciones_estándar_textio_c.vhdl
ghdl -a --work=IEEE_PROPUESTA adiciones_std_logic_1164.vhdl
ghdl -a --work=IEEE_PROPUESTA adiciones_numéricas_estándar.vhdl
ghdl -a --work =IEEE_PROPUESTA numeric_std_unsigned_c.vhdl
ghdl -a --work=IEEE_PROPOSED fixed_float_types_c.vhdl
ghdl -a --work=IEEE_PROPOSED fixed_pkg_c.vhdl
ghdl -a --work=IEEE_PROPOSED float_pkg_c.vhdl
No necesitamos todo esto para demostrar su código, pero ahí está.
Luego analizó, elaboró y simuló su código:
ghdl -a -P./ieee_proposed dafsm.vhdl
ghdl -e -P./ieee_proposed dafsm
ghdl -r dafsm
dafsm.vhdl:33:9:@0ms:(nota del informe): y = 00000000000000000000000000000000
dafsm.vhdl:33:9 :@0ms:(nota de informe): y = 00000000000000000000000000010101
Hay dos salidas porque hay un evento de inicialización s
antes de s
que se asigne r * 0.5
. Tenga en cuenta que hice que el proceso del monitor fuera sensible s
porque y es una salida y no puede aparecer en una lista de sensibilidad del proceso. Recreé el valor y
que habrá asignado.
El segundo es el resultado, 15 en hexadecimal es 21 decimal.
El -P./ieee_proposed le dice a ghdl que busque en el directorio actual una biblioteca de subdirectorios ieee_proposed (el nombre del directorio es el mismo que el de la biblioteca). Podría haberlo colocado en la ruta de búsqueda de la biblioteca de ghdl, parecía innecesario para esta demostración.
El uso de otras herramientas puede variar.
David Bishop nos asegura que esto debería ser elegible para síntesis. No me he probado.
Por favor, aproveche la documentación en la página web anterior.
usuario_1818839
aman2392
aman2392
usuario_1818839
gestión