Pase una señal en entidades de bajo nivel y actualícela nuevamente en la entidad de nivel superior en VHDL

0

He intentado mucho pasar una señal que se encuentra en una entidad de nivel superior, a una entidad de bajo nivel como puerto de entrada y hacer algunas operaciones en esa señal y dejar que los cambios ocurran a la señal principal.

Aquí acabo de usar inc_tb.vhd (como módulo de nivel superior) que tiene una señal llamada PC y inc.vhd (como módulo de bajo nivel) que obtiene la PC e incrementarla en uno al borde del reloj. Pero cualquier cosa que haga, la PC obtiene el valor 'X'. ¿Cómo puedo hacer esto?

Este es el inc.vhd (módulo de bajo nivel):

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

entity inc is
    port(
        clk : in std_logic;
        pc_in : in std_logic_vector(11 downto 0);
        pc_out : out std_logic_vector(11 downto 0)
    );
end entity;

architecture behav of inc is
begin
    process(clk) is
    begin
        if(rising_edge(clk)) then
            pc_out <= std_logic_vector(unsigned(pc_in) + 1);
        end if;
    end process;
end architecture;

Este es el inc_tb.vhd (módulo de nivel superior):

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

entity inc_tb is
end entity;

architecture sim of inc_tb is
    -- inputs
    signal pc : std_logic_vector(11 downto 0) := x"004";
    signal clk : std_logic := '0';
begin
    -- DUT
    CPU_1 : entity work.inc(behav) port map(clk, pc, pc); -- i want this to just increment pc

    -- clock event
    clk <= not clk after 5 ns;

    process is
    begin
        wait for 10*100 ns;
        wait;
    end process;

end architecture;
    
pregunta S.Ahmad

1 respuesta

1

No se puede usar la misma señal como entrada y salida.

No olvides que no estás programando un lenguaje de programación secuencial. En

 entity work.inc(behav) port map(clk, pc, pc);

El primer y segundo pc son en realidad los mismos cables. (De hecho, esperaría que su sintetizador incluso se quejara de que pc está siendo controlado por varios controladores).

Esto podría indicar que no está muy familiarizado con la lógica no secuencial de los HDL. Regresar y hacer un tutorial de VHDL más básico realmente podría valer la pena para ti, y te ahorrará mucho tiempo en general.

    
respondido por el Marcus Müller

Lea otras preguntas en las etiquetas