VHDL 组件多路复用器在 modelsim 中没有 return 值
VHDL component multiplexer don't return value in modelsim
我正在尝试制作一个带有加法器、mux2 和 mux4 组件以及端口映射的 ALU。
我已经编写了它通过编译的 ALU。问题是当我尝试在 modelsim 中给出值时,加法器工作正常,但 mux2 (sub_module) & mux4 (sub_module x2) 不给出输出。我替换了 2-3 倍的 mux 代码,问题是一样的。我只得到 outY 的 UUUUUUUU 值。
我把代码最小化了。
ModelSim
主 ALU 最小化
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity ALU7_minimal is
Port ( inpA : IN STD_LOGIC_VECTOR (7 downto 0) :="10110001";
inpB : IN STD_LOGIC_VECTOR (7 downto 0) :="00011001";
ALUS0 : in STD_LOGIC := '0';
outY : out STD_LOGIC_VECTOR (7 downto 0));
end ALU7_minimal;
architecture Behavioral of ALU7_minimal is
component sub_module
port(x,y : in STD_LOGIC_VECTOR (7 downto 0);
s: in STD_LOGIC;
z: out STD_LOGIC_VECTOR (7 downto 0));
end component;
begin
U0: sub_module port map (inpA, inpB, ALUS0, outY );
end Behavioral ;
mux2-1
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity sub_module is
port(x,y : in STD_LOGIC_VECTOR (7 downto 0);
s: in STD_LOGIC;
z: out STD_LOGIC_VECTOR (7 downto 0));
end sub_module ;
architecture Behavioral of sub_module is
begin
process (x,y,s) is
begin
if (s ='0') then
z <= x;
else
z <= y;
end if;
end process;
end Behavioral;
不需要流程!
begin
with s select
z <= x when '0',
y when '1',
'U' when others;
仅供遇到相同问题的其他人参考(我的老师发现了):
在 运行 模拟之前,您需要将所有组件文件导入到 modelsim 中。悖论 1 位和 8 位的加法器即使我没有导入它们也在工作,但是 mux(2-1 /4-1) 不会给出任何结果。当我导入所有组件文件(而不仅仅是主程序)时,ModelSim 正确显示结果。
感谢您的宝贵时间和帮助,非常感谢。
我正在尝试制作一个带有加法器、mux2 和 mux4 组件以及端口映射的 ALU。 我已经编写了它通过编译的 ALU。问题是当我尝试在 modelsim 中给出值时,加法器工作正常,但 mux2 (sub_module) & mux4 (sub_module x2) 不给出输出。我替换了 2-3 倍的 mux 代码,问题是一样的。我只得到 outY 的 UUUUUUUU 值。 我把代码最小化了。
ModelSim
主 ALU 最小化
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity ALU7_minimal is
Port ( inpA : IN STD_LOGIC_VECTOR (7 downto 0) :="10110001";
inpB : IN STD_LOGIC_VECTOR (7 downto 0) :="00011001";
ALUS0 : in STD_LOGIC := '0';
outY : out STD_LOGIC_VECTOR (7 downto 0));
end ALU7_minimal;
architecture Behavioral of ALU7_minimal is
component sub_module
port(x,y : in STD_LOGIC_VECTOR (7 downto 0);
s: in STD_LOGIC;
z: out STD_LOGIC_VECTOR (7 downto 0));
end component;
begin
U0: sub_module port map (inpA, inpB, ALUS0, outY );
end Behavioral ;
mux2-1
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity sub_module is
port(x,y : in STD_LOGIC_VECTOR (7 downto 0);
s: in STD_LOGIC;
z: out STD_LOGIC_VECTOR (7 downto 0));
end sub_module ;
architecture Behavioral of sub_module is
begin
process (x,y,s) is
begin
if (s ='0') then
z <= x;
else
z <= y;
end if;
end process;
end Behavioral;
不需要流程!
begin
with s select
z <= x when '0',
y when '1',
'U' when others;
仅供遇到相同问题的其他人参考(我的老师发现了): 在 运行 模拟之前,您需要将所有组件文件导入到 modelsim 中。悖论 1 位和 8 位的加法器即使我没有导入它们也在工作,但是 mux(2-1 /4-1) 不会给出任何结果。当我导入所有组件文件(而不仅仅是主程序)时,ModelSim 正确显示结果。 感谢您的宝贵时间和帮助,非常感谢。