vivado----fpga硬體除錯 (七)----資料匯出並用MATLAB讀取
阿新 • • 發佈:2019-01-01
Vivado套件中的Debugger(類似ISE套件中的ChipScope)提供了在本地視窗中檢視硬體實時資料的途徑,但是無法匯出類似ChipScope中的.prn這種文字資料格式,只能通過write_hw_ila_data命令匯出csv或者vcd檔案,vcd檔案為通用波形檔案,只能用來檢視;所以只能通過csv檔案解析資料。
命令:write_hw_ila_data -force -csv_file test.csv
鑑於此,只能先借用MATLAB強大的資料分析能力,先把資料解析出來。以waveform.csv檔案為例進行解析,waveform.csv中的有效資料為第4列到第11列,有效資料是從左到右、從上至下排列的正弦波取樣資料,16位有符號數(補碼),取樣點排列順序為:
E2->F2->G2....L2->E3->F3->G3….
解析原始碼如下:
命令:write_hw_ila_data -force -csv_file test.csv
csv檔案的格式如下圖,第一行為物件描述行,前面幾列(下圖中是3列)為取樣序號以及觸發說明,之後就是取樣的資料,從圖中可以看出所有資料都是以二進位制格式存放的,而且是按10進製表示的(無論怎麼調整波形圖中資料格式出來的都是一樣的)基本無法適用於常規的分析軟體。
鑑於此,只能先借用MATLAB強大的資料分析能力,先把資料解析出來。以waveform.csv檔案為例進行解析,waveform.csv中的有效資料為第4列到第11列,有效資料是從左到右、從上至下排列的正弦波取樣資料,16位有符號數(補碼),取樣點排列順序為:
E2->F2->G2....L2->E3->F3->G3….
解析原始碼如下:
- clc;
- clear;
- close all;
- fclose('all');
- %% 設定CSV檔案讀取範圍
- srow = 1; %起始行(行標從0開始);
- scol = 4; %起始列(列標從0開始);
- erow = 2048; %結束行(一般為取樣深度);
- ecol = 11; %結束列;
- %% 獲取csv檔案
- [filename, pathname] = uigetfile('E:\pl_b3\trunk\tmp\mat\*.csv','讀取資料');
- csv_file = [pathname filename];
- %% 讀取csv檔案
- csv_data = csvread(csv_file,srow,scol,[srow,scol,erow,ecol]);
- %% 矩陣重排為一列
- csv_data_resp = reshape(csv_data',[],1);
- %% 矩陣轉換為二進位制文字
- csv_data_str = num2str(csv_data_resp);
- %% 矩陣轉換為有16位有符號數
- csv_data_sign = typecast(uint16(bin2dec(csv_data_str)), 'int16');
- %% 有符號數寫入文字文件
- fid_w = fopen([pathname 'csv_convt.txt'],'w');
- fprintf(fid_w,'%d\n',csv_data_sign);
- fclose(fid_w);
解析結果如下,順序存放的文字資料: