MATLAB浮点数与定点二进制补码互转算法验证方案

最近本人一直在学习zynq soc的使用,目的是应对科研需要,做出通用的算法验证平台。大概思想是:zynq ps端负责与matlab等上位机数据分析与可视化软件交互:既可传输数据,也能通过上位机配置更新硬件算法模块配置寄存器内容,同时可计算分析pl端算法实现性能指标。pl端的fpga逻辑则负责算法的硬件实现,以探索高效并行硬件架构。为此本人后续会持续编写《利用zynq soc快速打开算法验证通路》系列专题博文,在各个阶段进行些基础性总结。
matlab中数据为双精度浮点型,因此打开算法验证通路的第一步即为matlab中浮点数与定点二进制补码之间的相互转换。在之前的博文:《fpga与matlab数据交互高效率验证算法——仿真阶段》中提到过两种数值表示方式之间的转换,但为了便于testbench仿真,matlab写和读的文件均为txt文本文件。在算法板级验证中,数据应以未经过ascii码编码的二进制数据方式被处理。这里涉及到matlab函数fscanf和fprintf以及函数fread和fwrite的区别,前两个分别为读和写文本文件,后两个则是读写二进制文件。
以下给出浮点定点转换以及读写二进制文件代码:
先看下写出到文件的数据和从该该文件读回的数据是否一致。
直接对比数据和命令检测结果显示两者完全一致。再来对比下量化之前与读回定点数经过类型转换后的浮点数。
matlab显示两者的差值。可见在浮点转定点数时,会有一定的精度损失,但仅在10的负四次方数量级,在很多精度要求不高的场合下可以忽略。
现在利用uedit软件打开该文件,并以16进制方式显示:
我们用前两个数据做验证,依次是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之间的数据传输,从而避免写上位机软件和网络协议先关设计配置带来的工作量。这部分内容在下篇博文中叙述。


电解液头部企业展开的市场攻伐仍在推进
苹果新iPad Pro深陷弯曲门,官方认为不算缺陷
郭明池又扯淡了:三星S8需求疲软 iphone8引关注
电脑硬件故障的检修方法及排除步骤
苹果回应iPhone 12被控辐射超标 法国禁售iPhone12持续发酵
MATLAB浮点数与定点二进制补码互转算法验证方案
华为断臂自救,荣耀艰难求生
自己组装全集成高保真恒流源功率放大器
领跑医疗,生物制药融资活跃度居所有融资案例首位
小米正式上架小米平板3:配6600毫安时电池,待机长达867小时
开关柜的基本知识
诺基亚回归,已在120个国家上市,覆盖半个地球
智能化改造:使用ESP8266和机智云,实现远程控制电动卷帘门
微软全球伙伴学习项目将与各国政府合作完成大型跨国研究课题
你有没有想过外太空有什么味道?
华为智慧风电解决方案,推动新能源发电智慧化升级
一款编号“M923Q”的魅族新机通过了工信部认证
Veeco宣布公司新任CFO晋升 将负责公司所有财务工作
Lumen Freedom公司消除电动汽车的续航里程焦虑
中国AI发展势不可挡 本土创新甚至走向了世界