打印

如何降低fpga的资源利用率

[复制链接]
9298|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
在公司原有代码的基础上,修改了两个模块,主要就是hdb3编解码。虽然代码看上去简化了不少,可是编译出来的结果,资源的利用率差不多。
只是其中一项number of occupied slices 这一项本来是62%,修改完代码后变成了71%,不知道这项指标指的是什么?如何才能降低该指标的利用率?还请大家提点

相关帖子

沙发
明空| | 2010-12-9 14:54 | 只看该作者
这个和代码有一定关系,像我们常说的a+b+c+d和(a+b)+(c+d)一样,前者用到的资源比后者多,建议在优化一下代码。

楼下的继续补充。

使用特权

评论回复
板凳
sleepybear| | 2010-12-9 15:32 | 只看该作者
本帖最后由 sleepybear 于 2010-12-9 15:35 编辑

用FPGA做运算的时候,看看能否利用其中的内嵌资源,比如DSP块,不仅仅是乘加运算,其中还有一些寄存器,灵活运用的话,能节省很多资源。
举个简单的例子,比如在I2S接口中做一个24bit音频的串行输出,如果用移位寄存器,就是消耗的slice的寄存器资源。但是如果换一个思路,用乘2运算来代替移位(以前我们常常是用移位来代替2的整数次幂的乘法),就可以用DSP来做,省了slice资源。当然,需要器件内有多余的DSP。

使用特权

评论回复
地板
chenqinte|  楼主 | 2010-12-9 16:22 | 只看该作者
hdb3编解码需要通过之前的值来决定现在的取值,所以我用到了很多的寄存器,用于储存进来的数据。因为这个编解码也不是很难,加上我的习惯,整个模块下来都是if-else,和assign语句。是不是我的代码风格也有影响

使用特权

评论回复
5
lelee007| | 2010-12-9 18:01 | 只看该作者
优化FPGA设计不要用软件思维的方式去作所谓的优化,用逻辑电路的思维去指导代码优化,不然综合出来的不一定是什么结果

使用特权

评论回复
6
sleepybear| | 2010-12-10 09:59 | 只看该作者
本帖最后由 sleepybear 于 2010-12-10 10:05 编辑


不了解你那个算法的细节。不过,如果需要对数据进行缓存,而又不是缓存特别长(特别长的可以用Block RAM了),可以用用DSP里边的寄存器。图中是V5的DSP48E,红圈都是不用白不用的寄存器,可以用乘1加0的办法来单纯用作几个周期的数据缓存。当然,这样在实现的时候可能会有问题,最好加位置约束。
只是个例子,具体还要看你的器件特点、资源情况灵活使用。

或者,如果数据延迟是固定的若干周期,也可以用SRLC32E(Xilinx的器件基本都有这个宏,不同器件名字可能不同,还有16的,具体可以查ISE的doc文件夹下的文档)做延迟,这个用的是LUT(本质上就是SRAM存储单元嘛),延迟周期还可以动态配置,很省寄存器。时序考虑,最后只加1级的寄存器即可。比如要延迟10个周期,可以用这个SRLC32E做9个周期延迟,最后加一级寄存器。

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
SuperX-man + 2
7
dan_xb| | 2010-12-10 10:02 | 只看该作者
像你这个样子用很多的寄存器,不仅是资源消耗的问题,还有频率上不去。建议使用BRAM,把你的数据放到BRAM里面,然后通过控制地址信号,从BRAM里面提取数据,然后做判断。
好的代码,是不会有很长的If-Else的。
对于这种图像处理,除了使用DSP块以外,更重要的是使用流水线处理方式,充分利用各种次级信号来作为控制,而不是写一个大的状态机

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
SuperX-man + 2
8
speedwind| | 2011-1-11 14:28 | 只看该作者
有一个误区, 如果一个Slice里面的一个LUT(查找表) 被使用了,即使这个Slice里面其它的FF(触发器)和LUT都没有用, 它也被计入number of occupied slices, 实际上在你后续添加的设计里面,这个SLICE里面没有用的FF和LUT还是可以使用的。所以,估算逻辑资源使用情况建议用 LUT和FF来计算。

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
SuperX-man + 2
9
diny| | 2011-2-21 21:47 | 只看该作者
好的贴子一定不能让他沉下去了。顶起来。

使用特权

评论回复
10
arbiter_ic| | 2011-2-22 10:10 | 只看该作者
8楼说的没错。
我曾经有过LUT占60%多
而occupied slicses80%多。
后来发现,根本不用看occupied slicses,看LUT就行了。

使用特权

评论回复
11
Arwei| | 2011-2-23 17:50 | 只看该作者
降低资源占有量还是要从架构上分析冗余并进行优化。之后再结合个别FPGA的实现特征。
如果实在对资源比较在意而对性能要求不高,就可以考虑用时间换空间,用并行替串行。

---------------------------------------------------------------------
48元 超高性价比 月销量超200件 SALEAE 24M 8CH 逻辑分析仪  
http://item.taobao.com/item.htm?id=8430104015

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

53

主题

166

帖子

0

粉丝