• 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,'
    ');
    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的波形缩小后看,是和仿真波形一样的。

  • 相关阅读:
    字典常用操作复习
    列表常用方法复习
    爬虫流程复习
    协程解决素数
    yield 复习
    多线程复习2
    多线程复习1
    异常 巩固3
    logging日志基础示例
    2019最新百度网盘不限速下载教程
  • 原文地址:https://www.cnblogs.com/HOOKNET/p/7824420.html
Copyright © 2020-2023  润新知