【问题标题】:VHDL: Trouble combining entities (components)VHDL:组合实体(组件)的麻烦
【发布时间】:2015-02-15 10:59:58
【问题描述】:

又是我!

我写了一些超级简单的东西来演示实体是如何组合在一起的。但是,我无法弄清楚为什么组合实体的输出从不假定任何值(U 除外)。这是代码(它超级简单,我保证!)

library ieee;
use ieee.std_logic_1164.all;

entity OR_LOGIC is
    port(
        in_a  : in  std_logic;
        in_b  : in  std_logic;
        out_c : out std_logic
    );
end entity;

architecture OR_LOGIC_ARCH of OR_LOGIC is
begin
    out_c <= in_a or in_b;
end OR_LOGIC_ARCH;


library ieee;
use ieee.std_logic_1164.all;

entity AND_LOGIC is
    port(
        in_a  : in  std_logic;
        in_b  : in  std_logic;
        out_c : out std_logic
    );
end entity;

architecture AND_LOGIC_ARCH of AND_LOGIC is
begin
    out_c <= in_a and in_b;
end AND_LOGIC_ARCH;


library ieee;
use ieee.std_logic_1164.all;

entity COMBO is
    port(
        in_a  : in  std_logic;
        in_b  : in  std_logic;
        in_c  : in  std_logic;
        out_d : out std_logic
    );
end entity;

architecture COMBO_ARCH of COMBO is
    signal wire1 : std_logic;
    signal wire2 : std_logic;
    component OR_LOGIC
        port(
            in_a  : in  std_logic;
            in_b  : in  std_logic;
            out_c : out std_logic
        );
    end component;
    component AND_LOGIC
        port(
            in_a  : in  std_logic;
            in_b  : in  std_logic;
            out_c : out std_logic
        );
    end component;
begin

    or1 : OR_LOGIC port map (in_a, in_b, wire1);
    and1 : AND_LOGIC port map(in_c, wire1, wire2);
end COMBO_ARCH;

然后:

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity TEST_ENTITY is
end entity TEST_ENTITY;

architecture TEST_ENTITY_ARCH of TEST_ENTITY is    
    component ANDandOR
        port(
            in_a  : in  std_logic;
            in_b  : in  std_logic;
            in_c  : in  std_logic;
            out_d : out std_logic
        );
    end component; 
    signal in_a, in_b, in_c, out_d : std_logic;

begin

    combination : ANDandOR port map (in_a, in_b, in_c, out_d);

    process
    begin
        in_a <= '0';
        in_b <= '0';
        in_c <= '0';
        wait for 5ns;

        in_a <= '1';
        in_b <= '0';
        in_c <= '1';
        wait for 5ns;

        in_a <= '0';
        in_b <= '1';
        in_c <= '0';
        wait for 5ns;
    end process;

end architecture TEST_ENTITY_ARCH;

【问题讨论】:

  • 注意:刚才,我尝试仅测试 AND_LOGIC 实体,当一个输入为“0”时,我得到输出 0,正如预期的那样,但当两个输入为“1”时,输出为 X - 为什么!?
  • 您没有在顶部模块 (COMBO) 中分配 out_dout_d &lt;= wire2;
  • 在测试台中组件的名称应该是COMBO。模块ANDandOR 不存在。

标签: vhdl quartus


【解决方案1】:

首先,您已将与门的输出分配给wire2,但wire2 是浮动的。您应该像这样将其分配给您的输出

out_d <= wire2;

或者从您的内部信号中移除wire2并直接分配您的输出。

and1 : AND_LOGIC port map(in_c, wire1, out_d);

其次,您的测试台需要具有组件 COMBO 的正确名称才能正确映射它。 Quartus 可以为您生成一个测试台模板,然后您可以向其中添加测试代码。

处理 --> 开始 --> 开始测试台模板编写器

它非常方便:)

【讨论】:

  • 谢谢,感谢您的帮助,尽管这是一个愚蠢的疏忽:D
猜你喜欢
  • 1970-01-01
  • 2020-06-20
  • 1970-01-01
  • 2012-02-24
  • 2012-12-03
  • 1970-01-01
  • 2014-05-25
  • 2014-03-31
  • 1970-01-01
相关资源
最近更新 更多