如何评估FPGA所需资源?

如何评估FPGA所需资源?

在没有任何设计经验的情况下,如何统计设计中消耗的逻辑单元的数目(FF和LUT),RAM块,乘法器,锁相环,时钟分配器,时钟资源,全局资源,IO管脚数目,特殊IO(高速接口,DQS,可用LVDS数,专用时钟输入,输出)。

最稳妥的方式,先把基本设计写出来编一下,根据报告来选。


作者:吴忠祥
链接:https://www.zhihu.com/question/28949776/answer/42880106
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

1、虽然话不好听,但道理是这么个道理,没有任何经验就想做资源评估,把FPGA想的太简单了。这种情况下即便真的评估出来了,也未必就是FPGA水平强。
2、经验不足的情况下更常用的做法是现在一块比较大的开发板上实现主要功能,然后在quartus或ise上跑一遍,直接看资源。看完了再想想这些资源都用在哪儿了。
3、最后,还是有些评估的原则的。
1)、逻辑资源:Altera芯片中的基本逻辑单元是LE,Xilinx芯片中的基本逻辑单元是Slice。一般需要统计LE或Slice,而不直接统计FF和LUT,这就需要你了解LE和Slice的结构,查手册即可。因为逻辑资源很丰富,这一部分资源只做数量级上的统计,又由于FF和LUT的使用都是基于LE和Slice结构的,这与HDL代码的写法相关,所以也不可能精确预计。举个例子,比如reg[1:0] a;这样的寄存器a占用两个DFF,也即一个LE;但如果写成reg b; reg c;看起来也是使用了两个FF,但实际上占用了两个LE,即使手册上说一个LE里面有n个FF,但是由于写法的原因导致这两个LE中的FF各被用了1个,剩下的2*(n-1)个FF没法用了,这也说明了养成良好的代码风格和电路设计的重要性。那么究竟怎么统计逻辑资源呢:一般某个信号的延时较少,位宽较小,就忽略不计。一个模块中的信号不多,忽略整个模块逻辑资源。多少算少?多小算小?不好说,我的经验是如果你遇到一个逻辑资源需要你考虑位宽够不够小延时够不够少才能决定是否忽略其占用资源,那就直接忽略吧。那什么资源需要统计,大寄存器阵列(就是大数组),比如你在写一个匹配滤波器,那就需要统计资源了;一般信号位宽是4或8的整数倍,这是因为LE或Slice中FF的个数也是4或8的整数倍,这样就只用一个LE或Slice而不是一个LE+另一个LE中的1个FF,因为后者在算资源时算作两个LE。大的移位寄存器也需要统计。除此之外的模块,只做数量级上的统计或者直接忽略。
2)、存储资源:这部分资源往往可以根据实际情况具体算出来,系统架构设计好之后,会在芯片选型之前准确统计。但是提醒一点,要留有相当的余量。FPGA中的RAM分为distributeRAM和blockRAM,distributeRAM会占用LE或Slice,一般存储数据量较小时会用到。blockRAM存储大块数据,而且跟LE或Slice中关于FF的描述一样,blockRAM中的RAM大小也是只能整块整块地使用,比如某款FPGA中的blockRAM分为m个9k和n个12k大小的块(具体数字记不清了),那么就可能你存了9k+100bit的数剧在两块blockRAM中按两块blockRAM算。
3)、需要精确统计的资源一般有pll和乘法器,原因是这两类资源都比较稀缺,要精打细算。pll:架构设计时想好有哪些时钟域,没见过哪个系统中时钟域多得统计不过来的。另外,一些ipcore中会占用pll,比如ddr3的ipcore中会占用两个pll,这个需要经验了,或者提前找块片子试一下各种用到的ipcore。乘法器:一般项目中也能较准确地统计乘法器个数。乘法器也有个毛病:比如手册上说一个硬件乘法器可以实现最多18*23bit的乘法,那么你一个乘数是32bit,是不是就是两个乘法器级联呢?54bit的乘法器呢?很遗憾,一般不是线性增长的。
4)、IO和所谓特殊IO:需要你了解用户IO、外围芯片IO、ipcore相关IO,一般项目中这部分都可以精确统计。比如你肯定要大概知道用到哪些ipcore、哪些外围芯片,他们的接口是如何的。最后,还需要留十几个IO用作debug
5)、再说一点你可以忽略不计的闲话,我最近在看算法导论,其中提到算法复杂度的计算。如果你做的是FPGA中的算法开发,到是可以借鉴一下其中关于算法复杂度的计算方式,我想主要是空间复杂度吧,就是需要多少辅助空间,这一部分对于逻辑+存储资源的总和应该是有点参考的,当然只能是数量级上的近似。


作者:ohyes
链接:https://www.zhihu.com/question/28949776/answer/42715825
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

FPGA开发两年,就自己的经验答下:
1.FF和LUT的数目:
这个在写出具体代码之前基本没法估算,可能大牛能估出一个数量级来。我们目前的做法是系统 架构划分好后可以复用的模块根据以前设计中的资源消耗数来估,新的模块写完代码后估。
2.RAM:
这块在实现架构定好后,基本能准确地估出来,各个模块需要用到几个FIFO,几个RAM,最终整个系统的RAM数量可以确定。前提是所有功能的实现方式设计好。
3.乘法器:
这个与上面RAM的估法一致。
4.锁相环,时钟分配器,时钟资源:
这部分我认为都和时钟相关,这部分在系统设计架构完成后,根据各个模块的时钟频率来确定。
5.全局资源
这部分不是很明白什么意思,是说可以上全局网络的个数?
6.IO管脚数目
这部分其实是和需求强相关的,基本上需求确定好,实现方式确定好,这部分也不是问题。
7.特殊IO
这部分的估算有时候和硬件接口相关,有时候和实现方式相关。举例来说,LVDS的数目通常由对接的硬件器件确定,而DDR部分需要根据系统实现方式来确定,确定DDR的带宽,频率,接口的位宽等,这样对DDR IP CORE的需求也就出来了。

没有任何经验就做资源评估?楼主想多了吧?

quartus或者ise有自带的工具啊

  • 7
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值