【问题标题】:VHDL 3 Bit Counter: Error Message 3363, 1408VHDL 3 位计数器:错误消息 3363、1408
【发布时间】:2016-09-17 11:31:42
【问题描述】:

我想用 VHDL 实现一个 3 位计数器,其电路原理图如图所示。

http://i.stack.imgur.com/OoD7F.jpg

当我实现代码时,我收到以下错误消息:

--与Formal OUT模式相关的实际信号'Q'可能不是类型转换或函数调用

--操作 not 不能与形式 OUT 关联。

我收到这三个错误消息,用于关联 D 触发器的输出和信号。

在 FF1 Q => 不是 q0

在 FF2 Q => 不是 q1

在 FF3 Q => 不是 q2

这是 3 位计数器的 VHDL 代码:


library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity counter_3bit_alt is
    Port ( clk : in  STD_LOGIC;
           clr : in  STD_LOGIC;
           Qout : out  STD_LOGIC_VECTOR (2 downto 0));
end counter_3bit_alt;

architecture Behavioral of counter_3bit_alt is

    component D_FlipFlop is
    Port ( clk : in  STD_LOGIC;
           clr : in  STD_LOGIC;
           D : in  STD_LOGIC;
           Q : out  STD_LOGIC);
end component;

signal q0, q1, q2 : std_logic;

begin

    FF1 : D_FlipFlop
        port map(
            clk => clk,
            clr => clr,
            D => q0,
            Q => not q0
        );

    FF2 : D_FlipFlop
        port map(
            clk => q0,
            clr => clr,
            D => q1,
            Q => not q1     );

    FF3 : D_FlipFlop
        port map(
            clk => q1,
            clr => clr,
            D => q2,
            Q => not q2
        );

        Qout <= q2&q1&q0;
end Behavioral;

D 触发器的 VHDL 代码是

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity D_FlipFlop is
    Port ( clk : in  STD_LOGIC;
           clr : in  STD_LOGIC;
           D : in  STD_LOGIC;
           Q : out  STD_LOGIC);
end D_FlipFlop;

architecture Behavioral of D_FlipFlop is
begin
    process(clk, clr)
        begin
            if (clr = '1') then
                q <= '0';
            elsif(rising_edge(clk)) then
                q <= D;
            end if;
    end process;

end Behavioral;

【问题讨论】:

  • 原理图触发器提供2个输出,VHDL触发器只提供一个。错误消息最终是此错误的后果。

标签: vhdl counter flip-flop


【解决方案1】:

D_FlipFlop 端口Q 是一个输出。输出应分配给信号,而不是语句。将输出分配给一个信号,然后将其反转为端口 D 的输入。

这是一个建议

signal q0, q1, q2 : std_logic;
signal not_q0, not_q1, not_q2 : std_logic;

begin

FF1 : D_FlipFlop
    port map(
        clk => clk,
        clr => clr,
        D => not_q0,
        Q => q0
    );
not_q0 <= not q0;

FF2 : D_FlipFlop
    port map(
        clk => q0,
        clr => clr,
        D => not_q1,
        Q => q1
    );
not_q1 <= not q1;

FF3 : D_FlipFlop
    port map(
        clk => q1,
        clr => clr,
        D => not_q2,
        Q => q2
    );
not_q2 <= not q2;

Qout <= q2 & q1 & q0;
end Behavioral;

【讨论】:

  • 你是对的,除了以下几点:not_q0
  • 你可以使用D =&gt; (not q0),因为D是一个输入端口。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-19
  • 1970-01-01
  • 1970-01-01
  • 2015-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多