La salida de VHDL es Unitiliazed o Zero cuando se simula

0

Soy nuevo en VHDL y estoy implementando un banco de pruebas. Estoy intentando escribir código para un simple MUX 2: 1 en el que la salida del MUX ingresa en un registro de CARGA alto y síncrono activo. Las entradas y salidas son de 8 bits. Cuando ejecuto mi simulación mi salida F lee 'U'. También intenté inicializar la señal de salida en el banco de pruebas para (otros = > '0') pero eso solo hace que mi salida F = 0. Cualquier ayuda sería muy apreciada, ¡gracias!

DESIGN

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity REG_A is
    Port ( A : in STD_LOGIC_VECTOR (7 downto 0);
           B : in STD_LOGIC_VECTOR (7 downto 0);
           SEL : in STD_LOGIC;
           LDA : in STD_LOGIC;
           CLK : in STD_LOGIC;
           F : out STD_LOGIC_VECTOR (7 downto 0));
end REG_A;

architecture Behavioral of REG_A is
    signal s : std_logic;
    signal s_mux_result : std_logic_vector(7 downto 0);

begin

    regA : process (CLK)
    begin
        if (rising_edge(CLK)) then
            if (LDA = '1') then
                F <= s_mux_result;
            end if;
        end if;
    end process;   

    with s select
    s_mux_result <= A when '1',
                    B when '0',
                    (others => '0') when others;

end Behavioral;

BANCO DE PRUEBAS

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity regA_tb is
end regA_tb;

architecture Behavioral of regA_tb is
--INPUTS
signal A : std_logic_vector(7 downto 0) := "01100101";
signal B : std_logic_vector(7 downto 0) := "11100111";
signal LA,SEL : std_logic;
signal CLK : std_logic := '0';

--OUTPUT
signal F : std_logic_vector(7 downto 0):= (others => '0');

component regA
    port( 
        A,B: in std_logic_vector(7 downto 0);
        LA,SEL : in std_logic;
        CLK : in std_logic := '0';
        F : out std_logic_vector(7 downto 0)
        );
end component;


begin
dut: regA port map( A => A, B => B, LA => LA, SEL => SEL, CLK => CLK, F => F);

    --GENERATE CLOCK
    generate_clock  : process 
    begin
        wait for 50 ns;
        CLK <= '1';
        wait for 50 ns;
        CLK <= '0';
    end process;

    switch_process : process
    begin
        SEL <= '0';
        LA <= '1';
        wait for 100 ns;
        SEL <= '1';
        LA <= '1';
        wait for 100 ns;
    end process;
end Behavioral;
    
pregunta Vinny Vigs

1 respuesta

1

Ha creado una arquitectura para "reg_A" pero intente crear una instancia de un componente "dut" con el nombre de definición "rega", mientras que dicho componente no existe en su biblioteca (trabajo). Tampoco conectó el "SEL" del puerto de la entidad a la "s" local definida, lo que probablemente sea un error de escritura.

He cambiado tu código y parece que su simulación está funcionando correctamente ahora.

Elcódigomodificadoeseste:

libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;entityREG_AisPort(A:inSTD_LOGIC_VECTOR(7downto0);B:inSTD_LOGIC_VECTOR(7downto0);SEL:inSTD_LOGIC;LDA:inSTD_LOGIC;CLK:inSTD_LOGIC;F:outSTD_LOGIC_VECTOR(7downto0));endREG_A;architectureBehavioralofREG_Aissignals:std_logic;signals_mux_result:std_logic_vector(7downto0);beginregA:process(CLK)beginif(rising_edge(CLK))thenif(LDA='1')thenF<=s_mux_result;endif;endif;endprocess;s<=SEL;--changedbyBD_CEwithsselects_mux_result<=Awhen'1',Bwhen'0',(others=>'Z')whenothers;--changedbyBD_CEendBehavioral;

Elbancodepruebasmodificadoes:

libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;entityregA_tbisendregA_tb;architectureBehavioralofregA_tbis--INPUTSsignalA:std_logic_vector(7downto0):="01100101";
signal B : std_logic_vector(7 downto 0) := "11100111";
signal LA,SEL : std_logic;
signal CLK : std_logic := '0';

--OUTPUT
signal FOUT : std_logic_vector(7 downto 0); --changed by BD_CE

component REG_A  --changed by BD_CE
    Port ( A : in STD_LOGIC_VECTOR (7 downto 0);
           B : in STD_LOGIC_VECTOR (7 downto 0);
           SEL : in STD_LOGIC;
           LDA : in STD_LOGIC;
           CLK : in STD_LOGIC;
           F : out STD_LOGIC_VECTOR (7 downto 0)
          );
end component;

begin
dut: REG_A port map( A => A, B => B,SEL => SEL, LDA => LA,  CLK => CLK, F => Fout); --changed by BD_CE

    --GENERATE CLOCK
    generate_clock  : process 
    begin
        wait for 50 ns;
        CLK <= '1';
        wait for 50 ns;
        CLK <= '0';
    end process;

    switch_process : process
    begin
        SEL <= '0';
        LA <= '1';
        wait for 100 ns;
        SEL <= '1';
        LA <= '1';
        wait for 100 ns;
    end process;

end Behavioral;
    
respondido por el BD_CE

Lea otras preguntas en las etiquetas