我在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;
我很困惑。如果有人可以请求帮助我会很感激。谢谢!
答案 0 :(得分:1)
您需要执行以下操作:
m = a * b
acc' = m + acc
acc = acc'
其中acc'是存储在累加器中的新值。您的代码具有乘法和添加的实体,但没有描述实现累加器的寄存器。累加器寄存器为加法器提供第二个输入。只有当新产品可用时,还需要一个控制输入来写入累加器。