matlab浮点转2进制补码,利用ZYNQ SOC快速打开算法验证通路(1)——MATLAB浮点数与定点二进制补码互转...

最近本人一直在学习ZYNQ SOC的使用,目的是应对科研需要,做出通用的算法验证平台。大概思想是:ZYNQ PS端负责与MATLAB等上位机数据分析与可视化软件交互:既可传输数据,也能通过上位机配置更新硬件算法模块配置寄存器内容,同时可计算分析PL端算法实现性能指标。PL端的FPGA逻辑则负责算法的硬件实现,以探索高效并行硬件架构。为此本人后续会持续编写《利用ZYNQ SOC快速打开算法验证通路》系列专题博文,在各个阶段进行些基础性总结。

MATLAB中数据为双精度浮点型,因此打开算法验证通路的第一步即为MATLAB中浮点数与定点二进制补码之间的相互转换。在之前的博文:《FPGA与MATLAB数据交互高效率验证算法——仿真阶段》中提到过两种数值表示方式之间的转换,但为了便于testbench仿真,MATLAB写和读的文件均为txt文本文件。在算法板级验证中,数据应以未经过ASCII码编码的二进制数据方式被处理。这里涉及到MATLAB函数fscanf和fprintf以及函数fread和fwrite的区别,前两个分别为读和写文本文件,后两个则是读写二进制文件。

以下给出浮点定点转换以及读写二进制文件代码:

6687bf77215e51e909184c135fe9ff2d.png

e275fde4b5341f905df0fbd617e37991.png

4b3952d39d767735859754d48c53f58f.png

先看下写出到文件的数据和从该该文件读回的数据是否一致。

70280efc4f04c75dbf62a2efa7afbde5.png 

f6c5e7dbc50090bf8753e37e1c3adcf3.png

直接对比数据和命令检测结果显示两者完全一致。再来对比下量化之前与读回定点数经过类型转换后的浮点数。

a95720cfc74f39bde7b4b9b394372cf0.png

MATLAB显示两者的差值。可见在浮点转定点数时,会有一定的精度损失,但仅在10的负四次方数量级,在很多精度要求不高的场合下可以忽略。

a146ba6bb5908c03f34f83fa5d9615d1.png

现在利用Uedit软件打开该文件,并以16进制方式显示:

f5a23dbc0de375b7f3e2234a0708ec1f.png

我们用前两个数据做验证,依次是00_38和FF_2A。由于是补码形式,故先写成二进制形式:0000_0000_0011_1000和1111_1111_0010_1010,再转换为原码:0000_0000_0011_1000和1000_0000_1101_0110,十进制结果就是56和-240,与MATLAB中数据吻合。

非常简单的东西困扰了我有一阵,希望对大家有帮助吧。因为算法验证平台仅是载体,最重要的是PL端的算法硬件实现部分。为了简单快速形成算法验证通路,采用网络调试助手和W5500协议栈芯片实现MATLAB与ZYNQ之间的数据传输,从而避免写上位机软件和网络协议先关设计配置带来的工作量。这部分内容在下篇博文中叙述。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值