这次有幸申请到盘古50K开发板的试用,收到板子后这一段时间,一直在学习紫光FPGA相关知识。
从这款开发板的配置来看,主要适合做一些数据流的处理,首推的便是视频应用,可以通过网口,光纤,HDMI和采集摄像头多种方式获得数据流输入,通过FPGA的加速处理后,再通过多种方式传输出去。
在高速ADC采集中,也有类似的结构。数据流输入是通过驱动ADC模块获得,在FPGA内部做数据的分析处理,如采集触发,频率和幅值等参数的计算,数据的缓存等,再根据不同系统功能把整理后的数据输出。
盘古50K使用的PGL50H具有PCIe的接口,这样就有可以实现高速数据输出,真正适合高速ADC数据采集的应用,很适合带PCIe接口的工业级树莓派CM4,实现一种低成本高性能开发平台,可见前景一片光明。
万丈高楼平地起,作为入门阶段,开发软件的使用效率是很重要的,在这段时间使用中,有一些小的经验总结一下。
1,硬件调试工具的使用
在高速ADC的设计中,硬件调试是非常重要的,虽然PDS软件和Modelsim软件的联合仿真非常方便,但是连接ADC硬件模块,调通数据输入,这是必须完成的。
点击软件Tools菜单下Inserter,可以设置需要硬件观察调试的变量
配置完成后需要重新编译生成.sbit文件
点击软件Tools菜单下Debugger,先扫描硬件,下载.sbit到开发板
设置好用于触发的变量,便可以运行
在调试界面的下方有几个按钮,可以查看不同的数据表现形式
点击Bus Plot可以看到模拟波形的显示方式,紫光PDS软件使用一个专门的界面显示模拟波形,相对于VIVADO来说,确实是一个进步。
在查看数据方面,一般通过点右键设置。紫光PDS软件支持框选,也是紫光给我的一点惊喜,放大和缩小数据就非常方便了。
在产品开发的过程中,功能往往是一点一点的加,调试是一步一步的走。很多重要的数据由于没有使用,被软件优化掉了,这就给硬件调试带来一些麻烦,在选取调试变量时,发现找不到需要的变量名。
为避免优化,软件提供了一些办法,添加入如下语句,避免优化
在实际的应用中,上面的语句不都有效,需要其他的办法。
盘古50K开发板上提供的8个LED输出灯能帮助调试,把被优化的变量在代码中使用一下,做一些简单的判断输出到LED,这样就不会被软件优化了。
硬件调试工具基本每天都在使用,熟练的使用能极大的提升开发的效率,发现很多的问题,也需要不断总结积累。
2,时序问题
高速ADC模块使用200M的频率,这样在系统内部运行的主频率就不能低于200M,根据功能不同还要到250M,甚至更高。系统运行这么高的频率,以前编的很多的代码,发现会出现时序的问题,给开发工作提出了很多的挑战。
紫光的PDS软件提供了很好的时序分析的工具,帮助我们应对挑战。
首先需要创建时序约束
需要设置输入时钟的约束,告诉FPGA输入的晶振频率是50M,软件就会根据这个频率展开优化。
其他还有很多的约束可以设置,这都需要在后续使用中逐步的学习使用。
紫光PDS软件中查看时序报告也是非常方便,一目了然。
在使用中观察最多的是Worst Case Timing Path的内容,包含建立时间和保持时间相关的路径,按顺序排列,最上的是时序余量最少的,是需要优化的重点路径
下面举一个频率测量中的例子说明一下
在频率测量中,很多代码最后都需要做一个乘法和除法运算,得到最终的结果。上面的就是一个版本的摘录。
在移植这个代码时,发现在200M的频率下是通不过的,时序出问题,而且问题很严重。
解决的办法需要使用乘法器和除法模块,创建一个简易状态机,控制运算的过程。
在FPGA中,如这里提到的32位宽乘法或除法,很难在一个时钟周期中实现,需要很多时钟周期才能完成。
所以网上很多代码,在不同的使用环境下是不能简单移植的,特别是做数学运算相关的,需要自己做很多的努力。
更多回帖