VHDL组件多路复用器不在modelsim中返回值

Posted

技术标签:

【中文标题】VHDL组件多路复用器不在modelsim中返回值【英文标题】:VHDL component multiplexer don't return value in modelsim 【发布时间】:2020-05-26 17:02:01 【问题描述】:

我正在尝试使用带有端口映射的加法器、mux2 和 mux4 组件制作 ALU。 我已经写了ALU,它通过编译OK。问题是当我尝试在 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;

【问题讨论】:

提供minimal reproducible example。 The problem can't be replicated 来自使用从链接波形收集的输入提供的信息。注意 U3 (adder8bit) 是未绑定的(并且不负责所有的 'U's),out0 被驱动但不用作输入,out12 也不是。 我已将示例最小化。 现在,如果您只提供一个可重现的示例。 The problem still can't be replicated 来自使用从链接波形收集的输入的信息。考虑提供(和使用)一个测试平台。您似乎在做一些程序上的错误。 再次感谢。这正是问题所在。代码很简单,但仍然会产生错误。也许问题不在代码中,而 Modelsim 中有需要查看的设置?你知道我可以尝试相同代码的任何其他测试环境吗? 【参考方案1】:

不需要过程!

begin
with s select
    z <= x  when '0',
         y  when '1',
        'U' when others;

【讨论】:

请在您的答案中添加一些解释,以便其他人可以从中学习 一个并发赋值语句被细化为一个具有等效顺序赋值语句的过程。【参考方案2】:

仅供其他遇到相同问题的人参考(我的老师发现了它): 在运行仿真之前,您需要将所有组件文件导入 modelsim。矛盾的是,即使我没有导入它们,1bit 和 8bit 的加法器也在工作,但是 mux(2-1 /4-1) 不会给出任何结果。当我导入所有组件文件(而不仅仅是主程序)时,ModelSim 会正确显示结果。 感谢您的时间和帮助,非常感谢。

【讨论】:

再一次无法从问题中复制问题。这对未来的读者有什么帮助?

以上是关于VHDL组件多路复用器不在modelsim中返回值的主要内容,如果未能解决你的问题,请参考以下文章

VHDL 多路复用和两个输出

VHDL:11 条总线之间的多路复用器 8 位宽输出

VHDL:当涉及时钟信号时,多路复用器输出不跟随输入

使用 4 对 1 实现 8 对 1 多路复用器的 VHDL 程序(结构建模)

多路转接(IO复用)接口介绍

用modelsim和debussy协同仿真VHDL Verilog的流程