原创 《CPU设计实战》-(2) booth算法

2021-7-10 11:42 4373 20 5 分类: FPGA/CPLD 文集: 技术书籍读后感
感谢“面包板社区”,给了我这个评测的机会,在 位竞争者中杀出,我很感激。
回顾一下,虽然没有“龙芯试验箱”,但这本《配套教程》还是讲解了很多开发过程。闭上眼睛回想一下,我以前掌握的哪些 FPGA的开发知识都还没有过时和落伍。
下面我们继续阅读,进入下一章..
================================================
第五章节,在流水线中添加运算类指令
booth计算 5*(-7)的例子,我居然一下子没有看懂!!...
--------------------------------------------------
不是廉颇老矣,而是这个“booth乘法器”,我以前居然没有见过!!!
   应该是和抠底壳算法一样,是2010年以后流行起来码技术,正好可以刷新我的知识结构!
  一本书如果能为自己带来新知识,哪怕是新增一种新技术储备,这本书就很值了!!
百度百科的解释:
布斯算法将乘数看作从最低位开始的一串二进制数字。
从最低位算起,只要这串数字为“0“,就不执行任何操作;
当这串数字遇到第一个“1”时执行一次减法,即减被乘数与该位权值的乘积,而对于其后的“1”不执行任何操作;
当这串数字再变为“0”时,则遇到第一个“0”时执行一次加法,即加被乘数与该位权值的乘积,而对其后的“0”则不执行任何操作。
如此一直进行到最高位  。
--------------------------------------------------
我理解了一下:  booth 算法的原理,应该是这样的:
--------------------------------------------------
举例: 5(0000_0101) * 7(0000_0111) 乘法运算,先 按数字7 来计算,比较快一点:
(数字7:  0111 : 从右到左,从最低bit到最高位的顺序;  默认第-1位,其bit 已经是 0) 
第0位 1,发生一次上跳变,累加数字: - 2^0 * 5;    (0变1,负号,本地权重2^0)
第1位 1,没有跳变,累加数字0;                           (1变1,无变化)
第2位 1,没有跳变,累加数字0;
第3位 0,发生下跳变, 累加数字 : 2^3 *5            (1变0,为正)
再往后,都是0,没有跳变,累计数都是0
所以最终结果是: - 2^0 *5  + 2^3 *5  = -5 + 40 = 35 = 5 *7
---------------------------------
同例: 5(0000_0101) * 7(0000_0111) 乘法运算,用5计算:
(数字5:  0101 : 从右到左,从最低bit到最高位的顺序;  默认第-1位,其bit 已经是 0) 
第0位 1,发生上跳变,累加数字: - 2^0 * 7;   (0变1,负号,本地权重2^0)
第1位 0,发生下跳变,累加数字:   2^1 * 7;    (1变0,为正)
第2位 1,发生上跳变,累加数字: - 2^2 * 7;     (0变1,负号)
第3位 0,发生下跳变,累加数字:   2^3 * 7       (1变0,为正)
再往后都是0,没有跳变,累计数都是0
所以最终结果是: - 7 + 14 -28 + 56  = 35 = 5 *7
--------------------------------------------------------------
采用 booth 算法,不仅是 每个bit的1参与运算,0也参与运算;
并且连续的1,连续的0不参与运算, 理论上可以降低运算强度
特殊情况下,对于 010101 这样的交错的序列,似乎booth算法也就没什么加速了
================================================
再回到书本的例子中来,其实是一个 码制的表示和转换问题: 
无符号数的加法: 可以直接用加法器运算
          (缺点是进位链比较长,不在本次讨论范围部内)
有符号数减法:在计算之前先判断大小,按照大小顺序送入减法器输出结果(绝对值)
          然后再根据 小减大还是大减小,确定正负符号
         (缺点是非常麻烦,还要逻辑判定等,而使用补码表示就会很简单)
无符号数的乘法: 是一个循环移位累加器,逐bit左移累加,在N拍后得到累加结果
          (缺点是计算时间比较长,而且不支持有符号数)
有符号数的乘法: 因为原码的乘法已经没有多少优化空间
          可以先变换成 符号+原码 形式,套用无符号乘法计算绝对值乘积,
          再确定最终的正负符号,码制变换成 补码形式最终输出
          (乘法器的缺点很多,这也正是 booth乘法器要针对的地方!!)
----<待续>----

作者: 乖乖兔爸爸, 来源:面包板社区

链接: https://mbb.eet-china.com/blog/uid-me-1729144.html

版权声明:本文为博主原创,未经本人允许,禁止转载!

PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

商业资讯 2021-8-3 15:33

学习了

yzw92 2021-7-11 08:51

感谢分享
相关推荐阅读
乖乖兔爸爸 2024-12-09 13:41
最近分析了 I2C挂死问题, 思维导图如下
...
乖乖兔爸爸 2024-10-30 16:47
SerDes 技术这么火热,怎么找不到一本 权威的出版物呢 ?
SerDes 技术这么火热,怎么找不到一本 权威的出版物呢?例如《SerDes权威指南》,《SerDes技术大全》,《SerDes技术内部》,《SerDes从入门到精通》之类的?或者国外的权威教材?或...
乖乖兔爸爸 2024-10-08 14:37
鸿蒙 相关的硬件/软件/书籍, 有没有相关评测呀? 学习一下当作以后的技术储备啦~~~
鸿蒙 相关的硬件/软件/书籍, 有没有相关评测呀? 学习一下当作以后的技术储备啦~~~感觉现在这么重视,怎么没有很多的评测项目呀 ?还是生态没有发育好?...
乖乖兔爸爸 2024-09-16 17:39
【N32G401开发板】+点亮LED灯板,装备测试开发的坎坷之路
首先, 非常感谢面包板社区给我的这次评测机会.  有很多的工具需要时不时来温习. 学而时习之,温故知新,都是极好的事缘起:    我司使用的LED灯板,入库时只...
乖乖兔爸爸 2023-03-31 17:05
《移动终端人工智能技术与应用开发》+读后感(2)
《移动终端人工智能技术与应用开发》+读后感(2)  非常感谢面包板社区,给了我这个测评的机会。《移动终端人工智能技术与应用开发》+读后感(1)见这个链接  https://mbb....
乖乖兔爸爸 2023-03-29 18:52
《移动终端人工智能技术与应用开发》+读后感(1)
《移动终端人工智能技术与应用开发》+读后感(1)1:非常感谢面包板社区,给了我这个测评的机会。 本人一直关注着移动终端的应用开发技术,特别是在Windows平台上开发安装应用程序。 ...
EE直播间
更多
我要评论
2
20
关闭 站长推荐上一条 /3 下一条