VHDL中的2:1 Mux-信号不改变值

VHDL中的2:1 Mux-信号不改变值,vhdl,fpga,mux,Vhdl,Fpga,Mux,我正在尝试用VHDL制作一个2:1(8位宽)的多路复用器。以下是我所拥有的: 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 :

我正在尝试用VHDL制作一个2:1(8位宽)的多路复用器。以下是我所拥有的:

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;
IEEE库;
使用IEEE.STD_LOGIC_1164.ALL;
实体lab1是
端口(SEL:STD_逻辑中;
Y:标准逻辑向量(7到0);
X:标准逻辑向量(7到0);
M:输出标准逻辑向量(7到0);
末端lab1;
lab1的体系结构是
内部信号:标准逻辑向量(7到0);
开始
过程(X、Y、SEL)
开始
如果SEL='0',则
内部X,
Y=>Y
);
初始化:进程
--变量声明
开始
--只执行一次的代码
等待
结束进程初始化;
始终:过程
--可选灵敏度列表
-- (        )                                                 
--变量声明
开始
--代码针对敏感度列表上的每个事件执行

您使用
内部
而不是直接分配给
M
,有什么特别的原因吗?@skrrgwsme不太可能。我试过两种方法。您编写的测试似乎不正确,而且不需要
内部
信号。您可以看到忽略噪波的示例。这就给产生结果的过程留下了一个问题。您最近是否编辑了测试台(您是否正在运行正确的测试台)?请注意,您的波形显示在将
SEL
更改为10 ns的“1”后开始,选择
Y
(“00000000”)。您的波形不会显示值为
X
M
。注释中提供的波形显示时间0到20 ns,并显示
M
X
的值。
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;