2012.4 - VIVADO HLS乘法与DSP的更好的时序性能

描述

在我的HLS设计中,我试图做一个简单的17乘42位乘法,我期望XST工具产生2个DSP。

但是,我有4个DSP。

如何实现2的DSP乘法?

解决方案

下面的代码片段是一个例子,说明如何使用最小数量的DSP来进行最佳的定时性能。

这将发生一个简单的A= B*C乘法。

其中包括“宽宽多”。
用一个“*”算子进行多重运算
//y定义有用算子
//取消注释并运行“cSIM”以查看没有浇铸上层产品的情况
//SHIFT设计不能正常工作,因为表达式
/'/tMPa a*y’具有宽度(AyToeSoult+ +(ByTooStult-宽度17))=42
//在LSH操作之前未调整到必要的59位,
//(由于C语义学)。这种行为被记录在UG902的PP34-335上。
//定义NOSTCAST故障

VuleWiel-Mult(iN-Ayt iNa A,iN-Byt Inb,OutthPot&App.Outp)
{
αiIFNDEF使用算子
αεUntul<17 >x= iNeb.范围(16,0);
αApIn It <bytoesoul-宽度-17和gt;y= ino.b范围(bytoetoload宽度-="" 1,="" 17);="" gt;="">17;
α/ /有效地将iNa A的位铸造成整数不影响ApIn It <&
αApIn It <aytoesoultwield&gt;tmpya=ina a.范围(aytoesoul-wang--="" 1,="" 0);<br="">下面是确保变速器中的MSB不丢失的必要条件
αApIn It <pytoesoopfield&gt;tmpa p=tmpa="" a*x+(apin="" it="" <pytoesoopult&gt;(tmpa="" a*y)<lt;17);<br="">否则
αApIn It <pytoesoopfield&gt;tmpa p=tmpa="" a*x+(="" *apin="" it="" <pytoesoopult&gt;*="" (tmpa="" a*y)<lt;17);<br="">第二节
α/ /有效地将整数乘积返回到不动点。
A//N.B用于ApLoad </gt;i>选择α/ /整数为自然乘积宽度,即
α/ /操作数宽度。对于产品宽度不是简单的总和的情况
{ / /操作数宽度,TMPUP P在分配之前的缩放(移位)
可能是必要的。
εOutp p范围(p-全宽度-1,0)=tMP~(p);
否则
α-Outthp=iNa a*iNb;
第二节
}

编辑 重设标签(回车键确认) 标为违禁 关闭 合并 删除

提问于 2018-07-30 18:11:04 +0800

这个帖子被标记为一个社区wiki

这个帖子是一个wiki(维基). 任何一个积分 >500的人都可以完善它