用VHDL设计MAC单元(dsp处理器)

用VHDL设计MAC单元(dsp处理器),vhdl,Vhdl,我的项目是使用可逆逻辑设计32位MAC(乘法和累加)单元。对于这个项目,我使用可逆逻辑设计了32位乘法器和64位加法器。现在,在下一步中,我想设计一个64位累加器,它从加法器中获取值并存储它,然后与之前的值相加。我不知道如何设计积算器。 请帮助我完成我的项目 基本VHDL累加器只需几行代码即可实现。您决定如何实现它,以及任何必要的附加功能将取决于您的特定需求 例如: 输入是有符号的还是无符号的 输入的类型是什么 蓄能器是否饱和,或是否会翻转 下面是一个无符号累加器示例,让您了解需要实现什么(

我的项目是使用可逆逻辑设计32位MAC(乘法和累加)单元。对于这个项目,我使用可逆逻辑设计了32位乘法器和64位加法器。现在,在下一步中,我想设计一个64位累加器,它从加法器中获取值并存储它,然后与之前的值相加。我不知道如何设计积算器。
请帮助我完成我的项目

基本VHDL累加器只需几行代码即可实现。您决定如何实现它,以及任何必要的附加功能将取决于您的特定需求

例如:

  • 输入是有符号的还是无符号的
  • 输入的类型是什么
  • 蓄能器是否饱和,或是否会翻转
下面是一个无符号累加器示例,让您了解需要实现什么(基于此):

ieee库;
使用ieee.std_logic_1164.all;
使用ieee.numeric_std.all;
实体累加器是
港口(
DIN:标准逻辑向量(3到0);
CLK:标准逻辑中;
RST:标准逻辑中;
输出标准逻辑向量(3到0)
);
终端实体累加器;
蓄能器的结构特点是
信号acc_值:标准逻辑向量(3到0);
开始
过程(CLK)
开始
如果上升沿(CLK),则
如果RST='1',则
acc_值“0”);--将累积值重置为0
其他的

acc_value基本VHDL累加器只需几行代码即可实现。您决定如何实现它,以及任何必要的附加功能将取决于您的特定需求

例如:

  • 输入是有符号的还是无符号的
  • 输入的类型是什么
  • 蓄能器是否饱和,或是否会翻转
下面是一个无符号累加器示例,让您了解需要实现什么(基于此):

ieee库;
使用ieee.std_logic_1164.all;
使用ieee.numeric_std.all;
实体累加器是
港口(
DIN:标准逻辑向量(3到0);
CLK:标准逻辑中;
RST:标准逻辑中;
输出标准逻辑向量(3到0)
);
终端实体累加器;
蓄能器的结构特点是
信号acc_值:标准逻辑向量(3到0);
开始
过程(CLK)
开始
如果上升沿(CLK),则
如果RST='1',则
acc_值“0”);--将累积值重置为0
其他的
acc_值
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity accumulator is
  port (
    DIN:  in  std_logic_vector(3 downto 0);
    CLK:  in  std_logic;
    RST:  in  std_logic;
    DOUT: out std_logic_vector(3 downto 0)
  );
end entity accumulator;

architecture behave of accumulator is

  signal acc_value : std_logic_vector(3 downto 0);

begin

  process(CLK)
  begin
    if rising_edge(CLK) then
      if RST='1' then
        acc_value <= (others => '0'); -- reset accumulated value to 0
      else
        acc_value <= std_logic_vector( unsigned(acc_value) + unsigned(DIN) );
      end if;
    end if;
  end process;

  -- Assign output
  DOUT <= acc_value;

end behave;