当前位置: 首页 > news >正文

加法器进位的那些事

目录

一、前言

二、十进制的加法

三、 二进制的加法

四、分组进位


一、前言

你知道二进制吗? 你了解他的加法进位吗?对于二进制的进位, 是怎么进位的? 对于打位宽的加法又是怎么让其加速进位的?


二、十进制的加法

在日常生活中, 加法于我们无时不在, 例如 198 + 182 = ?

首先先计算个位, 然后将进位 “1” 到十位, 然后计算十位, 将进位 “1” 到百位。


三、 二进制的加法

在二进制的世界中, 它也是如此, 例如 A = 100110, B = 011011, A + B = ?

它的计算公式为:

S_i = A_i\bigoplus B_i \bigoplus C_{i-1}

C_i = A_iB_i + (A_i\bigoplus B_i)C_{i-1}

其中, S_i 代表第 i 位的和结果, C_i 代表第 i 位需要往前进位的结果。

那怎么解读这个公式呢?

S_i 比较好理解, 因为根据真值表可以得到;

C_i 公式由两部分组成:

  • A_iB_i  :这个代表当前第 i 位 本身是否能进位,假设 A_i 和 B_i 都为 1, 那么 C_i 就为 1, 它肯定是要进位的;
  • (A_i\bigoplus B_i)C_{i-1}:这个代表是否要传播前一位的进位 C_{i-1}

非常好理解, 打个比方, 假设 A = 100110, B = 011011:

  • 对于第 0 位 是否要进位取决于 A_0B_0;
  • 对于第 1 位 是否要进位取决于 A_1B_1 + (A_1 \bigoplus B_1)C_0, 因为这里的 A_1B_1 本身就等于 1 了, 所以是会进位;
  • 对于第 2 位 是否要进位取决于A_2B_2 + (A_2 \bigoplus B_2)C_1+ (A_2 \bigoplus B_2) (A_1 \bigoplus B_1)C_0, 因为这里的A_2B_2 本身就等于 0, 所以自身不会产生进位, 然后看后面部分 (A_2 \bigoplus B_2)C_1, 因为 (A_2 \bigoplus B_2) 等于 1, 所以会将前面的 C_1 往下传播。
  • 以此类推...

我们令:

g_i = A_iB_i

p_i = A_i\bigoplus B_i

那么有:

S_i = p_i\bigoplus C_{i-1}

C_i = g_i+ p_iC_{i-1}

我们先看每一位 C_i

C_1 = G_1 +P_1C_0

C_2 = G_2 +P_2C_1 = G_2 + P_2G_1 +P_2P_1C_0

C_3 = G_3 +P_3C_2 = G_3 + P_3G_2 +P_3P_2G_1+P_3P_2P_1C_0

C_4 = G_4 +P_4C_3 = G_4 +P_4G_3 + P_4P_3G_2 +P_4P_3P_2G_1+P_4P_3P_2P_1C_0

\cdot \cdot \cdot

每一位 C_i 都会依赖第 i 位本身是否产生进位, 如果没有就会依赖上一级是否有进位传播进来, 如果没有则会依赖上上级是否有进位传播进来, 以此类推。。。


四、分组进位

上面我们给出了对操作数的每一个 bit 进行进位计算, 这一章节我们来了解对于大位宽的分组进位,众所周知, 我们再搭建电路的时候为了它能够加快延时, 我们对大位宽的加法的操作数进行了分组,例如 16 位的加法:A = 1101100011110101, B = 0110110111101100.

我们可以将 A 和 B 分为 4 组, 每一组就只有 4 个 bit, 我们可以计算每一组的进位, 然后将进位传播到下一组作为下一组的 “ C_0 ”, 步骤如下:

分组: 将 A 和 B 分为 4 组, 得到:

A_{(3,0)} = 0101, B_{(3,0))} = 1100

A_{(7,4)} = 1111, B_{(7,4))} = 1110

A_{(11,8)} = 1000, B_{(11,8))} = 1101

A_{(15,12)} = 1101, B_{(15,12))} = 0110

计算每一组的 “组生成项 Pg” 和 “组传播项 Gg”, Pg 类似于当前组号 j 的 p_j, 也就是向前是否向前传播前一组的进位;Gg 类似于当前组号 j 的 g_j, 也就是当前组本身是否能产生进位。

那每一组的 Gg 和 Pg 怎么计算得到呢?

第一组来看, Gg 是组本身是否会产生进位, Pg 是组是否会传播组前的进位 C_0

Gg_0 = g_3+p_3g_2+p_3p_2g_1+p_3p_2p_1g_0

Pg_0=p_3p_2p_1p_0

C_4 = Gg_0 + Pg_0C_0

从第二组看, Gg 是第二组本身是否会产生进位, Pg 是第二组是否会传播第一组的进位 C_4

Gg_1 = g_7+p_7g_6+p_7p_6g_5+p_7p_6p_5g_4

Pg_1=p_7p_6p_5p_4

C_8 = Gg_1 + Pg_1C_4

从第三组看, Gg 是第三组本身是否会产生进位, Pg 是第三组是否会传播第二组的进位 C_8

Gg_2 = g_{11}+p_{11}g_{10}+p_{11}p_{10}g_9+p_{11}p_{10}p_9g_8

Pg_2=p_{11}p_{10}p_9p_8

C_{12} = Gg_2 + Pg_2C_8

从第四组看, Gg 是第四组本身是否会产生进位, Pg 是第四组是否会传播第三组的进位 C_{12}

Gg_3 = g_{15}+p_{15}g_{14}+p_{15}p_{14}g_{13}+p_{15}p_{14}p_{13}g_{12}

Pg_3=p_{15}p_{14}p_{13}p_{12}

C_{16} = Gg_3 + Pg_3C_{12}

因此每个组可以先计算 Gg_j 和Pg_j, 最后在计算将每个组的进位往下一组传播, 这样可以节省电路的延时, 如图所示:

因为每一个组内都已经有对其他的 C_i 进行了计算, 所以很容易得到每一位的 Sum。

http://www.dtcms.com/a/542436.html

相关文章:

  • 江苏网站建设基本流程建站服务外贸
  • 免费网站推广产品百度网站怎么做
  • 网站开发建设需要多少钱建立网站的风险
  • ModbusRtc与ModbusTCP,esp32
  • 正规的网站制作服务电话社区论坛源码
  • 策划方案免费的网站oa系统办公软件怎么用
  • joomla 网站模板国内10大猎头公司排名
  • Python学习(12) ----- Python的异步操作
  • 什么腾讯网站做任务能刷q币百度搜索网站优化
  • 哈尔滨网站建设效果广州市建设集团网站首页
  • 平顶山网站开发wordpress程序 耗内存
  • 诸暨网站制作asia 域名 知名网站
  • python做直播网站网络推广公司招聘
  • 程序源代码网站建设一个招聘网站大概多少费用
  • elasticSearch之API:建议器(suggest)
  • 温州网站建设wmwl网站设计制作过程
  • 建设品牌型网站网站整体规划
  • 沈阳网站推广运营公司百度推广怎么做步骤
  • 网站免费大全wordpress 谷歌
  • Vite信息泄露 | CVE-2025-46565 复现研究
  • 将火山云TOS存储桶挂载到Linux服务器
  • 网站模板上传什么网站可以做数据调查
  • MongoDB数据库
  • 每天学英语(一)积极向上科技——东方仙盟炼气期
  • 织梦网站上传路径不对揭阳网站设计制作
  • 外贸网站建设 杭州网站建设都包括哪些方面
  • iis网站属性没有asp.net静态页面是什么意思
  • C++ 模板进阶
  • 怎么设置网站栏目百度推广营销
  • 国产MCU芯片在船舶压力传感器中的应用探索与实践