原创 用之有道—如何用尽FPGA芯片的所有资源

2008-12-8 22:09 8029 5 14 分类: FPGA/CPLD

在我的上一份工作中,我进行FPGA设计的目标一直是以尽可能少的资源占用率实现系统能达到的最高性能。因为产品本身对成本十分敏感,对代码中每一个时序进程的使用都要倍加小心,毕竟多使用一个32位的寄存器就会多占用FPGA芯片中近0.5%的逻辑资源;相反,由于FPGA几个外部接口的带宽都不高,性能上的要求(重视延迟、轻视吞吐率)总没能接近所用FPGA芯片的极限,性能上的顾虑少了很多。所以编码上总是以在不违背同步设计的原则下使用最少的LE为目标。


在当前的设计中,FPGA的可用资源大了一个数量级,系统的复杂程度也有了质的提升。与上一份工作不同的是,资源上LE的使用可以不那么吝惜了,但是在性能上一定要达标。编码上放松了对时序进程使用量的约束,取而代之的是大量移位寄存器的例化,目标是以流水线结构尽量保证系统的高性能(轻视延迟、重视吞吐率)。最近的几次编译为了实现既定的时序目标,总要来来回回地费上几番周折。虽然屡屡能够达到时序收敛,但是心中总难免有一种侥幸成功后的不安:下一次的编译会不会失控。


对同一款FPGA芯片来说,其逻辑资源是固定不变的,而其性能是一个相对模糊和易变的指标。不同的设计,甚至是同一款设计基于不同源代码版本或者不同配置选项的两次编译,在时序性能上都会表现出较大的差异。相比之下,上一份工作针对逻辑资源的约束目标比当前工作针对时序性能的约束目标容易实现得多,挑战性也相应地小了很多。


由于上面的原因,最近一段时间以来,我一直在探寻各种实现系统时序收敛的方法,目标是找到一条实现FPGA时序收敛的可控之道。苦思冥想多日,查阅了多方资料,仍然是问题多于答案。自己对FPGA的底层结构了解不够,对EDA工具操作流程的目的意义和每一步流程的输入输出所知甚少,对EDA工具的算法更是一无所知。囫囵吞枣多年,仍然是门外汉一个!(归根结底,还是项目做得少)


 


今天在闲读《编程之美》这本书的过程中突发奇想:软件开发工作者可以通过一段程序实现对CPU占用率的精确控制,那么FPGA硬件工程师能不能通过一段代码实现对FPGA逻辑资源占用率的精确控制呢?


对于这一问题,我还没有答案。需要考虑的因素很多:


1. 时序逻辑资源的控制相对简单。


2. 组合逻辑资源的控制需要考虑逻辑化简的影响。


3. 在一个LE之中除了基本的时序和组合逻辑资源,还有进位链、异步控制信号这样的逻辑资源。如何实现这些资源使用率的精确控制?


4. 同一个LE中的寄存器(时序逻辑资源)和查找表资源(组合逻辑资源)是可以独立使用的。跨LE的组合逻辑化简对组合逻辑资源的占用有何影响?


5. FPGA中占用面积最大也最重要的资源并不是LE,而是布线资源。如何实现对LE簇内部和LE簇之间的两类布线资源占用率的精确控制?


6. 全局布线资源(比如全局时钟和全局复位)的精确控制?


7. 存储器和DSP资源的精确控制?


8. EDA工具的优化配置选项对此有何影响?Area? Speed? 还是Balanced?


9. 布局布线工具的布通率对此有何影响?


10. I/O资源如何用尽,引脚分配约束对此有何影响?


 


随着对这一问题的思考,对于提出和思考这一问题的意义,我却越发地明朗起来:


1. 作为促进自己探索FPGA底层结构和摸索EDA工具脾气的练习项目。由于目标是以尽量简单的代码实现尽可能高的资源利用率,没有了实际项目中复杂功能结构的干扰和限制,思路就会更加清晰,规律就更容易总结。


2. 作为探索芯片性能的一种极限手段。当各种逻辑资源的占用率趋于极限时,由于EDA工具可自由调配的资源极度匮乏,对FPGA芯片极限性能的评估就少了许多变数,评估过程的可控性就得到了提高。


3. 模仿微软的做法,可以把这一理想实验作为面试题。一来考察应试者的思路和对FPGA开发的认识,二来可以从应试者的回答中得到意外的启发。

文章评论9条评论)

登录后参与讨论

用户377235 2016-2-19 15:08

垃圾。。

ash_riple_768180695 2010-2-3 13:06

我忘记当初是在哪本书里面看到FPGA的布线资源占主要部分了,但是这个信息是没错的。Fitter为了实现更好的布通率和更好的时序性能,会复制和等价地改写一部分逻辑单元,造成资源增加。这样做的效果是减少扇出和均衡组合逻辑在各个流水级别的分配。

用户131284 2010-1-17 15:32

ripple好,在你的这篇帖子中提到过: ‘5.FPGA中占用面积最大也最重要的资源并不是LE,而是布线资源’ 我对这个说法很好奇,有什么依据么? 因为最近实验室的同学发现了一个很奇怪的现象,就是明明综合报告中得到的资源利用率为40%左右,而一旦布局布线之后,资源利用率竟达到了80%多!! 起初我还百思不得其解呢,因为我理解的布局布线仅仅是将综合得到的电路合理布置一下而已,不应该消耗太多资源的,还请ripple指点一下!!

ilove314_323192455 2008-12-16 21:30

riple兄的问题提得好,尽管FPGA资源利用率80%是一个比较完美的状态。但是如何完全利用好这80%又是一个值得思考的问题,这个问题的答案似乎应该深入器件的结构本身以及EDA工具的综合布局布线过程等

bitao1983_395643617 2008-12-12 16:46

我想还是为了优化资源,如果把底层搞的非常的透,对设计也是非常有帮助的!

ash_riple_768180695 2008-12-10 22:13

这只不过是个思想试验,没什么实际用途。如果能想通最好,想不通也没啥。我觉得这是个逆向思维问题,通常的设计原则是不能把资源用尽,我还从来没思考过怎样才能把资源用的一干二净。什么样的设计会把资源用尽,什么样的设计最节省资源?如果知道了哪些设计可以把边边角角的资源都用尽,采用这样的设计会不会提高资源利用率;如果某些设计可以很轻易地用尽资源,这样的设计是不是应该避免?

bitao1983_395643617 2008-12-10 16:50

是不是从各个综合软件的VHDL语言描述的基础函数来分析起,可以得到一些收获,感觉如果可以像分析CPU使用量来精确分析LE的使用量还是很困难的,每个软件的综合库都不一样。函数都写的有差异,还有器件的区别,如果要做到资源寸土必争,工作大部分在EDA公司那里,毕竟我们是应用,那选择就比较重要!如果中国有自己的综合软件那就好了,不过相信未来会有的!刚入FPGA不知道想法对不对!

zwj-gg_818035047 2008-12-9 22:34

名人也不好当,O(∩_∩)O哈哈~ 共勉之

ash_riple_768180695 2008-12-9 18:24

“名人”不敢当,“再接再厉”我们共勉吧。

zwj-gg_818035047 2008-12-9 01:07

楼主已经进入《博客名人堂》,http://blog.ednchina.com/celebrity.aspx还望楼主再接再厉。
相关推荐阅读
ash_riple_768180695 2015-12-18 11:06
学习示例程序:FPGA快速系统原型设计--敏捷实践
        学习与开发板配套的示例程序,是敏捷实践的起点。示例程序是厂商针对开发板上提供的硬件资源和接口量身定做的工程,可以展示其FPGA芯片的功能和性能特点。从示例程序入手最大的好处就是:示...
ash_riple_768180695 2015-11-03 16:46
开发板选取:FPGA快速系统原型设计--敏捷实践
    既然是“实践”,就不能只谈编码和仿真,必须要上板运行、调试。这个虚拟项目的目标是实现一块兼容Intel82574L以太网控制器的千兆网卡,需要运行在一块具备PCIe接口和10/100/10...
ash_riple_768180695 2015-10-22 12:41
开篇:FPGA快速系统原型设计--敏捷实践
    虽然借用了 “系统原型开发”的标题,本系列文章将围绕FPGA IP级别的开发这个主题展开,如果可能的话,将扩展至FPGA System级别的开发。     先上一篇PPT:RSPwFP...
ash_riple_768180695 2013-08-26 10:21
学习SystemVerilog(二)——学习它的理由
    学习SystemVerilog的理由也很多,我在阅读SystemVerilog for Design 和 SystemVerilog for Verification两本书前言的过程中,总...
ash_riple_768180695 2013-08-26 10:19
学习SystemVerilog(一)——不学习它的理由
    想要学习SystemVerilog已经很久了。曾经尝试通过Accellera网站上给出的LRM学习,怎奈内容众多,找不出入手点和重点,只能望而却步。虽然手头有三本SystemVerilog...
ash_riple_768180695 2011-06-26 23:20
Hardware-Assisted IEEE1588 Implementation Analysis
06/18/11 11:00:05 PM         最近一段时间在研究IEEE1588-2008精确时间同步协议(PTP)。该协议可以在软件中实现,如果需要提高时间同步...
我要评论
9
5
关闭 站长推荐上一条 /2 下一条