在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 4148|回复: 4

[求助] 有符号数累加器的分段设计

[复制链接]
发表于 2017-11-1 14:59:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
最近在设计一个21bits的有符号累加器,输入数据是7bits有符号数,累加个数暂定为8192.

为了节省功耗,将累加器分成了3个7bits寄存器{acc_2, acc_1, acc0}.

acc_0负责与输入的7bits数据相加,如果溢出则acc_1 ± 1. 以此类推。

这样设计可以让高位累加器 acc_2,acc_1减少翻转,达到降低功耗的目的。

当前有问题的地方在,如何正确有效地给acc_1传递 ±1的信息。

不同于无符号数,有符号数这里不好处理,往高手能给予帮助。多谢!
发表于 2017-11-2 14:00:45 | 显示全部楼层
这要看数如何表示了。如果输入的数din,和累加器的数都用补码表示,可以这样处理:
1. 如果din的b6为0(非负)。若 acc_0+din, 的进位为1, 则{acc_2,acc_1}+1; 若进位为0,不管acc21。
2. 如果din的b6为1(负数)。若 acc_0+din, 的进位为0, 则{acc_2,acc_1} -1; 若进位为1,不管acc21。

第1点好理解。
第2点的解释如下: 若din是负数,则可表示为分段的21位数 7f_7f_din. 运算时acc0+din,acc21+7f_7f+进位. 若acc_0+din的进位为1,可先运算7f_7f+1 == 00_00(最高位丢弃), 则不管acc21。若进位为0, acc21最终要加7f_7f,也就是减1.
你可以编一个C语言程序来验证。
 楼主| 发表于 2017-11-2 14:25:11 | 显示全部楼层
回复 2# 加油99


   你这种方法也是可以的。多谢帮助。
  我后来仔细想了想,直接把输入din转成原码计算,符号位作为加/减判断。进/借位往上传递,加/减则同时给3个累加器。

  这样,3个累加器级联出来的结果直接就是补码了。
发表于 2021-2-9 19:16:25 | 显示全部楼层
这个不考虑低功耗,如何来设计
发表于 2021-2-18 15:22:41 | 显示全部楼层
:):)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-22 04:29 , Processed in 0.017487 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表