reference: https://blog.csdn.net/HOOKNET/article/details/79254351

前言

在FPGA开发过程中几乎都要用到仿真的功能,对于一些简单的外部激励(如时钟、复位、简单数据或者信号等)直接在testbench中编写产生就行了,但对于复杂的外部激励数据,很难在testbench中产生,这时就要通过读取外部文件里的数据来实现。通过和matlab的配合使用,基本上可以模拟各种外部激励。 
举例来说:输入信号是三个不同频率的正弦波的相加,经过FIR低通滤波器滤除高频分量,输出频率最低的那个正弦信号。这种情况下测试用的输入信号不能通过testbench编写产生。 
简单来说有以下两种方法可以模拟输入信号:

  • 在FPGA内部通过DDS产生三个正弦波,然后将三个波形相加作为输入信号。
  • 利用matlab产生输入信号,将数据导出为.txt文件,在仿真时读取文件内的数据作为外部激励。

显然第二种方法更加灵活和便捷。下面,具体介绍一下这种方法的使用。


平台:

  • Vivado 16.4
  • Matlab R2017b

Matlab程序编写:

  • 代码如下:
%=============设置系统参数==============%
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);
for j=1:N
if B_s(j)=='1'
tb=1;
else
tb=0;
end
fprintf(fid,'%d',tb);
end
fprintf(fid,'\r\n');
end fprintf(fid,';');
fclose(fid);

  

此程序中设置了三个频率分别为1M、500k和800k的正弦波,然后将三个波形相加并且量化后作为输出。最后将路径设置为相应文件所在路径即可,需要注意的是如果对应路径下没有相应文件,则会自动新建文件并写入数据。

  • 运行程序: 

  • 打开对应的文件目录 

    可以看到二进制数据文件已经生成。

接下来就可以进行在testbench中读取外部数据的操作了。

Testbench的编写:

  • 代码如下:
`timescale 1ns/1ps

module TB_readfile();
reg SCLK;
reg [:] data_out; //--------------时钟部分----------------//
initial SCLK = ;
always # SCLK = ~SCLK; //-------------------------------------//
parameter data_num = 'd1024;
integer i = ;
reg [:] data_men[:data_num];
reg [:] data_reg = ;
initial begin
$readmemb("E:/Workspace/Vivado_16.4/2017_8_28_TEST/TestBench/sin_data.txt",data_men); //注意斜杠的方向,不能反<<<<<<<
end
always @(posedge SCLK) begin
data_out <= data_men[i];
i <= i + 'd1;
end
//------------------------------------// endmodule

里只需要读取外部数据,所以Vivado工程里只需要添加仿真文件就行了。

  • 运行仿真: 

    可以看到,仿真的波形和matlab中显示的波形一致,说明结果正确。

Matlab产生波形数据文件的更多相关文章

  1. MATLAB中TXT数据文件读取并写入元胞数组的方法与步骤

    一. TXT数据文件读取 Data = load('train.txt');   %简单的文件读取,这时在工作区可以看到导入的大数据变量Data 二.大数据变量Data装入元胞数组中 D = cell ...

  2. 【转】Java读取matlab的.mat数据文件

    参考:Java读取mat文件 下载链接:ujmp  jmatio 下载完两个.jar文件之后,如何引用到java项目当中?项目名称->右键->Property->Java Build ...

  3. matlab批量读取一个文件夹里类似命名的mat文件

    参考网址: Matlab读取同一路径下多个txt或mat文件总结 matlab 批量读取数据文件.mat .dat 整理:matlab批量读入数据文件的方法 首先命名方式体现在只是名字里数字有变化,其 ...

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

    在用vivado仿真的时候,很多情况下需要自己产生波形来代替AD采样波形.以前的做法都是用DDS内部产生所需要的波形来模仿外部输入,后来发现这种做法不仅麻烦,而且不易修改,对仿真很不友好.于是改用ma ...

  5. matlab中读取txt数据文件(txt文本文档)

    matlab中读取txt数据文件(txt文本文档) 根据txt文档不同种类介绍不同的读取数据方法 一.纯数据文件(没有字母和中文,纯数字) 对于这种txt文档,从matalb中读取就简单多了 例如te ...

  6. MATLAB实例:新建文件夹,保存.mat文件并保存数据到.txt文件中

    MATLAB实例:新建文件夹,保存.mat文件并保存数据到.txt文件中 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 用MATLAB实现:指定路径下 ...

  7. 用Matlab的.m脚本文件处理实验室数据

    找到相应的文件 findfile %1 打开文件夹 %2 拷贝第一个文件 %3 关闭当前文件,再次拷贝新的文件,直到文件末尾结束 clc clear DST_PATH_t = 'C:\Users\Ma ...

  8. matlab中读取txt数据文件(转)

    根据txt文档不同种类介绍不同的读取数据方法 一.纯数据文件(没有字母和中文,纯数字) 对于这种txt文档,从matalb中读取就简单多了 例如test.txt文件,内容为“17.901 -1.111 ...

  9. Matlab和simulink数据的保存和读取

    文件的存储 MATLAB支持工作区的保存.用户可以将工作区或工作区中的变量以文件的形式保存,以备在需要时再次导入.保存工作区可以通过菜单进行,也可以通过命令窗口进行. 1. 保存整个工作区 选择Fil ...

随机推荐

  1. linux常用命令及系统常见符号

    常用命令 1.start x 进入界面 2.shutdown -h now 立刻关机 shutdown -r now 立刻重新启动 reboot 立刻重新启动 3.su root 切换成超级管理员 4 ...

  2. Python实现Plugin(插件化开发)

    https://www.cnblogs.com/terencezhou/p/10276167.html

  3. 进程锁,队列,JoinableQueue

    内容梗概: 1.进程同步(锁) 2.队列(重点) 3.生产者消费者模式 4.JoinableQueue([maxsize]) 5.信号量(了解) 6.事件 1.进程同步(锁) 并发编程让我们能更加充分 ...

  4. HDU-2874-森林求LCA/tarjan

    http://acm.hdu.edu.cn/showproblem.php?pid=2874 给出一个森林,询问任意两点最短距离. tarjan跑一遍即可,就是这个题卡内存,vector会MLE,换前 ...

  5. SecureCRT自动记录日志

    From: http://lzj0470.iteye.com/blog/1189368 今天在推特上看到有人谈起SecureCRT日志记录的问题,貌似很多人都有这习惯 我是开始工作后才使用Secure ...

  6. MapReduce- 数据的排序处理

    MapReduce- 数据的排序处理 package com.huhu.day02; import java.io.DataInput; import java.io.DataOutput; impo ...

  7. IntelliJ IDEA下载及安装,破解

    IntelliJ IDEA下载及安装,破解 百度百科:IDEA 全称IntelliJ IDEA,是java语言开发的集成环境,IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助 ...

  8. Vuejs选项卡案例

    css .active { color: red; border-bottom: 1px solid red; } ul li { padding: 0 15px; float: left; list ...

  9. 调整innodb redo log files数目和大小的具体方法和步骤

    相较于Oracle的在线调整redo日志的数目和大小,mysql这点则有所欠缺,即使目前的mysql80版本,也不能对innodb redo日志的数目和大小进行在线调整,下面仅就mysql调整inno ...

  10. SQL Server查询优化中的两个选项

    本文中,我们将介绍两个SQL Server中的可用概念,它们是使用SQL Server时值得注意的技术. 1.        OPTIMIZE FOR Unknown SQL Server 2005版 ...