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