news 2026/6/11 3:31:03

FPGA新手必看:用Verilog手搓一个4位乘法器,从移位相加原理到仿真验证

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
FPGA新手必看:用Verilog手搓一个4位乘法器,从移位相加原理到仿真验证

FPGA实战:从零构建4位乘法器的Verilog实现与深度解析

第一次接触FPGA数字电路设计时,看到教科书上那些抽象的乘法器原理图总让人望而生畏。直到亲手用Verilog代码实现了一个4位乘法器,才真正理解硬件设计的思维方式与传统软件编程的本质区别。本文将带你用"移位相加"这一经典算法,从二进制乘法的底层逻辑出发,逐步构建完整的硬件实现方案。

1. 移位相加算法的硬件思维

想象一下小学时用竖式做乘法的过程:将乘数的每一位与被乘数相乘,然后根据位数进行移位,最后把所有部分积相加。移位相加算法正是这一过程的硬件实现,但需要从电路设计的角度重新思考。

以4位二进制乘法为例,计算1010(10) × 0110(6):

1010 (被乘数A) × 0110 (乘数B) ------- 0000 (B[0]=0,不操作) 1010 (B[1]=1,A左移1位) 1010 (B[2]=1,A左移2位) 0000 (B[3]=0,不操作) ------- 00111100 (最终结果60)

硬件实现的关键点在于:

  1. 移位即连线:在硬件中,"左移n位"不需要时钟操作,只需将信号线连接到高位即可
  2. 选择器替代判断:通过乘数的对应位控制数据选择器(MUX),决定是否保留部分积
  3. 并行处理:所有部分积可以同时生成,最后通过加法器树合并

位宽计算规则

  • 两个n位数相乘,结果最大需要2n位存储
  • 4位乘法器输出应为8位(2×4),防止溢出
// 位宽定义示例 input [3:0] data_a; // 4位被乘数 input [3:0] data_b; // 4位乘数 output [7:0] data_o; // 8位结果

2. 硬件架构设计与Verilog实现

2.1 电路结构分解

完整的4位乘法器包含三个核心模块:

  1. 移位模块:生成A×1、A×2、A×4、A×8的中间结果
  2. 选择模块:根据B的对应位决定是否采用该部分积
  3. 加法模块:将有效的部分积累加得到最终结果


(图示:数据流经移位、选择和加法三个阶段)

2.2 逐步实现Verilog代码

首先定义移位信号,注意位宽的扩展:

wire [4:0] shift_1bit = {data_a, 1'b0}; // A左移1位(×2) wire [5:0] shift_2bit = {data_a, 2'b0}; // A左移2位(×4) wire [6:0] shift_3bit = {data_a, 3'b0}; // A左移3位(×8)

接着实现选择器逻辑,使用条件运算符简化代码:

wire [3:0] d1 = data_b[0] ? data_a : 4'd0; // B[0]控制 wire [4:0] d2 = data_b[1] ? shift_1bit : 5'd0; // B[1]控制 wire [5:0] d3 = data_b[2] ? shift_2bit : 6'd0; // B[2]控制 wire [6:0] d4 = data_b[3] ? shift_3bit : 7'd0; // B[3]控制

最后实现三级加法结构,展示两种加法实现方式:

// 方法1:直接使用+运算符 wire [5:0] stage1 = {2'b0, d1} + {1'b0, d2}; wire [7:0] stage2 = {2'b0, d3} + {1'b0, d4}; wire [7:0] result = {2'b0, stage1} + stage2; // 方法2:实例化专用加法器模块 adder_6bit adder1(.data_a({2'b0, d1}), .data_b({1'b0, d2}), .data_o(stage1)); adder_8bit adder2(.data_a({2'b0, d3}), .data_b({1'b0, d4}), .data_o(stage2)); adder_8bit adder3(.data_a({2'b0, stage1}), .data_b(stage2), .data_o(result));

关键提示:加法器的级联顺序会影响关键路径延迟,在实际设计中需要考虑时序优化

3. 仿真验证与调试技巧

3.1 测试用例设计策略

有效的测试用例应覆盖以下场景:

测试类型示例输入预期输出
边界情况1111 × 111111100001
零值检测0000 × 101000000000
一位有效0001 × 001000000010
随机组合0110 × 110101001010

3.2 Vivado仿真实战

创建测试模块时注意这些要点:

module tb_mult_4bit(); reg [3:0] a, b; wire [7:0] out; // 实例化被测模块 mult_4bit uut (.data_a(a), .data_b(b), .data_o(out)); initial begin // 边界测试 a = 4'b1111; b = 4'b1111; #100; $display("15x15=%d", out); // 自动生成测试序列 for (int i=0; i<16; i++) begin for (int j=0; j<16; j++) begin a = i; b = j; #10; if (out !== i*j) $error("%dx%d=%d (预期%d)", i,j,out,i*j); end end end endmodule

常见仿真问题排查:

  1. 结果全零:检查选择器控制信号是否正确连接
  2. 部分位错误:确认加法器位宽是否匹配
  3. 时序违例:添加适当的时钟延迟或流水线

调试技巧:在波形图中标记关键信号(如部分积、中间和),使用颜色区分不同阶段

4. 性能优化与扩展思路

4.1 关键路径分析

通过时序分析可以发现:

  1. 选择器延迟:~0.2ns
  2. 6位加法器延迟:~0.8ns
  3. 8位加法器延迟:~1.2ns
  4. 总延迟:选择器 + 加法器×2 ≈ 3.2ns

优化方案对比:

方案延迟资源消耗实现复杂度
原始串行3.2ns简单
全并行加法1.2ns中等
流水线版1.2ns复杂

4.2 扩展至8位乘法器

基于4位模块构建8位乘法器的策略:

module mult_8bit( input [7:0] data_a, input [7:0] data_b, output [15:0] data_o ); // 将8位乘法分解为4个4位乘法 wire [7:0] p0 = data_a[3:0] * data_b[3:0]; // A0×B0 wire [7:0] p1 = data_a[7:4] * data_b[3:0]; // A1×B0 wire [7:0] p2 = data_a[3:0] * data_b[7:4]; // A0×B1 wire [7:0] p3 = data_a[7:4] * data_b[7:4]; // A1×B1 // 组合部分积(注意移位对齐) assign data_o = p0 + (p1 << 4) + (p2 << 4) + (p3 << 8); endmodule

这种级联设计的特点:

  1. 复用已验证的4位模块,降低开发风险
  2. 总延迟 ≈ 4位乘法延迟 + 加法器延迟
  3. 资源消耗约为4个4位乘法器加3个加法器

在实际项目中,根据速度要求可以选择更优化的算法如Booth编码或Wallace树结构,但移位相加法仍是理解乘法器基础原理的最佳起点。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/11 3:30:19

FanControl:重新定义Windows散热控制的交响乐指挥家

FanControl&#xff1a;重新定义Windows散热控制的交响乐指挥家 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/fa/F…

作者头像 李华
网站建设 2026/6/11 3:29:57

S12SDBGV2硬件调试模块:从比较器、状态机到跟踪缓冲区的实战解析

1. 项目概述&#xff1a;深入S12S调试模块的内核在嵌入式开发&#xff0c;尤其是汽车电子和工业控制这类对实时性和可靠性要求极高的领域&#xff0c;调试工作往往像是在一个高速运转的黑盒外部进行盲测。传统的软件断点会暂停CPU&#xff0c;改变程序时序&#xff0c;对于排查…

作者头像 李华
网站建设 2026/6/11 3:29:07

企业级智能体的发展趋势是什么?2026年五大技术方向深度解析

2026年&#xff0c;企业级AI智能体&#xff08;AI Agent&#xff09;已从概念验证全面进入工程化落地阶段。Gartner预测&#xff0c;到2026年底约40%的企业应用将集成任务特定型AI智能体。据赛迪顾问测算&#xff0c;2025年中国智能体市场规模达78.4亿元&#xff0c;预计2026年…

作者头像 李华
网站建设 2026/6/11 3:28:42

Windows 11系统优化完整指南:使用Win11Debloat一键清理系统臃肿

Windows 11系统优化完整指南&#xff1a;使用Win11Debloat一键清理系统臃肿 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutt…

作者头像 李华