news 2026/5/9 4:25:01

从小学数学竖式到FPGA硬件:图解4位乘法器是如何‘搭’出来的

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从小学数学竖式到FPGA硬件:图解4位乘法器是如何‘搭’出来的

从小学数学竖式到FPGA硬件:图解4位乘法器是如何‘搭’出来的

记得小学三年级第一次接触乘法竖式时,老师用粉笔在黑板上画出的那些错位相加的格子吗?当时我们或许不会想到,这些看似简单的计算步骤,竟与当今最先进的芯片设计有着惊人的相似性。本文将带您穿越数字世界的时空隧道,从最熟悉的十进制乘法出发,逐步拆解二进制乘法器的硬件实现奥秘,最终在FPGA的可编程逻辑单元中"搭建"出一个真实的4位乘法电路。

1. 乘法竖式:跨越千年的计算智慧

当我们计算12×34时,大脑会自动执行以下步骤:

1 2 × 3 4 ----- 4 8 (12×4) 3 6 (12×3,左移一位) ----- 4 0 8

这个过程中隐藏着三个关键计算原则:

  1. 部分积生成:分别计算被乘数与乘数每一位的乘积
  2. 位权对齐:根据乘数位的权重进行左移
  3. 累加求和:将所有部分积相加得到最终结果

在二进制世界中,这个过程变得更加简洁。以4位二进制数1011(11) × 1101(13)为例:

1 0 1 1 × 1 1 0 1 --------- 1 0 1 1 (×1) 0 0 0 0 (×0,左移1位) 1 0 1 1 (×1,左移2位) 1 0 1 1 (×1,左移3位) --------- 1 0 0 0 1 1 1 1 (143)

二进制乘法的简化之处在于:

  • 部分积只有两种可能:被乘数本身或全0
  • 不需要真正的"乘法"运算,只需条件复制和移位

提示:硬件设计中的乘法器本质上就是将这些纸面计算步骤转化为永久性的电路连接

2. 从算法到电路:二进制乘法的硬件映射

2.1 部分积的硬件实现

在FPGA中,每个部分积可以通过简单的与门阵列生成。对于4位乘法器A×B:

// 部分积生成示例 wire [3:0] pp0 = {4{B[0]}} & A; // A×B[0] wire [3:0] pp1 = {4{B[1]}} & A; // A×B[1]左移1位 wire [3:0] pp2 = {4{B[2]}} & A; // A×B[2]左移2位 wire [3:0] pp3 = {4{B[3]}} & A; // A×B[3]左移3位

实际硬件中,这部分对应FPGA的可编程逻辑单元(LUT)配置。Xilinx 7系列FPGA中,每个SLICE包含4个6输入LUT,可以灵活实现各种逻辑功能。

2.2 加法器阵列:硬件中的竖式计算

将部分积相加的传统方法称为"行波进位加法器阵列",其结构直接对应小学数学竖式:

PP3[3] PP3[2] PP3[1] PP3[0] 0 0 0 PP2[3] PP2[2] PP2[1] PP2[0] 0 0 PP1[3] PP1[2] PP1[1] PP1[0] 0 PP0[3] PP0[2] PP0[1] PP0[0] ----------------------------------------

硬件实现时需要三个主要组件:

  1. 全加器(FA):处理1位加法并产生和与进位
  2. 进位链:将低位进位传递到高位
  3. 布线资源:连接各个计算单元

Xilinx FPGA中的CARRY4原语专门优化了进位链传播,每个CARRY4可以处理4位加法。下图展示了一个4位乘法器的加法器阵列布局:

3. FPGA实战:三种乘法器架构对比

3.1 直接实现法(组合逻辑乘法器)

直接使用Verilog的乘法运算符:

module direct_multiplier ( input [3:0] a, input [3:0] b, output [7:0] p ); assign p = a * b; endmodule

资源消耗(以Xilinx Artix-7为例):

资源类型使用量占比
LUT325%
CARRY4312%

特点

  • 单周期完成计算
  • 延迟约3.2ns(100MHz时钟)
  • 资源消耗较大

3.2 移位相加法(时序逻辑乘法器)

module shift_add_multiplier ( input clk, input [3:0] a, input [3:0] b, output reg [7:0] p ); reg [7:0] accum; reg [2:0] count; always @(posedge clk) begin if (reset) begin accum <= 0; count <= 0; end else if (count < 4) begin accum <= accum + (b[count] ? a << count : 0); count <= count + 1; end p <= (count == 4) ? accum : 0; end endmodule

性能对比表

指标直接实现法移位相加法
最大频率312MHz250MHz
计算周期数14
LUT使用量3212
能效比1x3.2x

3.3 华莱士树压缩法

这是一种优化方案,通过减少加法器级数来提高速度:

module wallace_multiplier ( input [3:0] a, input [3:0] b, output [7:0] p ); // 部分积生成 wire [3:0] pp0 = {4{b[0]}} & a; wire [3:0] pp1 = {4{b[1]}} & a; wire [3:0] pp2 = {4{b[2]}} & a; wire [3:0] pp3 = {4{b[3]}} & a; // 第一级压缩 wire [3:0] s1, c1; full_adder fa1_0 (pp0[1], pp1[0], 0, s1[0], c1[0]); full_adder fa1_1 (pp0[2], pp1[1], pp2[0], s1[1], c1[1]); // ...更多加法器实例化 // 最终相加 assign p = {2'b0, pp3, 1'b0} + {c2, s2, 1'b0}; endmodule

华莱士树优势

  • 加法器层级从O(n)降至O(log n)
  • 4位乘法仅需2级加法
  • 关键路径延迟减少约40%

4. 现代FPGA中的DSP硬核

现代FPGA通常集成了专用DSP Slice,如Xilinx的DSP48E1:

module dsp_multiplier ( input [3:0] a, input [3:0] b, output [7:0] p ); DSP48E1 #( .USE_DPORT("TRUE"), .MREG(0) ) dsp_inst ( .A({10'b0, a}), .B({10'b0, b}), .P(p), // 其他信号连接 ); endmodule

DSP硬核 vs 逻辑实现

特性DSP硬核逻辑实现
时钟周期1-21-4
功耗0.5mW/MHz1.2mW/MHz
最大频率500MHz+300MHz
可定制性有限完全可编程

在Vivado中,可以通过综合指令控制实现方式:

(* use_dsp48 = "yes" *) wire [7:0] result = a * b;
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/9 4:24:34

从零构建C++/OpenGL渲染引擎:核心架构、实现与调试指南

1. 项目概述&#xff1a;一个用C和OpenGL打造的轻量级渲染引擎最近在整理自己的代码库&#xff0c;翻出来一个几年前写的玩具项目&#xff0c;一个我称之为“CPlusPlusMiniEngine”的轻量级渲染引擎。它麻雀虽小&#xff0c;五脏俱全&#xff0c;核心目标就是用最纯粹的C和Open…

作者头像 李华
网站建设 2026/5/9 4:19:46

保姆级教程:用R语言复现HIV药物经济学Markov模型(附完整代码与数据)

从零构建HIV治疗Markov模型&#xff1a;R语言完整实现与可视化解析 在药物经济学领域&#xff0c;Markov模型就像一位精算师手中的水晶球&#xff0c;能够预测长期慢性病治疗过程中的健康状态变迁与资源消耗。想象你正面对一篇满是转移概率表格的文献&#xff0c;如何将这些静态…

作者头像 李华
网站建设 2026/5/9 4:18:10

为Godot引擎配置Catppuccin主题:提升开发体验的完整指南

1. 项目概述&#xff1a;为你的Godot引擎注入Catppuccin色彩 如果你和我一样&#xff0c;每天要花大量时间在Godot编辑器里敲代码、调节点&#xff0c;那么一个顺眼的编辑器主题就不仅仅是“锦上添花”&#xff0c;而是实实在在的生产力工具。长时间面对默认的、高对比度或者配…

作者头像 李华
网站建设 2026/5/9 4:13:30

基于Claude模型构建模块化AI技能库:架构设计与工程实践

1. 项目概述与核心价值 最近在AI应用开发圈里&#xff0c;一个名为“claude-skills”的项目引起了我的注意。这个项目名直译过来就是“Claude技能”&#xff0c;听起来像是一个围绕Anthropic公司Claude模型构建的工具集或技能库。作为一名长期混迹于AI工程化落地一线的开发者&a…

作者头像 李华
网站建设 2026/5/9 4:09:29

V-DPM技术解析:4D动态场景重建原理与实践

1. 项目概述V-DPM&#xff08;Video Dynamic Point Map&#xff09;这项技术最近在计算机视觉圈子里引起了不小的讨论。作为一名长期从事三维重建和动态场景分析的工程师&#xff0c;我第一次看到这个项目时就被它独特的思路吸引了。简单来说&#xff0c;这是一种能够从普通视频…

作者头像 李华