VHDL: puedo trasladar el mapa std_logic_vector a un puerto firmado o sin firmar, ¿por qué?

1

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"?

    
pregunta quantum231

2 respuestas

2

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
);
    
respondido por el Paebbels
1

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]
    
respondido por el gstorto

Lea otras preguntas en las etiquetas