Matlab產生波形資料檔案

2021-09-19 15:27:18 字數 2370 閱讀 8569

在fpga開發過程中幾乎都要用到**的功能,對於一些簡單的外部激勵(如時鐘、復位、簡單資料或者訊號等)直接在testbench中編寫產生就行了,但對於複雜的外部激勵資料,很難在testbench中產生,這時就要通過讀取外部檔案裡的資料來實現。通過和matlab的配合使用,基本上可以模擬各種外部激勵。

舉例來說:輸入訊號是三個不同頻率的正弦波的相加,經過fir低通濾波器濾除高頻分量,輸出頻率最低的那個正弦訊號。這種情況下測試用的輸入訊號不能通過testbench編寫產生。

簡單來說有以下兩種方法可以模擬輸入訊號:

顯然第二種方法更加靈活和便捷。下面,具體介紹一下這種方法的使用。

%**********===設定系統引數**********====%

f1=1e6; %設定波形頻率

f2=500e3;

f3=800e3;

fs=20e6; %設定取樣頻率

l=1024; %資料長度

n=14; %資料位寬

%**********===產生輸入訊號**********====%

t=0:1/fs:(1/fs)*(l-1);

y1=sin(2*pi*f1*t);

y2=sin(2*pi*f2*t);

y3=sin(2*pi*f3*t);

y4=y1+y2+y3;

y_n=round(y4*(2^(n-3)-1)); %n位元量化;如果有n個訊號相加,則設定(n-n)

%***************==畫圖***************===%

a=10; %改變係數可以調整顯示週期

stem(t,y_n);

axis([0 l/fs/a -2^n 2^n]); %顯示

%**********===寫入外部檔案**********====%

fid=fopen('e:\workspace\vivado_16.4\test\testbench\sin_data.txt','w'); %把資料寫入sin_data.txt檔案中,如果沒有就建立該檔案

for k=1:length(y_n)

b_s=dec2bin(y_n(k)+((y_n(k))<0)*2^n,n);

forj=1:n

if b_s(j)=='1'

tb=1;

else

tb=0;

endfprintf(fid,'%d',tb);

endfprintf(fid,'\r\n');

endfprintf(fid,';');

fclose(fid);

此程式中設定了三個頻率分別為1m、500k和800k的正弦波,然後將三個波形相加並且量化後作為輸出。最後將路徑設定為相應檔案所在路徑即可,需要注意的是如果對應路徑下沒有相應檔案,則會自動新建檔案並寫入資料。

接下來就可以進行在testbench中讀取外部資料的操作了。

`timescale 1ns/1ps

module tb_readfile();

reg sclk;

reg [13:0] data_out;

//--------------時鐘部分----------------//

initial sclk = 0;

always #10 sclk = ~sclk;

//-------------------------------------//

parameter data_num = 32

'd1024;

integer i = 0;

reg [13:0] data_men[1:data_num];

reg [13:0] data_reg = 0;

initial begin

$readmemb("e:/workspace/vivado_16.4/2017_8_28_test/testbench/sin_data.txt",data_men); //注意斜槓的方向,不能反<<<<<<<

endalways @(posedge sclk) begin

data_out <= data_men[i];

i <= i + 8

'd1;

end//------------------------------------//

endmodule

因為這裡只需要讀取外部資料,所以vivado工程裡只需要新增**檔案就行了。

matlab可以說是個很強大的工具,在設計中合理的使用matlab可以起到事半功倍的效果。當然我也在不斷的學習中,如果有疑問或者更好的想法歡迎交流。。。

MATLAB資料檔案讀取

matlab可以匯入.txt,csv等格式的資料檔案,下面對其進行簡單的說明。1 匯入.txt文字資料 函式格式如下 a importdata filename example a importdata pastespecial example a importdata delimiterin a ...

matlab 批量讀取資料檔案 mat dat

檔名如d00.dat,d01.dat,d21.dat filepath g traindata 資料夾的路徑 for i 1 3 n是要讀入的檔案的個數 load filepath d0 num2str i dat end迴圈讀取和繪製圖形 filepath g traindata 資料夾的路徑 f...

matlab收發資料,並實時顯示波形

port com3 埠號 if exist s var 判斷上一次開啟的埠有沒有關閉 fclose s 關閉s ends serial port,baudrate 115200 設定波特率 fopen s 開啟s fprintf s,autoout 1 給串列埠寫入資料 fprintf s,hex ...