在用vivado仿真的时候,很多情况下需要自己产生波形来代替AD采样波形。以前的做法都是用DDS内部产生所需要的波形来模仿外部输入,后来发现这种做法不仅麻烦,而且不易修改,对仿真很不友好。于是改用matlab产生所需要的波形,将数据以二进制补码形式存在.txt文件中,仿真的时候在testbeach中读取外部数据,十分方便。
Matlab代码如下:
1 %=============设置系统参数==============% 2 f1=50e4; %设置波形频率 3 f2=30e4; 4 f3=10e4; 5 Fs=50e6; %设置采样频率 6 L=1024; %数据长度 7 N=14; %数据位宽 8 %=============产生输入信号==============% 9 t=0:1/Fs:(1/Fs)*(L-1); 10 y1=sin(2*pi*f1*t); 11 y2=sin(2*pi*f2*t); 12 y3=sin(2*pi*f3*t); 13 y4=y1+y2+y3; 14 y_n=round(y4*(2^(N-3)-1)); %N比特量化;如果有n个信号相加,则设置(N-n) 15 %=================画图==================% 16 a=10; %改变系数可以调整显示周期 17 stem(t,y_n); 18 axis([0 L/Fs/a -2^N 2^N]); %显示 19 %=============写入外部文件==============% 20 fid=fopen('E:/Workspace/Vivado_16.4/2017_11_8_TestBeach/TestBeach/sin_data.txt','w'); %把数据写入sin_data.txt文件中,如果没有就创建该文件 21 for k=1:length(y_n) 22 B_s=dec2bin(y_n(k)+((y_n(k))<0)*2^N,N); 23 for j=1:N 24 if B_s(j)=='1' 25 tb=1; 26 else 27 tb=0; 28 end 29 fprintf(fid,'%d',tb); 30 end 31 fprintf(fid,'\r\n'); 32 end 33 34 fprintf(fid,';'); 35 fclose(fid);