VHDL - 在第三个实体中使用两个组件

时间:2014-04-25 14:51:22

标签: components vhdl

我在VHDL中很新,我有一个简单的问题。我有一个MAC(Multiply-And-Accumulate)实体,其中包含2个组件:'multiplier'和'add_sub_n'。我希望MAC获得两个输入a,b,将它们相乘并将它们添加到旧的结果中,之前我使用过Mac。这是我的代码:

    -- libraries decleration
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity MAC is 

    port  (a   : in  std_logic_vector(N-1 downto 0);
           b   : in  std_logic_vector(N-1 downto 0);
           mac : in  std_logic_vector(N-1 downto 0);
                 s   : out std_logic_vector(N-1 downto 0);
end MAC;

architecture MAC_Logic of MAC is

component Multiplier is 
    port(
    a,b : in  std_logic_vector(N-1 downto 0);   
    c   : out std_logic_vector(N-1 downto 0)); 
end component;

component Add_Sub_N is
    port(
    a,b  : in  std_logic_vector(N-1 downto 0);
    sub  : in std_logic;
  cout : out std_logic;
    s    : out std_logic_vector(N-1 downto 0));
end component;

signal temp1 : std_logic;

    begin   
    mul : Multiplier
        port map(a=>a, b=>b, c=>temp1);

  addsub : Add_Sub_N
        port map(a=>temp1, b=>mac, sub=>0, cout=>cout, s=>s); 

    end MAC_Logic;
我很困惑。如果有人可以请求帮助我会很感激。谢谢!

1 个答案:

答案 0 :(得分:1)

您需要执行以下操作:

m = a * b
acc' = m + acc
acc = acc'

其中acc'是存储在累加器中的新值。您的代码具有乘法和添加的实体,但没有描述实现累加器的寄存器。累加器寄存器为加法器提供第二个输入。只有当新产品可用时,还需要一个控制输入来写入累加器。