Я пытаюсь сделать 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 после нескольких ожиданий в файле тестового стенда.
Вот как выглядит форма волны для справки: