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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 3932|回复: 16

[求助] 如何实现64个4位数据相加

[复制链接]
发表于 2021-9-1 11:41:24 | 显示全部楼层 |阅读模式

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

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

x
请问如果要实现64个4位数据相加,有什么比较好的实现方式吗。
发表于 2021-9-1 14:04:28 | 显示全部楼层
看你对 完成时间有什么要求吗? 分级完成?  64 -->32 --> 16 --> 8 --> 4 --> 2 --> 1.  然后综合一下看看在满足timing的勤快下需要插入几级DFF。   

如果对 结果 没有多久完成的要求, 那就用一个 加法器, 重复64次完成。考虑需要进位,需要 68bit 位宽的?
发表于 2021-9-1 15:39:37 | 显示全部楼层


y23angchen 发表于 2021-9-1 14:04
看你对 完成时间有什么要求吗? 分级完成?  64 -->32 --> 16 --> 8 --> 4 --> 2 --> 1.  然后综合一下看看 ...


4位数最大15,64*15=960,10个bit就够了,按分级方式,需要分6级,增加6个bit;如果只用一个加法器加,需要加64次,但这并不意味着每加一次就增加1bit,应该是每1,2,4,8,16,32次增加1bit
发表于 2021-9-1 15:43:06 | 显示全部楼层


jinj198908 发表于 2021-9-1 15:39
4位数最大15,64*15=960,10个bit就够了,按分级方式,需要分6级,增加6个bit;如果只用一个加法器加,需要 ...


你说的很对,位宽的问题,我没想太清楚, 谢谢指正。
发表于 2021-9-1 16:19:41 | 显示全部楼层
突然发现这个问题没有第一眼看起来那么简单,还有点儿意思,顺着楼上两位的思路,我准备基于Xilinx Spartan-6 FPGA实际试试。
发表于 2021-9-1 17:25:09 | 显示全部楼层
仿真结果如下图:
image.png
发表于 2021-9-1 17:28:23 | 显示全部楼层
本帖最后由 innovation 于 2021-9-1 17:42 编辑

基于楼上两位的方案一设计,最小化流水线延迟,最后一级以FFs的方式寄存输出(去掉本级寄存器,就没有流水线延迟,只有LUT门延迟和布线延迟),中间没加FFs,器件Xilinx Spartan-6 XC6SLX45-2,综合后消耗的资源如下图:
image.png
发表于 2021-9-1 17:31:39 | 显示全部楼层
综合后ISE给出的时序性能报告如下图,共计18个逻辑级,延迟13.592ns:
image.png
发表于 2021-9-1 17:36:29 | 显示全部楼层


innovation 发表于 2021-9-1 17:31
综合后ISE给出的时序性能报告如下图,共计18个逻辑级,延迟13.592ns:


行动力太强了。
发表于 2021-9-1 20:12:00 | 显示全部楼层
方案二,基于最大化流水线延迟。增加一个输入有效信号DinVld(单周期脉冲信号),当此信号有效时,触发开始对输入的64个数求和,同时,置位输出的忙状态信号Busy(在Busy信号为高时,DIN须保持不变),当64个数求和完成时,输出一个单周期脉冲信号DoutVld表明求和过程结束,此时Add_Dout即为求和结果,同时Busy信号回到低。流水线延迟(DinVld上升沿到DoutVld上升沿)共计67个系统时钟周期。
仿真结果如下图:

image.png
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-11-24 04:00 , Processed in 0.022468 second(s), 8 queries , Gzip On, Redis On.

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