解析计算机体系结构中的MACs实现

矩阵乘法包含大量的a+b*c类运算,因此常在运算中将乘法器和加法器合成一个计算单元,进程乘法累加操作,这个单元被称为MACs(multiply and accumulate operations.MAC).乘法运算是数学中重要的基本算术运算,乘法累加操作在数字信号处理中被广泛应用,比如,FFT,DFT,卷积计算,甚至是微控制器的ALU中的通用计算单元都能见到它的身影。在DSP应用中,比通用处理器更加侧重MACs的设计,MACs的逻辑实现通常是数字电路设计中Critical path的主要贡献方,设计的好坏决定了PPA,本文试图从软件视角搞清楚MACs是什么以及如何工作的。

设计原理

MACs顶层实现方框图如下,其中的operand_1 和 operand_2是32位输入操作数,MACs操作的结果通过64位的Result pin输出,内部的64位加法器将乘法器的输出作为第一个操作数,与存储在内部的第二个加法操作数相加,第二个操作数的来源一般是上一个周期的Result结果,得到Result输出和进位信号Carry,这里的32x32表示两32位输入的MAC,并非是乘法,也并非代表个数,如果N个这样的MAC,一般表示为N*32x32MAC.

MAC内部结构:

一个用VHDL实现的MACs单元逻辑:

  1 LIBRARY ieee;
  2 USE ieee.std_logic_1164.ALL;
  3 USE ieee.numeric_std.ALL;
  4
  5 ENTITY mac IS
  6         GENERIC (n   :   INTEGER := 4); --define X and Y size
  7         PORT (
  8                 ck  : IN  STD_LOGIC;
  9                 rst : IN  STD_LOGIC;
 10                 X   : IN  SIGNED (n-1 DOWNTO 0); --n
 11                 Y   : IN  SIGNED (n-1 DOWNTO 0); --n
 12                 A   : OUT SIGNED ((2+2*n)-1 DOWNTO 0)  --2+2n (include two leading bits for overflow)
 13         );
 14 END mac;
 15
 16 ARCHITECTURE hdl OF mac IS
 17         SIGNAL acc : SIGNED ((2+2*n)-1 DOWNTO 0) := (OTHERS => '0'); --2+2n
 18
 19 BEGIN
 20
 21         PROCESS (ck)
 22         BEGIN
 23                 IF rising_edge(ck) THEN
 24                         IF rst ='0' THEN --reset accumulator at low
 25                                 acc <= (OTHERS => '0');
 26                         ELSE
 27                                 acc <= acc + shift_left(X * Y, 1);
 28                         END IF;
 29                 END IF;
 30         END PROCESS;
 31
 32         A <= acc;
 33 END hdl;

这段代码对应的电路逻辑如下图所示,acc作为输出的同时,又通过一条反馈回路喂给加法器,作为其中一个操作数进行下次累加计算,所以叫做累加器-MACs.

值得一提的是,如上VHDL代码反应的时序逻辑中,乘法和加法属于组合逻辑部分,计算部分不需要时钟控制,MAC乘加运算计算完成后的结果需要保存在寄存器中,也就是下图中黄色的部分,这一步才用到时序逻辑保存中间结果,所以时钟信号和复位信号指向从时序逻辑这里输入。

Vedic Multiplier 电路实现

数字电路的设计中,内蕴了深刻的递归和同构的思想,当问题在不同层面具有相同的结构时,可以通过将复杂问题逐层递归分解,找到最小的问题可解决结构,再最小结构层面上把问题解决,然后再以此为基础,再按照分解的逆向过程逐步解决高层问题,最终得到整个问题的解,同样道理,构造32 \times 32 MACs,可以从最简单的2 \times 2乘法器开始构造。

采用Vedic算法的2 \times 2乘法器原理如下:

对应的数字电路实现如下图所示:

基于2 \times 2 multiplier,可实现4 \times 4的verdic multiplier

基于4 \times 4 multiplier,可实现8 \times 8的verdic multiplier

  • 8
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

papaofdoudou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值