¿Cómo vinculo dos componentes de diferentes archivos en VHDL?

2

Lo siento por la cantidad de código por adelantado (agregué el código ya que no estaba seguro de que sea necesario aquí para resolver mi problema).

Mi objetivo principal es vincular dos componentes que están juntos en dos archivos .vhd en un bloque en un tercer archivo.

Digamos que tengo el siguiente código en mi archivo chooser.vhd :

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

library work;
use work.all;

entity chooser is
    port(
        clk, rst : in std_logic;
        DATA : in std_logic_vector(4 downto 0);
        A : out std_logic_vector(4 downto 0);
        Src : in std_logic_vector(1 downto 0);
        SOp : in std_logic_vector(1 downto 0);
        debug : out std_logic_vector(4 downto 0)
    );
end entity;

architecture structural of chooser is
-- here
begin

end architecture;

Y que tengo dos componentes en otros dos archivos llamados registry.vhd y MUX3x5.vhd

MUX3x5.vhd

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity MUX3x5 is
    port(
        IN0 : in std_logic_vector(4 downto 0);
        IN1 : in std_logic_vector(4 downto 0);
        IN2 : in std_logic_vector(4 downto 0);
        SEL : in std_logic_vector(1 downto 0);
        O : out std_logic_vector(4 downto 0)
    );
end entity;

architecture behaviour of MUX3x5 is

...

end architecture;

registry.vhd tiene una salida de 5 bits

Quiero conectarlos como sigue dentro de chooser.vhd registro - > MUX3x5 (en la segunda entrada). ¿Cómo hago eso en la arquitectura de mi elección arriba?

¿Debo declararlos como componentes con sus puertos como se ve en la declaración de la entidad en los archivos originales de los componentes en la arquitectura y luego enrutarlos en el mapa del puerto? Al igual que:

Attempt

architecture structural of chooser is

signal -- signals here


-- copy of the inputs/outputs in the entity declaration in the file above
component MUX3x5 is
    port(
        IN0 : in std_logic_vector(4 downto 0);
        IN1 : in std_logic_vector(4 downto 0);
        IN2 : in std_logic_vector(4 downto 0);
        SEL : in std_logic_vector(1 downto 0);
        O   : out std_logic_vector(4 downto 0)
    );
end component;


component registry is
    port(
         -- some signals here
         TS : out std_logic_vector(4 downto 0)
    );

begin

-- port map here
    port map(
            TS => IN1;
            -- other maps
);

end architecture;
    
pregunta Clone

1 respuesta

1

Ya tienes la solución. Simplemente agregue el nombre de la entidad como dijo A. Kieffer en su comentario y asegúrese de que los mapas estén separados por, y no;

architecture structural of chooser is

signal -- signals here
signal mux_IN0 : std_logic_vector(4 downto 0);
signal mux_IN1 : std_logic_vector(4 downto 0);
signal mux_IN2 : std_logic_vector(4 downto 0);
signal mux_SEL : std_logic_vector(1 downto 0);
signal mux_O   : std_logic_vector(4 downto 0);

-- copy of the inputs/outputs in the entity declaration in the file above
component MUX3x5 is
    port(
        IN0 : in std_logic_vector(4 downto 0);
        IN1 : in std_logic_vector(4 downto 0);
        IN2 : in std_logic_vector(4 downto 0);
        SEL : in std_logic_vector(1 downto 0);
        O   : out std_logic_vector(4 downto 0)
    );
end component;



component registry is
    port(
         -- some signals here
         TS : out std_logic_vector(4 downto 0)
    );

begin

some_name: registry
    port map(
            TS => mux_in1,    -- use , and not ;
            -- other maps
);

mux: MUX3x5
port map(
    IN0 => mux_in0,
    IN1 => mux_in1,
    IN2 => mux_in2,
    SEL => mux_sel,
    O   => mux_o
);

end architecture;
    
respondido por el Botnic

Lea otras preguntas en las etiquetas