最近本人一直在學習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之間的數據傳輸,從而避免寫上位機軟件和網絡協議先關設計配置帶來的工作量。這部分內容在下篇博文中敘述。
編輯:hfy
-
matlab
+關注
關注
182文章
2963瀏覽量
230171 -
二進制
+關注
關注
2文章
794瀏覽量
41600 -
浮點數
+關注
關注
0文章
60瀏覽量
15864
發布評論請先 登錄
相關推薦
評論