Matlab产生TestBeach所需要的波形数据

  在用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);
View Code

  运行后,波形如下:

  

  保存在.txt文件中的数据都是以二进制补码形式保存,也就相当于输入的外部激励是有符号数。

 

  TestBeach代码如下:

 1 `timescale 1ns/1ps
 2 
 3 module TB_readfile();
 4 reg     SCLK;
 5 reg    [13:0]  data_out;
 6 
 7 
 8 //-------------------------------------//
 9 parameter data_num = 32'd1024;
10 integer   i = 0;
11 reg [13:0]  data_men[1:data_num];
12 reg [13:0]  data_reg = 0;
13 initial begin
14     $readmemb("E:/Workspace/Vivado_16.4/2017_11_8_TestBeach/TestBeach/sin_data.txt",data_men);
15 end
16 always @(posedge SCLK) begin
17     data_out <= data_men[i];
18     i <= i + 8'd1;
19 end
20 //------------------------------------//
21 
22 //--------------时钟部分----------------//
23 initial     SCLK = 0;
24 always      #10     SCLK = ~SCLK;
25 
26 
27 
28 
29 endmodule // 
View Code

  运行vivado仿真,如下图:

  

  将matlab的波形缩小后看,是和仿真波形一样的。

 

posted @ 2017-11-13 01:58  HOOKNET  阅读(883)  评论(0编辑  收藏  举报