VHDL es de tipo seguro, por lo tanto, ¿cómo es que puedo usar una señal std_logic_vector y el puerto lo asigna a un puerto de entidad que es de tipo firmado?
¿No debería requerir algún tipo de "calificación" o "casting"?
VHDL es de tipo seguro, por lo tanto, ¿cómo es que puedo usar una señal std_logic_vector y el puerto lo asigna a un puerto de entidad que es de tipo firmado?
¿No debería requerir algún tipo de "calificación" o "casting"?
Puede usar una conversión de tipo en una lista de asociación, p. ej. en un mapa de puerto.
Dependiendo de la dirección (puerto), debe especificar la conversión en el formato formal ( out put), real ( in put) o en ambos lados (inout ).
port map (
myUnsigned => unsigned(mySLV1), -- input
std_logic_vector(mySigned) => mySLV2 -- output
);
En realidad no está permitido:
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
-- ============================================================================ --
-- Entity declaration --
-- ============================================================================ --
entity first is
port
(
input : in std_logic_vector(7 downto 0);
output : out std_logic_vector(7 downto 0)
);
end entity first;
architecture rtl of first is
-- ============================================================================ --
-- Signal declaration --
-- ============================================================================ --
-- ============================================================================ --
-- Code starts --
-- ============================================================================ --
begin
second_inst : entity work.second
port map (
input => input,
output => output
);
end architecture rtl;
#
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
-- ============================================================================ --
-- Entity declaration --
-- ============================================================================ --
entity second is
port
(
input : in signed(7 downto 0);
output : out signed(7 downto 0)
);
end entity second;
architecture rtl of second is
-- ============================================================================ --
-- Signal declaration --
-- ============================================================================ --
-- ============================================================================ --
-- Code starts --
-- ============================================================================ --
begin
output <= input;
end architecture rtl;
Vivado detecta el error y estoy bastante seguro de que con Quartus debería ocurrir lo mismo:
ERROR: [Synth 8-2778] type error near input ; expected type signed [first.vhd:27]
ERROR: [Synth 8-2778] type error near output ; expected type signed [first.vhd:28]
Lea otras preguntas en las etiquetas vhdl