Ejemplificación de bloques en VHDL, asignación de reloj y reinicio de señales

0

Estoy tratando de conectar 5 pilas juntas usando VHDL a continuación. El principal problema al que me enfrento es que no sé cómo tratar con las señales clk que significa clock y rst que es un reinicio asíncrono y el SOp stack operation-vector de señales que se usó en su totalidad por cada una de las instancias de pila. TS significa top of stack.

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

entity stack is
    port(
        D : in std_logic_vector(4 downto 0);
        TS : out std_logic_vector(4 downto 0);
        clk, rst : in std_logic;
        SOp : in std_logic_vector(1 downto 0)
    );
end entity;

architecture structural of stack is


begin
stack1: entity stack port map(
      D  => D(0),
      TS => Tos(0),
      SOp => -- here
);

stack2: entity stack port map(
      D  => D(1),
      TS => TS(1),
      SOp => -- here
);

stack3: entity stack port map(
      D  => D(2),
      TS => TS(2),
      SOp => -- here
);

stack4: entity stack port map(
      D  => D(3),
      TS => TS(3),
      SOp => -- here
);

stack5: entity stack port map(
      D  => D(4),
      TS => TS(4),
      SOp => -- here
);

end architecture;

¿Debería básicamente escribir algo como esto o puedo omitir SOp, clk, rst, ya que cada pila los utiliza completamente?

stack1: entity stack port map(
      D  => D(0),
      TS => TS(0),
      SOp => SOp,
      clk => clk,
      rst => rst
);
    
pregunta Clone

1 respuesta

0

En primer lugar, necesita diferenciar las definiciones de las entidades y las instancias de las entidades. Lo que intentas hacer aquí es definir una entidad y crear una instancia en el mismo archivo. Su arquitectura de su entidad no puede usar su entidad ...

Por lo tanto, te aconsejo que crees un nivel TOP, que puedas llamar top , stack_top o lo que quieras y una entidad stack por separado.

Su entidad principal llamada stack se verá así:

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

entity stack is
     port(
        D : in std_logic;
        TS : out std_logic;
        clk, rst : in std_logic;
        SOp : in std_logic_vector(1 downto 0)
    );
end entity;

architecture structural of stack is


begin

... -- do whatever you need to do

end architecture;

Esta es tu función de pila. Ahora el nivel superior instanciará tantas instancias de la entidad stack que necesite.

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

entity top is
     port(
        D : in std_logic_vector(4 downto 0);
        TS : out std_logic_vector(4 downto 0);
        clk, rst : in std_logic;
        SOp : in std_logic_vector(1 downto 0)
    );
end entity;

architecture X of top is

-- call you entity
component stack is
     port(
        D : in std_logic;
        TS : out std_logic;
        clk, rst : in std_logic;
        SOp : in std_logic_vector(1 downto 0)
    );
end component;

begin

-- instantiate your entity
stack0 : stack 
port map  (D => D(0),
           TS => TS(0),
           clk => clk,
           rst => rst,
           SOp => SOp);

stack1 : stack 
port map  (D => D(1),
           TS => TS(1),
           clk => clk,
           rst => rst,
           SOp => SOp);

...

end architecture;

(Supuse que querías asignar un bit de cada uno de tus vectores a cada pila, por eso estoy usando std_logic ports para cada pila)

    
respondido por el A. Kieffer

Lea otras preguntas en las etiquetas