2: 1 Mux в VHDL- сигнал не меняет значение - PullRequest
0 голосов
/ 24 сентября 2019

Я пытаюсь сделать 2: 1 (8-битную ширину) мультиплексора в VHDL.Вот что у меня есть:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity lab1 is
    Port ( SEL : in  STD_LOGIC;
           Y   : in  STD_LOGIC_VECTOR (7 downto 0);
           X   : in  STD_LOGIC_VECTOR (7 downto 0);
           M   : out STD_LOGIC_VECTOR (7 downto 0));
end lab1;

architecture Behavioral of lab1 is
signal internal: std_logic_vector(7 downto 0);
begin
    process (X, Y, SEL)
    begin
    if SEL = '0' then
        internal <= X;
     else 
        internal <= Y;
     end if;
    end process;
    M <= internal;
end Behavioral;

И мой файл тестового стенда выглядит следующим образом:

LIBRARY ieee;                                               
USE ieee.std_logic_1164.all;                                

ENTITY lab1_vhd_tst IS
END lab1_vhd_tst;
ARCHITECTURE lab1_arch OF lab1_vhd_tst IS
-- constants                                                 
-- signals                                                   
SIGNAL M : STD_LOGIC_VECTOR(7 DOWNTO 0);
SIGNAL SEL : STD_LOGIC;
SIGNAL X : STD_LOGIC_VECTOR(7 DOWNTO 0);
SIGNAL Y : STD_LOGIC_VECTOR(7 DOWNTO 0);
COMPONENT lab1
    PORT (
    M : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
    SEL : IN STD_LOGIC;
    X : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
    Y : IN STD_LOGIC_VECTOR(7 DOWNTO 0)
    );
END COMPONENT;
BEGIN
    i1 : lab1
    PORT MAP (
-- list connections between master ports and signals
    M => M,
    SEL => SEL,
    X => X,
    Y => Y
    );
init : PROCESS                                               
-- variable declarations                                     
BEGIN                                                        
        -- code that executes only once                      
WAIT;                                                       
END PROCESS init;                                           
always : PROCESS                                              
-- optional sensitivity list                                  
-- (        )                                                 
-- variable declarations                                      
BEGIN                                                         
        -- code executes for every event on sensitivity list  
          X <= "11111111";
          Y <= "00000000";
          SEL <= '0';
          wait for 10 ns;
          SEL <= '1';
          wait for 10 ns;
WAIT;                                                        
END PROCESS always;                                          
END lab1_arch;

Когда я имитирую его, вывод сигнала SELECT, а затем M (вывод)) сигнал не изменяется, хотя я обновляю значение сигнала SEL после нескольких ожиданий в файле тестового стенда.

Вот как выглядит форма волны для справки: enter image description here

...