首页 > 其他分享 >《DFZU2EG_4EV MPSoc之FPGA开发指南》第二十五章 双路高速AD实验​

《DFZU2EG_4EV MPSoc之FPGA开发指南》第二十五章 双路高速AD实验​

时间:2022-12-21 10:03:43浏览次数:52  
标签:MPSoc AD ad0 clk 双路 LVCMOS33 ad1 input data

双路高速AD实验​

ADC(Analog to Digital Converter即模数转换器)是大多数系统中必不可少的组成部件,用于将连续的模拟信号转换成离散的数字信号,它们是连接模电电路和数字电路必不可少的桥梁。在很多场合下,ADC的转换速度甚至直接决定了整个系统的运行速度。本章我们将使用双路高速AD模块采集外部模拟信号转换成数字信号,并在ILA中查看信号波形。​

本章包括以下几个部分:​

  1. 简介​
  2. 实验任务​
  3. 硬件设计​
  4. 软件设计​
  5. 下载验证​


简介

本章我们使用的高速双路AD模块是正点原子推出的一款高速双路模数转换模块(ATK_DUAL_HS_AD),高速AD转换芯片由恩瑞浦公司生产的,型号是3PA1030。​

ATK_DUAL_HS_AD模块的硬件结构图如下图所示。​

《DFZU2EG_4EV MPSoc之FPGA开发指南》第二十五章  双路高速AD实验​_正弦波


图25.1.1 ATK_DUAL_HS_AD模块硬件结构图​

3PA1030芯片的输入模拟电压转换范围是0V~2V,所以电压输入端需要先经过电压衰减电路,使输入的-5V~+5V之间的电压衰减到0V~2V之间,然后经过3PA1030芯片将模拟电压信号转换成数字信号。​

下面我们介绍下这个芯片。​

3PA1030芯片

3PA1030是一款恩瑞浦推出的单电压芯片,10位,50 MSPS(Million Samples Per Second,每秒采样百万次)模数转换器,集成片上采样保持放大器和基准电压源。具有高性能低功耗的特点。​

3PA1030的内部功能框图如下图所示:​

《DFZU2EG_4EV MPSoc之FPGA开发指南》第二十五章  双路高速AD实验​_数字信号_02


图25.1.2 3PA1030内部功能框图​

3PA1030在时钟(CLK)的驱动下工作,3PA1030内置片内采样保持放大器(SHA),同时采用多级差分流水线架构,保证了50MSPS的数据转换速率下全温度范围内无失码;3PA1030内部集成了基准源,根据系统需要也可以选择外部高精度基准满足系统的要求。​

3PA1030输出的数据以二进制格式表示,当输入的模拟电压超出量程时,会拉高OVR信号;当输入的模拟电压在量程范围内时,OVR信号为低电平,因此可以通过OVR信号来判断输入的模拟电压是否在测量范围内。另外3PA1030有一个OE信号,当该信号为高电平时3PA1030输出呈高阻态,低电平则可以正常输出。​

3PA1030的时序图如下图所示:​

《DFZU2EG_4EV MPSoc之FPGA开发指南》第二十五章  双路高速AD实验​_正弦波_03


图25.1.3 3PA1030时序图​

上图中,S1,S2,S3分别为三个采样点,可以看到,芯片在时钟的上升沿采样。需要注意的是,3PA1030芯片的最大转换速度是50MSPS,即输入的时钟最大频率为50MHz。​

3PA1030支持输入的模拟电压范围是0V至2V,0V对应输出的数字信号为0,2V对应输出的数字信号为1023。而DA经外部电路后,输出的电压范围是-5V~+5V,因此在3PA1030的模拟输入端增加电压衰减电路,使-5V~+5V之间的电压转换成0V至2V之间。那么实际上对我们用户使用来说,当3PA1030的模拟输入接口连接-5V电压时,AD输出的数据为0;当3PA1030的模拟输入接口连接+5V电压时,AD输出的数据为1023。​

当3PA1030模拟输入端接-5V至+5V之间变化的正弦波电压信号时,其转换后的数据也是成正弦波波形变化,转换波形如下图所示:​

《DFZU2EG_4EV MPSoc之FPGA开发指南》第二十五章  双路高速AD实验​_数据_04


图25.1.4 3PA1030正弦波模拟电压值(左)、数据(右)​

由上图可知,输入的模拟电压范围在-5V至5V之间,按照正弦波波形变化,最终得到的数据也是按照正弦波波形变化。​

实验任务

本节实验任务是使用DFZU2EG/4EV MPSoC开发板及双路AD扩展模块(ATK_DUAL_HS_AD模块)实现双路模数的转换,并在ILA中查看波形。本实验我们模拟输入源来自信号发生器,一个是正弦波,频率1Mhz,幅值9V;另一个是三角波,频率1Mhz,幅值5V。两路模拟信号分别接在双路AD模块的模拟信输入端。​

硬件设计

ATK_DUAL_HS_AD模块电路主要包括扩展口,AD芯片,电源电路模块和低通滤波器,衰减电路。下面是扩展口电源电路部分。​

《DFZU2EG_4EV MPSoc之FPGA开发指南》第二十五章  双路高速AD实验​_数字信号_05


图25.3.1 扩展口及电源电路​

由上图可知,双路AD模块使用到的管脚连接道路P4扩展口上,这些管脚包括十位的数据,时钟以及电源等信号。U2用于将5V电压转成VCC+(2.8V)供U1使用,U1将VCC+转成了VCC-(-2.8V),±2.8V电压供双电源运放TPH2501使用。U3负责将5V电压转成VCC(3.3V)。​

衰减电路原理图如下图所示。​

《DFZU2EG_4EV MPSoc之FPGA开发指南》第二十五章  双路高速AD实验​_数据_06


图25.3.2 3PA1030原理图​

上下两个电路是一样的,我们以上面的电路为例。上图中输入的模拟信号IN1(V1)经过衰减电路后得到AD_IN1(VO)信号,两个模拟电压信号之间的关系是VO=VI/5+1,即当VI=5V时,VO=2V;VI=-5V时,VO=0V。​

ATK_DUAL_HS_AD模块的实物图如下图所示。​

《DFZU2EG_4EV MPSoc之FPGA开发指南》第二十五章  双路高速AD实验​_数据_07


图25.3.3 ATK_DUAL_HS_AD模块实物图​

本实验中,各端口信号的管脚分配如下表所示。 ​

表25.3.1双路高速AD转换实验管脚分配​

信号名​

方向​

管脚​

端口说明​

电平标准​

sys_clk_p​

input​

AE5​

系统差分输入时钟​

DIFF_HSTL_I_12​

sys_clk_n​

input​

AF5​

系统差分输入时钟​

DIFF_HSTL_I_12​

sys_rst_n​

input​

AH11​

系统复位,低有效​

LVCMOS33​

ad0_data[0]​

input​

D10​

AD0输入数据​

LVCMOS33​

ad0_data[1]​

input​

D11​

AD0输入数据​

LVCMOS33​

ad0_data[2]​

input​

E10​

AD0输入数据​

LVCMOS33​

ad0_data[3]​

input​

E12​

AD0输入数据​

LVCMOS33​

ad0_data[4]​

input​

B10​

AD0输入数据​

LVCMOS33​

ad0_data[5]​

input​

A10​

AD0输入数据​

LVCMOS33​

ad0_data[6]​

input​

C11​

AD0输入数据​

LVCMOS33​

ad0_data[7]​

input​

B11​

AD0输入数据​

LVCMOS33​

ad0_data[8]​

input​

A11​

AD0输入数据​

LVCMOS33​

ad0_data[9]​

input​

C12​

AD0输入数据​

LVCMOS33​

ad0_otr​

input​

A12​

模拟电压超出​

量程标志​

LVCMOS33​

ad0_clk​

output​

A15​

AD0驱动时钟​

LVCMOS33​

ad0_oe​

output​

D12​

AD0输出使能​

LVCMOS33​

ad1_data[0]​

input​

B15​

AD1输入数据​

LVCMOS33​

ad1_data[1]​

input​

B14​

AD1输入数据​

LVCMOS33​

ad1_data[2]​

input​

A13​

AD1输入数据​

LVCMOS33​

ad1_data[3]​

input​

C13​

AD1输入数据​

LVCMOS33​

ad1_data[4]​

input​

B13​

AD1输入数据​

LVCMOS33​

ad1_data[5]​

input​

C14​

AD1输入数据​

LVCMOS33​

ad1_data[6]​

input​

D14​

AD1输入数据​

LVCMOS33​

ad1_data[7]​

input​

E13​

AD1输入数据​

LVCMOS33​

ad1_data[8]​

input​

D15​

AD1输入数据​

LVCMOS33​

ad1_data[9]​

input​

E14​

AD1输入数据​

LVCMOS33​

ad1_otr​

input​

F13​

模拟电压超出​

量程标志​

LVCMOS33​

ad1_clk​

output​

G13​

AD1驱动时钟​

LVCMOS33​

ad1_oe​

output​

E15​

AD1输出使能​

LVCMOS33​

对应的XDC约束语句如下所示:​

#IO管脚约束​
#时钟周期约束​
create_clock -name sys_clk_p -period 10.000 [get_ports sys_clk_p]​
#时钟​
set_property IOSTANDARD DIFF_HSTL_I_12 [get_ports sys_clk_p]​
set_property IOSTANDARD DIFF_HSTL_I_12 [get_ports sys_clk_n]​
set_property PACKAGE_PIN AE5 [get_ports sys_clk_p]​
set_property PACKAGE_PIN AF5 [get_ports sys_clk_n]​
#复位​
set_property -dict {PACKAGE_PIN AH11 IOSTANDARD LVCMOS33} [get_ports sys_rst_n]​

#ad_data0​
set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN D10} [get_ports {ad0_data[0]}]​
set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN E10} [get_ports {ad0_data[2]}]​
set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN B10} [get_ports {ad0_data[4]}]​
set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN C11} [get_ports {ad0_data[6]}]​
set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN A11} [get_ports {ad0_data[8]}]​
set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN A12} [get_ports ad0_otr]​
set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN A15} [get_ports ad0_clk]​
set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN D11} [get_ports {ad0_data[1]}]​
set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN E12} [get_ports {ad0_data[3]}]​
set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN A10} [get_ports {ad0_data[5]}]​
set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN B11} [get_ports {ad0_data[7]}]​
set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN C12} [get_ports {ad0_data[9]}]​
set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN D12} [get_ports {ad0_oe}]​
#ad_data1​
set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN B15} [get_ports {ad1_data[0]}]​
set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN A13} [get_ports {ad1_data[2]}]​
set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN B13} [get_ports {ad1_data[4]}]​
set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN D14} [get_ports {ad1_data[6]}]​
set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN D15} [get_ports {ad1_data[8]}]​
set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN F13} [get_ports ad1_otr]​
set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN G13} [get_ports ad1_clk]​
set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN B14} [get_ports {ad1_data[1]}]​
set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN C13} [get_ports {ad1_data[3]}]​
set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN C14} [get_ports {ad1_data[5]}]​
set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN E13} [get_ports {ad1_data[7]}]​
set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN E14} [get_ports {ad1_data[9]}]​
set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN E15} [get_ports {ad1_oe}]

软件设计

根据本章的实验任务,高速双路AD模块同时采集两路外部模拟信号,在模块内部实现模数转换,将转换后的数字信号传给FPGA管脚,FPGA内部逻辑分析仪通过抓取数据将外部的模拟信号呈现出来。​

图是根据本章实验任务画出的系统框图。我们事先准备两路模拟信号源,本实验我们使用信号发生器产生模拟输入源。接到双路AD芯片的信号输入端,在双路AD内部实现AD转换,将转换后的信号送给FPGA,在这里,FPGA只需要给AD芯片输出驱动时钟信号(AD_CLK)和使能信号(AD_OE),AD芯片便可完成模拟采集并转换成数字信号。​

高速双路AD实验的系统框图如图所示:​

《DFZU2EG_4EV MPSoc之FPGA开发指南》第二十五章  双路高速AD实验​_正弦波_08

图25.4.1 双路AD系统框图​

顶层模块的原理图如下图所示:​

《DFZU2EG_4EV MPSoc之FPGA开发指南》第二十五章  双路高速AD实验​_数字信号_09


图25.4.2顶层模块原理图​

通过对原理图的分析,我们可以将代码分成两个模块,一个是clk_wiz_0模块用来生成对应的时钟去驱动AD外设模块,一个用来例化ila核。所以这么一分析我们的代码结构还是非常简单的。我们给出顶层模块代码如下所示:​

1 module hs_dual_ad(​
2 input sys_clk_p , //系统时钟​
3 input sys_clk_n , //系统时钟​
4 //AD0​
5 input [9:0] ad0_data , //AD0数据​
6 input ad0_otr , //输入电压超过量程标志​
7 output ad0_clk , //AD0采样时钟​
8 output ad0_oe , //AD0输出使能​
9 //AD1​
10 input [9:0] ad1_data , //AD1数据​
11 input ad1_otr , //输入电压超过量程标志​
12 output ad1_clk , //AD1采样时钟 ​
13 output ad1_oe //AD1输出使能​
14 );​
15 ​
16 //wire define​
17 wire clk_out1;​
18 ​
19 //*****************************************************​
20 //** main code​
21 //***************************************************** ​
22 ​
23 assign ad0_oe = 1'b0;​
24 assign ad1_oe = 1'b0;​
25 assign ad0_clk = ~clk_out1;​
26 assign ad1_clk = ~clk_out1;​
27 ​
28 clk_wiz_0 u_clk_wiz_0​
29 (​
30 // Clock out ports​
31 .clk_out1 (clk_out1 ), // output clk_out1​
32 // Status and control signals​
33 .reset (1'b0 ), // input reset​
34 .locked (locked ), // output locked​
35 // Clock in ports​
36 .clk_in1_p (sys_clk_p), // input clk_in1_p​
37 .clk_in1_n (sys_clk_n) // input clk_in1_n​
38 ); ​
39 ​
40 ila_0 u_ila_0 (​
41 .clk (clk_out1), // input wire clk​
42 .probe0 (ad1_otr ), // input wire [0:0] probe0 ​
43 .probe1 (ad0_data), // input wire [9:0] probe1​
44 .probe2 (ad0_otr ), // input wire [0:0] probe0 ​
45 .probe3 (ad1_data) // input wire [9:0] probe1​
46 );​
47 ​
48 endmodule

代码第23到24行产生双路AD的两个输出使能信号,ad0_oe和ad1_oe,请注意,它们是低电平有效,所以我们直接赋值0。25行到26行,产生驱动AD芯片的时钟,ad0_clk和ad1_clk,他们都是由clk_out1取反得来,取反其实就是相移180°,这是为了在ila采集数据时采集到数据中间,使采到的数据更正确。其中clk_out1由时钟模块产生,大小是50M。​

下载验证

将高速双路AD模块插入DFZU2EG/4EV MPSoC开发板J19扩展口,连接时注意扩展口电源引脚方向和开发板电源引脚方向一致,然后将下载器一端连接电脑,另一端与开发板上对应端口连接,最后连接电源线后拨动开关按键给开发板上电。​

DFZU2EG/4EV MPSoC开发板硬件连接实物图如下图所示:​

《DFZU2EG_4EV MPSoc之FPGA开发指南》第二十五章  双路高速AD实验​_数字信号_10


图25.5.1 DFZU2EG/4EV MPSoC开发板硬件连接实物图​

使用SMA转BNC线将信号发生器与AD模块如图25.5.1所示进行连接。​

将工程生成的比特流文件下载到FPGA中,运行程序后在ILA中观察ad_data数据的变化,观察到的波形如下图所示。​

《DFZU2EG_4EV MPSoc之FPGA开发指南》第二十五章  双路高速AD实验​_数据_11


图25.5.2数据接收模块采集到的ILA波形图​

由上图可知,输入的ad_data数据分别为三角波和正弦波,频率和幅值与信号发生器发的设定相一致,说明AD-DA实验验证成功。​

另外,在这里介绍一下如何将数据设置成波形图显示。首先选中ILA波形图中的ad_data,右键选择Waveform Style,然后选择Analog即可。如果要切换成数据显示的话,同样选中ad_data,右键选择Waveform Style,然后选择Digital就可以了,如下图所示:​

《DFZU2EG_4EV MPSoc之FPGA开发指南》第二十五章  双路高速AD实验​_数据_12


图25.5.3 ILA波形显示设置界面​


标签:MPSoc,AD,ad0,clk,双路,LVCMOS33,ad1,input,data
From: https://blog.51cto.com/u_15046463/5957258

相关文章

  • .NET Core3.1 调用AD域验证
    一、添加引用右击项目—— 管理NuGet程序包——分别搜索System.DirectoryServices、System.DirectoryServices.AccountManagement,安装二、验证[HttpPost]......
  • wpsjs / wps addin
     npminstall-gwpsjswpsjscreateHelloWpscdHelloWpsnpmupdate--save-devwps-jsapiwpsjsdebugwpsjsbuildwpsjspublish //package.jsonaddtwo......
  • MySQL Threads Running
    1、 广电告警背景如下: 主机:xxxx:3306,MySQL运行的Thread大于30,请关注,2021-07-1515:30:002、猜测是因为业务量造成?3、mysqlthreadrunning的理解  每秒查询次数(Qu......
  • RT-Thread使用qboot升级文件过大导致升级失败
    RT-Thread使用qboot升级文件过大导致升级失败问题:使用编译器编译出大小为397k的bin包后使用qboot的打包工具进行打包成rbl文件。qboot报错此时分区信息为:问题排查及......
  • LoadRunner Tutorial
    LoadRunner TutorialWelcometotheLoadRunnertutorial.Thetutorialisaself-pacedguidethatleadsyouthroughtheprocessofloadtesting,andhelpsfamilia......
  • 【简记】如何在gradle构建脚本中判断一个变量是否存在/分配
    问题说明最近在调整公司项目的公共脚本,需要根据多个变量是否存在来判断是否引入相应的bom,伪代码如下:gradle.properties中xBomVersion=1.0.0构建脚本片段:configure(al......
  • Ai基础(Adobe illustrator)
    创建画板1.快捷键:ctrl+n2.点击更多设置可配置更多属性3.支持创建多个画板,并能设置排列顺序、画板之间的距离、列数等画板工具快捷键:shift+o可以手动调整添加的画板......
  • 远程计算机已加入AAD凭据不工作
    远程计算机已加入AAD凭据不工作解决方法计算机需要加入AAD(AzureActiveDirectory)设置-账户-其他用户-连接工作或学校用户-连接在下方的【替代操作】中选......
  • jenkins add node
    newnode......
  • 编译hadoop
     sudovi/etc/profileexportJAVA_HOME=/usr/lib/jvm/java-8-openjdk-mips64elexportCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarexportPATH=$J......