DSP

FPGA资源评估

2019-07-13 12:24发布

如何评估设计中消耗的逻辑单元的数目(FF和LUT),RAM块,乘法器,锁相环,时钟分配器,时钟资源,全局资源,IO管脚数目,特殊IO(高速serdes接口,可用LVDS数,专用时钟输入,输出) 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中的算法开发,到是可以借鉴一下其中关于算法复杂度的计算方式,我想主要是空间复杂度吧,就是需要多少辅助空间,这一部分对于逻辑+存储资源的总和应该是有点参考的,当然只能是数量级上的近似。 加法器占用逻辑资源 乘法器占用DSP资源   1.逻辑单元与逻辑阵列 
    逻辑单元(Logic Element,LE)在FPGA器件内部,用于完成用户逻辑的最小单元。一个逻辑阵列包含16个逻辑单元以及一些其他资源, 在一个逻辑阵列内部的16个逻辑单元有更为紧密的联系,可以实现特有的功能。 
一个逻辑单元主要由以下部件组成:一个四输入的查询表(LookUp Table,LUT),一个可编程的寄存器,一条进位链,一条寄存器级连链。 
1、查询表: 用于完成用户需要的逻辑功能,CYCLONEⅡ系列的查询表是4输入1输出的,可以完成任意4输入1输出的组合逻辑。 
2、可编程寄存器:可以配置成D触发器,T触发器,JK触发器,SR触发器。每个寄存器包含4个输入信号,数据输入、时钟输入、时钟使能、复位输入。 
一个逻辑单元包含3个输出,两个用于驱动行连接、列连接、直接连接,另外一个用于驱动本地互联。 这三个输出是相互独立的。输出信号可以来自于查询表也可以来自于寄存器。  一个LE主要由两部分组成:查找表LUT+可编程寄存器   参考:https://www.zhihu.com/question/28949776 http://www.elecfans.com/emb/fpga/20180418663707.html https://blog.csdn.net/a8039974/article/details/51706906

热门文章