数字电路中的除法与求余

数字电路设计之牛顿迭代法计算除法的verilog实现 牛顿迭代法(Newton's method)又称为牛顿-拉夫逊(拉弗森)方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。多数方程不存在求根公式,因此求精确根非常困难,甚至不可能,从而寻找方程的近似根就显得特别重要。方法使用函数f(x)的泰勒级数的前面几项来寻找方程f(x) = 0的根。牛顿迭代法是求方程根的重要方法之一,其最 阅读详情

数字电路中的除法与求余

一、硬件除法器的技术路线

1. 移位-减法类(digit recurrence,逐位产生商)

最直观的实现,即二进制长除法:

  • 恢复余数法(restoring) :余数左移 → 减除数 → 若为负则加回(恢复)并置商位 0,否则置 1。

  • 不恢复余数法(non-restoring) :不再"加回",而是根据当前余数符号决定下一位加还是减,省掉恢复步骤。

  • SRT 除法(Sweeney–Robertson–Tocher,现代 CPU 整数除的主力):

    • 核心思想:允许商的"数字"取冗余值域(radix-4 时取 {−2,−1,0,1,2}\{-2,-1,0,1,2\}{−2,−1,0,1,2}),只看余数与除数的最高几位即可查表选出商数字,不必做完整比较;
    • 余数用 CSA(进位保留加法器) 保持冗余形式,每轮不传播进位,缩短迭代关键路径;
    • 末端需要余数校正(余数可能为负)与在线商转换(把冗余商转成标准二进制),这部分控制逻辑在小位宽下是面积大头。

代价:radix-2 每周期出 1 位商(N 位需 N 周期),radix-4 出 2 位(约 N/2 周期),radix-8/16 更少但需预缩放。典型整数除法器是非流水的:延迟几十周期、吞吐约每 20~30 周期一次——这正是除法拖慢性能的原因。

2. 乘法迭代类(multiplicative / functional iteration)

把除法变成"求倒数 + 一次乘法",用乘法器 / 融合乘加(FMA)完成:

  • Newton–Raphson:xn+1=xn(2−D xn)x_{n+1} = x_n(2 - D\,x_n)xn+1​=xn​(2−Dxn​),平方收敛,每轮有效位数翻倍。需要小 LUT/ROM 给出 812 位初值,再迭代 35 次。
  • Goldschmidt:分子分母同乘校正因子 RnR_nRn​,每轮两次乘法且可并行,部分 GPU 采用。

优点:复用已有的 FMA / 乘法器,面积增量小、可流水、吞吐高,适合浮点除法。
缺点:IEEE-754 要求的正确舍入需额外精度与收尾逻辑,是复杂度激增之处。

3. 预计算约简(面向模运算 / 密码学)

  • Barrett 约简:预先算 μ=⌊b2k/m⌋\mu=\lfloor b^{2k}/m \rfloorμ=⌊b2k/m⌋,用乘法和移位估算商,避免真正的除法,适合偶发的模约简。
  • Montgomery 乘法:转到 Montgomery 域后,约简只需 k 次"乘-加-移位"迭代,完全不需要除以 m(只除以基数,即移位),是 RSA/ECC 硬件的主流。

4. 查表类

位宽很小(如 ≤8 位)或只需要倒数初值时,直接 LUT/ROM 查表可能比逻辑更省面积。

二、求余(mod)怎么来

  • 通用情况:余数就是除法器的第二个输出,几乎不额外花面积(需处理符号语义:C/Verilog 中余数符号跟随被除数,属"截断除法",硬件只在末位调整)。
  • 模 2n2^n2n:直接取低 n 位,零成本。
  • 模 **2n−12^n-12n−1**​ (梅森数) :折叠相加 + 端回进位(end-around carry),如 mod 255 即把各字节相加再折回。
  • 常量除数:用"魔数"强度削减,把 x / d​、x % d 变成"乘常量 + 右移"。
  • 计数器取模 N:无需除法器,用"累加器 + 比较器 + 减法"(到 N 就减 N)即可,一个加法器搞定。DDS/NCO 分频常用。

三、面积与延迟量级对比

方案面积延迟 / 吞吐典型用途
移位-减法 radix-2(串行)小~中(N 位加法器 + 移位 + 控制)N 周期,无流水面积敏感 MCU、软核
SRT radix-4 + CSA中(商选择 LUT + CSA + 末端校正)约 N/2 周期,非流水CPU 整数除
Newton / Goldschmidt复用 FMA,附加 LUT + 收尾逻辑长延迟、可流水、高吞吐浮点除、GPU
Barrett / Montgomery以乘法器为主可流水、高吞吐RSA / ECC
常量除数 / 2n2^n2n≈ 01 周期(移位 / 位掩码)编译器、地址对齐
计数器 mod N一个加法器 + 比较器1 周期分频、NCO

补充:除法在"单位面积能提供的吞吐"这一指标上最差,往往不如同宽度的并行乘法器划算——乘法面积大,但延迟固定、可流水线化,而除法的迭代特性使其难以流水线化。不过它并非"面积一定比乘法器大":SRT 的主体是加法器/CSA,面积常与乘法器相当甚至更小,真正吃亏的是延迟与吞吐。另外,小位宽时控制逻辑(商选择、余数校正、商格式转换、前导零检测 LZD)反而占主导。

四、常量除数(非 2n2^n2n)专题

1. 硬件上发生什么

除数是常量 ddd 时,硬件不做除法,而是走"乘倒数 + 移位":

x/d≈(x⋅m)≫s,x mod d=x−(x/d)⋅d x / d \approx (x \cdot m) \gg s,\qquad x \bmod d = x - (x/d)\cdot d x/d≈(x⋅m)≫s,xmodd=x−(x/d)⋅d

其中魔数 mmm 与移位量 sss 在编译/综合期算好并固化。对应硬件只有三件事:

  1. 一个 "乘以常量"的乘法器;
  2. 一个常量移位(接线,免费);
  3. 求余时再一步 x−q⋅dx - q\cdot dx−q⋅d(ddd 是常量,q⋅dq\cdot dq⋅d 只是几个移位相加)。

经典例子(32 位无符号):

// x / 10 : 魔数 0xCCCCCCCD,取高 32 位后再右移 3
wire [31:0] q10 = (x * 32'hCCCCCCCD) >> 35;   // 综合成 mulhi + 常量移位
// x % 10 : x - q*10 = x - (q<<3) - (q<<1)
wire [31:0] r10 = x - (q10 << 3) - (q10 << 1);

// 反例:除数运行时可变,魔数无法固化 → 退回真除法器
wire [31:0] q = x / d;   // d 非 localparam,必然例化除法器

这是常量乘法而非通用乘法,部分积都是 xxx 的移位副本或纯常量,没有真正的乘法阵列——这才是它便宜的原因。

2. 成本随除数"形态"变化

除数形态面积延迟说明
2n2^n2n≈ 00纯接线(移位 / 取位)
2n±12^n \pm 12n±11 个加法器1 级加法x≪n±xx \ll n \pm xx≪n±x,取模还能用折叠
popcount 小(如 3、5、10、100)很小1~2 级加法部分积项少,q⋅dq\cdot dq⋅d 也少
一般常量(如 0x9E3779B1)接近通用乘法器约 log⁡(项数)\log(\text{项数})log(项数) 级加法魔数接近满位宽,部分积项多
需要"加 x 修正"的除数再多一个加法器+1 级加法见下

关键细节:

  • 魔数常量的位密度(popcount)决定面积。魔数一般接近 2N2^N2N、并不稀疏,所以常量乘法器面积约为同宽度通用乘法器的几分之一到接近,但仍远小于完整 SRT 除法器(含商选择 LUT、CSA、末位校正、在线商转换、前导零检测)。
  • 部分除数需要额外修正。只做"乘 + 移位"对某些 ddd 会有 ±1\pm 1±1 误差,需再插一个"加 xxx 再移位"(Hacker’s Delight 中的 add-indicator)。例如 32 位除 7:
// x / 7 : t = mulhi(x, 0x24924925); q = (t + ((x - t) >> 1)) >> 2
  • 求余几乎不额外花钱:ddd 是常量,q⋅dq\cdot dq⋅d 就是 qqq 的几个移位相加,一个小的加法树 + 一个减法器。若 ddd 的 popcount 小(如 10 = 1010,仅 2 项),这一级几乎是白送。
  • 临界路径 = 常量乘法加法树 → 常量移位 →(求余时)乘减链,深度约几级加法器。综合后单周期可能跑不到高频,但插流水寄存器后即 1 结果/周期——这正是相对除法器的最大优势。

3. 横向对比

方案面积量级延迟吞吐
通用 SRT 除法器中(加法器/CSA + 控制)N ~ N/2 周期非流水,极低
常量除数 = 2n2^n2n001/周期
常量除数 = 2n±12^n\pm12n±11 加法器1 级加法1/周期
常量除数(一般,魔数)1 个常量乘法器 + 修正几级加法,可流水1/周期
通用乘法器O(N2)O(N^2)O(N2) 级约 log⁡N\log NlogN 级1/周期

直观结论:常量除数把"迭代型、非流水、低吞吐"的除法变成"组合型、可流水、全吞吐"的乘法,因此面积小、延迟低、吞吐高;它不是"零成本",但性价比远高于真除法器。

五、工程建议

  1. 优先消灭除法:除数能取 2n2^n2n 就取(移位/掩码);是常量就交给综合器做强度削减(Verilog 里对常量 /​、% 一般能自动优化,但务必看综合报告确认没例化除法器)。
  2. 除数必须是编译期常量:只要它运行时可变(哪怕只是配置寄存器),魔数就无法固化,会退回真除法器或倒数 LUT + 迭代,成本立刻上一个量级。
  3. 精确性要自己保证:(x*m)>>s 的取整方式、是否需要 add 修正、有符号/无符号语义、以及余数符号(跟随被除数)都要按 Hacker’s Delight 的结论来,不要自行取 ⌈2k/d⌉\lceil 2^k/d \rceil⌈2k/d⌉,会 off-by-one。
  4. 需要精确商 + 要吞吐:做流水线化 SRT(radix-4/8,余数保持 CSA 冗余形式)。
  5. 面积紧 + 吞吐低:用位串行除法器(如 Xilinx Divider Generator 的 radix-2 无流水配置、Altera lpm_divide​),或全芯片分时共享一个除法器。
  6. 浮点:单独做除法器不划算,复用 FMA + 小 LUT 初值走 Newton 迭代。
  7. 密码学大数模乘:用 Montgomery,而不是 Barrett 再配合除法。
  8. 位宽很小(≤8 位) :先评估 LUT/ROM 方案。
  9. 不要忘记 LZD/归一化、末端余数校正、冗余商转换这些"零碎"逻辑——它们常是小位宽除法器真正的面积来源。

参考

  • Hacker’s Delight(常量除法 / 魔数生成)
  • IEEE-754(浮点除法的正确舍入要求)
数字电路设计之GoldSchmidt除法的verilog实现 若a和b均有.1xxxxxx的形式,这是 阅读详情

相关推荐

<Verilog实现除法器> Verilog实现恢复余数(restoring)除法器

一,内容介绍 除法器是数字电路中的基础电路之一,也是CPU计算单元的核心功能之一。下面我们用verilog实现三种常用的除法器。 目前:Verilog实现恢复余数(restoring)除法器 下一篇:Verilog实现不恢复余数(non-restoring)除法器 写这些博文的动机:没别的意思,网上互相抄的东西太多了,结果连个能用的代码都没有,不能忍,所以自己写的。 二,除法器实现 ...

IC跳跳鱼的博客 2489

数字IC经典电路(3)——经典除法器的实现(除法器简介及Verilog实现)

除法器是一种用于执行除法运算的电路或器件。在数字电路中,除法器经常被用作重要的计算单元,其主要功能是将一个数除以另一个数并给出商和余数。与加法器和减法器类似,除法器也属于算术逻辑单元(ALU)的一种。不同的是,加法器和减法器能够执行加法和减法运算,但不能执行除法运算。因此,在数字电路中,需要引入除法器来执行除法运算。除法器通常由两个输入,也就是被除数和除数,以及两个输出,也就是商和余数。当除法器接收到被除数和除数时,它会执行除法运算并给出商和余数。

HFUT90S的博客 2万+

<Verilog实现除法器> Verilog实现不恢复余数(non-restoring)除法器

一,内容介绍 除法器是数字电路中的基础电路之一,也是CPU计算单元的核心功能之一。下面我们用verilog实现三种常用的除法器。 目前:Verilog实现不恢复余数(non-restoring)除法器 下一篇:Verilog实现牛顿迭代法除法器 写此类博文的动机:没别的意思,网上互相抄的东西太多了,结果连个能用的代码都没有,不能忍,所以我写个放这里。 二,除法器实现 ...

IC跳跳鱼的博客 2457

数字电路设计之恢复余数除法器的verilog实现

`timescale 1ns / 1ps ////////////////////////////////////////////////////////////////////////////////// // Company: SMIE // Engineer: 陈钰 // Create Date: 17:21:46 10/05/2014 // Design Name: d

I AM BACK 5371

<Verilog实现除法器>恢复余数除法器之单时钟周期改进版

一,内容介绍 除法器是数字电路中的基础电路之一,也是CPU计算单元的核心功能之一。下面我们用verilog实现三种常用的除法器。 Verilog实现恢复余数(restoring)除法器 Verilog实现恢复余数(restoring)除法器之单时钟周期改进版 Verilog实现不恢复余数(non-restoring)除法器 Verilog实现牛顿迭代法除法器 目前:verilog实现不恢复余数(non-restoring)除法器之单时钟周期改进版 二,恢复余数(restoring)除法器单时钟周期改进版实

IC跳跳鱼的博客 1107

<Verilog实现除法器> Verilog实现牛顿-拉夫逊(Newton-Raphson)除法器

阿斯顿阿斯顿啊啊是打发士大夫

IC跳跳鱼的博客 3586

用Verilog实现除法器两种方法:深入理解数字电路设计

用Verilog实现除法器两种方法:深入理解数字电路设计 去发现同类优质开源项目:https://gitcode.com/ 在数字电路设计中,除法器的设计与实现是一个重要的环节。今天,我们将介绍一个开源项目——用Verilog实现除法器(两种方法),该项目旨在帮助工程师和学者深入理解除法器的工作原理和设计方法。 项目介绍 用Verilog实现除法器(两种方法) 是一个开源项目,它提供了使用Veri...

gitblog_06752的博客 512

<Verilog实现除法器> 不恢复余数除法器之单时钟版

阿斯顿阿斯顿

IC跳跳鱼的博客 1277

电路中的乘法和除法-ChatGPT4o作答

text{部分积 4:} 1101 \times 1 = 1101 \ (\text{左移 3 位后为 } 1101000)\text{部分积 2:} 1101 \times 1 = 1101 \ (\text{左移 1 位后为 } 11010)\text{部分积 1:} 1101 \times 0 = 0000 \ (\text{低位 0,不需要加任何部分积})\text{部分积 3:} 1101 \times 0 = 0000 \ (\text{无需操作})在计算机和数字电路中,

qq_46215223的博客 948

74LS194芯片在除法电路中的妙用:移位与置数功能详解

本文深入解析了74LS194移位寄存器在数字除法电路中的创新应用。通过巧妙利用其并行置数与左移功能,将复杂的除法运算转化为清晰的时序控制流程,实现了不恢复余数法等算法的硬件化。该方案在硬件复杂度与教学直观性上取得了良好平衡,是理解计算机组成原理中除法运算电路实现的经典案例。

weixin_29194255的博客 505

10、基础算术电路中的除法运算详解

本文详细探讨了数字电路中实现除法运算的多种方法,包括基本除法电路原理、顺序除法器设计、常数除法的特殊化实现、模运算、反向乘法计算商、乘以倒数计算商等。同时分析了不同方法的适用场景及优缺点,并提出了电路优化思路和实际应用案例,最后展望了未来发展趋势。

k8l9m0n的博客 147

数字IC除法器结构

除法器是通过加法器/减法器和移位寄存器来实现的

qq_43433724的博客 1254

23、算术乘法与除法电路详解

本文详细介绍了数字电路设计中的基本算术运算——乘法与除法的相关算法和电路结构。内容涵盖基本顺序乘法器(左移与右移实现)、有符号数的乘法处理、布斯编码与(-1,0,1,2)编码的应用、特殊乘法器(如饱和乘法器、乘加运算、截断乘法器)以及恢复除法的实现与资源需求分析。同时,对不同乘法器和除法器的适用场景进行了对比总结,并提供了实际应用中的选择建议,帮助设计者根据系统资源和性能需求进行优化设计。

k8l9m0n的博客 177

数字电路:十六进制转换

本文详细介绍了十六进制在数字电路中的重要性及其与二进制、十进制和八进制的转换方法。十六进制通过简化二进制表示,广泛应用于计算机科学和电子工程领域。文章通过实例解析了十六进制在颜色代码、内存地址和硬件编程中的实际应用,并提供了转换的具体步骤。建议读者通过练习和实际项目加深理解,掌握这一重要数制。

NAN的博客 1251

实现高效的同步除法器设计

同步除法器是计算机算术运算中一种基本的数字电路,它能够在固定的时钟周期内完成除法运算。与异步除法器不同的是,同步除法器的每个操作步骤都由统一的时钟信号控制,确保所有操作在预定的时序内同步完成。同步除法器通常用于微处理器和数字信号处理器中,因为其可预测的性能和较为简单的控制逻辑。校正技术是与预估技术紧密相关的技术,它负责在预估过程中可能出现误差时进行调整,以确保计算结果的准确性。校正技术通常在预估步骤完成之后执行,以修正那些由预估不准确造成的误差。

weixin_35982453的博客 501

合规批量下载美国上市公司年报数据的一些经验和总结

本文总结了使用Python脚本批量下载和处理美国上市公司SEC报告的技术经验。通过CIK代码查询SEC EDGAR系统,生成特定日期和报告类型的URL,并使用Selenium和Requests库下载报告内容。流程包括数据获取、文件下载、Excel处理和多线程优化,确保高效处理几百条数据。关键技术挑战包括SEC访问限制、动态网页内容和数据完整性,解决方案包括设置合规的User-Agent、使用Selenium模拟浏览器行为以及错误日志记录。最佳实践包括模块化设计、多线程优化和严格遵守SEC合规性。该自动化流程

jyfool的博客 1635

用Verilog实现除法器两种方法-实验项目介绍

用Verilog实现除法器两种方法-实验项目介绍 【下载地址】用Verilog实现除法器两种方法-实验项目介绍 本项目通过Verilog语言实现两种不同的除法器,帮助开发者深入理解数字电路中的除法运算原理。实验要求在modelsim仿真环境中进行代码编写与功能测试,并通过synplify pro进行综合验证。项目详细介绍...

gitblog_06737的博客 475

PDF.js实现分片加载问题

PDF.js实现分片加载问题。

qq_32822693的博客 4977

Verilog 除法器设计

和十进制除法类似,计算 27 除以 5 的过程如下所示: 除法运算过程如下: (1) 取被除数的高几位数据,位宽和除数相同(实例中是 3bit 数据)。 (2) 将除数高位数据与除数作比较,如果前者不小于后者,则可得到对应位的商为 1,两者做差得到第一步的余数;否则得到对应为的商为0,将前者直接作为余数。 (3) 将上一步中的余数与被除数剩余最高位 1bit 数据拼接成新的数据,然后再和除数做比较。可以得到新的商和余数。 (4) 重复过程 (3),直到被除数最低位数据也参与计算。 需要说明的是,商的位宽应该

m0_50099041的博客 1606

智能制造之物料详解

制造业业务系统中的物料流转贯穿需求、采购、生产到交付全流程,各系统协同实现精准追踪。需求阶段由CRM/ERP/PLM生成物料计划;采购入库阶段SCM/WMS/QMS完成采购质检;生产阶段MES/APS协调领料加工;成品交付阶段WMS/SCM处理出库物流。整个流程以BOM为蓝图,ERP为调度中心,通过数据联动实现物料状态、位置和数量的全链路可追溯。

cdfunlove的博客 654

STM32入门教程:WiFi通信

第四步:初始化串口 在生成的代码中,您可以找到一个名为 "USARTx_Init" 的函数,其中 "x" 是您选择的串口号。然后,我们使用 "AT+CIPSEND" 命令发送UDP数据,接收到服务器的回复,并在终端上显示收到的数据。在配置向导中,您可以选择启用USART串口功能,并根据您的硬件连接,将串口设置为与WiFi模块连接的串口。在上述代码中,我们使用了 "HAL_UART_Receive" 函数来接收串口数据,并使用 printf 来在终端上显示收到的数据。如果有任何问题,请随时向我提问。

2401_85258012的博客 1073

用Verilog实现除法器(两种方法) - 实验项目介绍

用Verilog实现除法器(两种方法) - 实验项目介绍 【下载地址】用Verilog实现除法器两种方法-实验项目介绍 本项目通过Verilog语言实现两种不同的除法器,帮助开发者深入理解数字电路中的除法运算原理。实验要求在modelsim仿真环境中进行代码编写与功能测试,并通过synplify pro进行综合验证。项目...

gitblog_06715的博客 279

华为面试手撕真题【求1-n的最小公倍数】

求1-n的最小公倍数

MISAYAONE的博客 2万+
上一篇: Intel_TCC_Tools_BIOS配置步骤整理
下一篇: 商用处理器多点开花,边缘计算快速增长
Cerman
博客等级 码龄11年 63粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

Cerman

你的鼓励是探索和创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值