|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
我们应该怎样评估FPGA的资源(1)
& W) i e' t4 j/ d* i6 i% H
! J9 `& l5 @, D, b8 E在没有任何设计经验的情况下,如何统计设计中消耗的逻辑单元的数目(FF和LUT),RAM块,乘法器,锁相环,时钟分配器,时钟资源,全局资源,IO管脚数目,特殊IO(高速接口,DQS,可用LVDS数,专用时钟输入,输出)。
) a7 A% F" j9 |* M9 v2 N+ Y! `. @' N6 w1 g# _/ Q
& C' r/ @* J0 C2 _0 r. M2 f5 f( I B# r3 Q/ i& X* P
! X! I @+ m- t2 V" q4 F: {2 `& q
( U$ }8 x4 {5 b3 Y, p最稳妥的方式,先把基本设计写出来编一下,根据报告来选。
, G6 V# i. x6 N6 J! T& f, h作者:吴忠祥
1 X" m/ r$ T5 f$ p, d8 b" G1、虽然话不好听,但道理是这么个道理,没有任何经验就想做资源评估,把FPGA想的太简单了。这种情况下即便真的评估出来了,也未必就是FPGA水平强。
" x- G8 X9 W. a1 X# [( A
! Z/ u5 W' p- W9 V2、经验不足的情况下更常用的做法是现在一块比较大的开发板上实现主要功能,然后在quartus或ise上跑一遍,直接看资源。看完了再想想这些资源都用在哪儿了。& f' k3 h8 a- Z' r8 X x
6 Q( [7 ?( c4 F3 G+ E3、最后,还是有些评估的原则的。 E1 T# e5 o6 u6 n- g
# ^ J' {3 i+ F1)、逻辑资源: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。大的移位寄存器也需要统计。除此之外的模块,只做数量级上的统计或者直接忽略。
+ B8 [# h0 }+ T6 {$ @2 L' x9 {+ F% a4 m8 T2 x6 O! D
4 |6 g* g0 r. z) d3 @; f
2)、存储资源:这部分资源往往可以根据实际情况具体算出来,系统架构设计好之后,会在芯片选型之前准确统计。但是提醒一点,要留有相当的余量。FPGA中的RAM分为distributeRAM和blockRAM,distributeRAM会占用LE或Slice,一般存储数据量较小时会用到。blockRAM存储大块数据,而且跟LE或Slice中关于FF的描述一样,blockRAM中的RAM大小也是只能整块整块地使用,比如某款FPGA中的blockRAM分为m个9k和n个12k大小的块(具体数字记不清了),那么就可能你存了9k+100bit的数剧在两块blockRAM中,按两块blockRAM算。
6 b9 D2 m' I- W- S
2 f/ e! M9 R5 K8 D3)、需要精确统计的资源一般有pll和乘法器,原因是这两类资源都比较稀缺,要精打细算。pll:架构设计时想好有哪些时钟域,没见过哪个系统中时钟域多得统计不过来的。另外,一些ipcore中会占用pll,比如ddr3的ipcore中会占用两个pll,这个需要经验了,或者提前找块片子试一下各种用到的ipcore。乘法器:一般项目中也能较准确地统计乘法器个数。乘法器也有个毛病:比如手册上说一个硬件乘法器可以实现最多18*23bit的乘法,那么你一个乘数是32bit,是不是就是两个乘法器级联呢?54bit的乘法器呢?很遗憾,一般不是线性增长的。 P; I) A3 G! ^: `
9 v4 t# ^$ e6 C4)、IO和所谓特殊IO:需要你了解用户IO、外围芯片IO、ipcore相关IO,一般项目中这部分都可以精确统计。比如你肯定要大概知道用到哪些ipcore、哪些外围芯片,他们的接口是如何的。最后,还需要留十几个IO用作debug. A0 ^$ H/ y7 {, P% y
4 r5 q4 I' m8 C% ?: s
5)、再说一点你可以忽略不计的闲话,我最近在看算法导论,其中提到算法复杂度的计算。如果你做的是FPGA中的算法开发,到是可以借鉴一下其中关于算法复杂度的计算方式,我想主要是空间复杂度吧,就是需要多少辅助空间,这一部分对于逻辑+存储资源的总和应该是有点参考的,当然只能是数量级上的近似。5 ^, \8 I' D" h; F
0 u' i+ H% o ^5 n: _5 r; U: b. Z& \8 g% H
0 ?! e0 ]" _% W% ?0 g6 a
) C4 P( P% J! B2 n
& ?& \7 j8 n0 ^! o' N' I# d2 N# q2 P0 W# u& K, ^
& K. B9 _- D* `4 t- G4 A0 t* ?6 v7 J3 A% O; K9 j
|
|