FPGA和嵌入式软件以及PC联调的时候,对于出现的bug能否判定是FPGA哪个阶段出了问题,最好能定位准确?
FPGA可以反馈输出一些标志信息,比如计数到多少,启动或关闭等信号,但也就仅此而已,可以当作一些信号灯的使用;因为FPGA本质还是电路,只是实现了定制的电路,没有那种可视化的界面和信息提示,无法查看全部的实时变量数据的,ILA也只能抓取部分数据。
1. ram
以当前FPGA这款芯片XC7A75T为例,总的ram大小为892+3780 = 4672 Kb,也就是4.6M bit,意思是说FPGA中缓存数据的空间是就这么多;又因为做资源映射和2048点的IFFT时必须要缓存数据,所以FPGA其他算法过程尽量不去缓存数据。
FPGA的缓存空间与CPU的内存空间不同。FPGA缓存一旦分配,就不能用作其他变量。
2.乘法的使用
FPGA没有函数,全是电路,乘法用一个就少一个,乘法器的总个数也是有限的,该芯片有180个。
3.除法的使用
FPGA本身没有除法器,需要电路临时搭建除法,因此FPGA比较不希望处理除法。一般会以2的整数次幂来做左或右移位。
3.6 浮点运算
在实际开发中,一个主要的困难就在于浮点的运算。为了提高计算的精度,例如10000.51234*2000.69875454这样的操作,需要用非常大的位宽才能保证运算结果的精度,这样造成了芯片资源的极度紧张。而这样的一个浮点运算,在含有FPU的DSPs之中,例如TI的TMS320F28335(指令周期6.67ns)中,仅仅需要十几个周期,即几十纳秒的时间就可以处理完了。希望Xilinx有一天可以推出带有FPU的FPGA,这样再做浮点乘法就很轻松了。
借用问题评论区某位同仁的反诘:
你以为你的a*b是从天上掉下来的?
天上掉下来的?
掉下来的?
下来的?
来的?
的?