之前博文是对基本设计技巧的总结和一些小设计随笔,内容有点杂,缺乏目的性。本来后续计划设计几个小项目,但导师的任务比较紧,所以为了提高效率,后续博客会涉及到很多算法方面的设计与验证的内容,主要关于OFDM通信系统及聚类算法方面的研究,感兴趣的朋友可以一起交流。
很多想利用FPGA验证算法的朋友一定会用到MATLAB这个强大的工具,可苦于不知道如何完成两者数据的交互功能。从仿真层面来说,基本流程是:
MATLAB产生待测试数据 -> N bit量化 -> 数据写入txt文件 -> testbench读取txt文件到RAM并送入到UUT中完成运算处理 ->
testbench在将处理后结果保存到另一txt文件内 -> MATLAB读取数据 -> 数据转回双精度浮点型 -> 算法验证分析。
下面是FPGA设计OFDM中过程中MATLAB与FPGA数据交互部分的代码,供大家参考:
1.MATLAB将数据(支持小数 负数)以二进制补码ASICII字符串形式写入txt文件
MATLAB将其内部双精度浮点型数据经过归一化和12bit量化后,转为二进制字符串写入文件。此处应该可以写成16进制形式,让代码更简洁些。
2 test bench读取文件数据到memory中
$readmemb/$readmemh系统函数读取文件数据到memory中,以特定的时序送入uut处理。此处封装成task便于调用和提高代码可读性。
3 test bench将FPGA处理后数据写入另一文件
$fopen找到并打开文件,通过$fdisplay函数经处理后数据以十进制形式写入文件。
4 MATLAB读取FPGA处理后数据文件,格式转换进一步分析
MATLAB以类似的方式打开文件,读取数据到FPGA_Data矩阵中。数据的实部和虚部分别逆运算得到正确的浮点型数据(代码中N为量化位数,取12),最后拼接回复数,待MATLAB后续处理分析。
四个步骤即可通过FPGA进行算法的定点仿真,利用MATLAB强大的数据分析和可视化功能,极大提高算法开发效率。后篇算法验证的内容为算法板级验证,MATLAB提高了以太网通信函数,可以很方便地与FPGA等硬件设备实现真正的数据交互,欢迎各位关注。