之前博文是對基本設計技巧的總結和一些小設計隨筆,內容有點雜,缺乏目的性。本來后續計划設計幾個小項目,但導師的任務比較緊,所以為了提高效率,后續博客會涉及到很多算法方面的設計與驗證的內容,主要關於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等硬件設備實現真正的數據交互,歡迎各位關注。