主要内容

使用FPGA数据捕获从英特尔FPGA板读取音频信号

这个例子向您展示了如何使用FPGA数据捕获与现有的HDL代码来读取FPGA内部信号。我们从一个现有的FPGA设计开始,实现芯片上的模拟数字转换器(ADC)来采样音频信号。ADC IP公开了用于控制的Avalon内存映射(MM)从接口和用于数据输出的Avalon流接口。这个FPGA设计已经包含了一个简单的Avalon MM master来启动ADC。我们将使用FPGA数据捕获功能从Avalon流接口收集ADC输出数据到MATLAB工作空间。

需求和先决条件

  • MATLAB

  • 高密度脂蛋白验证器

  • 英特尔FPGA板的HDL验金宝app证机支持包

  • 定点设计师

  • 英特尔®Quartus Prime软件

  • Arrow®DECA MAX 10 FPGA开发板

搭建FPGA开发板

1.确保电源开关保持关闭状态。

2.连接FPGA开发板与上位机之间的JTAG下载线。

3.(可选)通过3.5 mm音频线将FPGA板的入线端口与音频源(如您的手机)连接。如果跳过这一步,捕获的数据将是随机噪声。

准备资源的例子

建立一个工作文件夹,并提供MATLAB访问您的FPGA设计软件。

1.创建一个超出MATLAB安装文件夹范围的文件夹,你可以将示例文件复制到其中。文件夹必须是可写的。这个例子假设文件夹位于C:\MyTests。

2.启动MATLAB,并将MATLAB中的当前目录设置为刚才创建的文件夹。例如:

cd C: \ mytest

3.要将FPGA设计文件复制到你的工作目录中,输入以下MATLAB命令:

copyAlteraFPGAExampleFiles (adc)

4.设置Intel Quartus。这里,我们假设Intel Quartus可执行文件位于C:\altera\18.0\ Quartus \bin\ Quartus .exe。如果可执行文件的位置不同,请使用您的路径。

hdlsetuptoolpath(“ToolName”、“阿尔特拉第四的二世”、“路径”,“C: \ \ 18.0 \负责第四的\ bin \ quartus.exe ');

生成FPGA数据捕获组件

在MATLAB命令提示符下,输入:

generateFPGADataCaptureIP

该命令启动FPGA数据捕获组件生成应用程序。这个例子监视来自音频系统的现有HDL设计的两个信号。信号是12位的“adc_out”和8位的“计数器”。“adc_out”是音频入线信号的数字样本。下一个信号“计数器”是一个8位自由运行计数器。要配置数据捕获组件对这两个信号进行操作,请进行以下更改:

1.通过单击“Add”按钮向Ports表添加一行。

2.将第一个信号命名为“adc_out”,将第二个信号命名为“counter”。

3.将两个信号的位宽分别更改为12和8。

4.确保FPGA厂商设置为Altera。

5.确保选择的语言是Verilog。

6.设置采样深度为1024。这是每次检测到触发器时,数据捕获工具返回给MATLAB的每个信号的样本数。

7.设置最大触发阶段为2。这是在数据捕获期间可以添加的用于提供多个触发条件的触发阶段的最大数量。

应用程序设置如下图所示:

最后,点击“Generate”按钮生成FPGA Data Capture组件。一个报告显示生成的结果。

集成FPGA数据捕获HDL IP

您必须将生成的HDL IP核包含到示例FPGA设计中。您可以从生成的报告中复制模块实例代码。在这个例子中,我们将把生成的HDL IP与ADC输出和8位自由运行计数器连接起来。

打开此示例提供的Top.v文件。取消注释以下代码行。

数据捕获u0 (.clk(adc_clk), .clk_enable(adc_valid), .ready_to_capture(), .adc_out(adc_out), .counter(counter[7:0]));

保存。v,编译修改后的FPGA设计,并使用以下tcl脚本创建FPGA编程文件。

系统(“quartus_sh - t adc_deca_max10。tcl &”)

本例中包含的tcl脚本执行以下步骤:

1.创建一个新的Quartus项目。

2.将示例HDL文件和生成的FPGA数据捕获HDL文件添加到项目中。

3.编制设计。

4.FPGA程序。

等待Quartus进程成功完成后,再进行下一步。这个过程大约需要5到10分钟。

捕获数据

首先,进入FPGA Data Capture组件生成的目录。

CD HDLSRC.

启动FPGA数据捕获应用程序。这个应用程序是为您的数据捕获信号定制的。

launchDataCaptureApp

点击“捕获数据”按钮,开始数据捕获。这从FPGA请求一个捕获数据的缓冲区。默认情况下是立即捕获,而不等待触发条件。

捕获的数据被保存到MATLAB工作空间中的一个结构体dataCaptureOut中。如果您有DSP系统工具箱,捕获的数据也显示为信号波形在逻辑分析仪。

使用触发器缩小数据捕获的范围

在FPGA数据采集App中可以配置触发条件,从FPGA中抓取特定事件的相关数据。例如,在计数器达到一定值后才抓取音频数据。

设置触发阶段数为1。在触发阶段1中,从触发信号的下拉列表中选择“计数器”,点击“+”按钮启用该触发信号。然后设置相应的触发条件值为10。触发模式将自动切换为“On trigger”。这告诉FPGA在捕获和返回数据之前等待触发条件。应用程序设置如下所示:

再次单击Capture Data。这一次,数据捕获IP返回1024个样本,当它检测到计数器等于10时捕获。

为了从FPGA中捕获触发值中特定位的数据,而不考虑其他位,可以使用位屏蔽值配置触发条件。

例如,若要仅在计数器第7位为1时捕获音频数据,则将触发条件设置为0bX1XXXXXX,如下图所示:

单击捕获数据。

数据捕获IP触发器用于捕获[64,127]和[192,255]中的计数器值的音频数据。

捕获一个事件的多次发生

若要从FPGA捕获重复事件,请在FPGA数据捕获App中配置“捕获窗口数”。

例如,要在8个不同的时隙捕获音频数据,选择“捕获窗口数”为“8”。现在配置将如下图所示:

单击捕获数据。数据捕获IP返回8个窗口,每个窗口有128个样本,总共等于1024个样本深度。

窗口深度=采样深度/捕获窗口的数量;

结果在逻辑分析仪中看到为触发器的八个出现,音频数据记录为128个样本:

信号“捕获窗口”和“触发位置”表示相应的窗口数和触发位置。

在多个触发阶段捕获数据

此场景说明如何通过在多个触发阶段中提供触发条件序列来捕获数据。因此,必须在FPGA数据采集App中将触发阶段数设置为大于1的值。

例如,当计数器的值在5个时钟周期内从0到5时捕获音频数据:

1.设置触发阶段的数量为2。

2.在触发阶段1中,从触发信号中选择“计数器”,点击“+”按钮使触发信号生效。将相应的触发条件值设置为0。

3.在触发阶段2中,从触发信号中选择“计数器”,点击“+”按钮使触发信号生效。设置相应的触发条件值为5。启用“触发超时时间”,设置为“5”。

应用程序设置如下所示:

%单击Capture Data。数据捕获IP在触发阶段1检测到触发条件之前的5个时钟周期内,当检测到触发阶段2的触发条件时,捕获1024个样本。