DMA使用之ADC示波器(AN9238)#

实验Vivado工程为“ad9238_dma_hdmi”。

硬件介绍#

模块功能说明#

AN9238模块的原理设计框图如下:

../_images/image2108.png

关于AD9238的电路具体参考设计请参考AD9238的芯片手册。

  1. 单端输入及运放电路

单端输入AD1和AD2通过J5或者J6两个SMA头输入,单端输入的电压为-5V~+5V。

板上通过运放AD8065芯片和分压电阻把-5V~+5V输入的电压缩小成-1V~+1V。如果用户想输入更宽范围的电压输入只要修改前端的分压电阻的阻值。

../_images/image3102.png

下表为模拟输入信号和AD8065运放输出后的电压对照表:

AD模拟输入值

AD8065运放输出

-5V

-1V

0V

0V

+5V

+1V

  1. 单端转差分及AD转换

-1V~+1V的输入电压通过AD8138芯片转换成差分信号(VIN+ − VIN−),差分信号的共模电平由AD的CML管脚决定。

../_images/image467.png

下表为模拟输入信号到AD8138差分输出后的电压对照表:

AD 模拟输入值

AD8065运放输出

AD813 8差分输出(VIN+−VIN−)

-5V

-1V

-1V

0V

0V

0V

+5V

+1V

+1V

  1. AD9238转换

默认AD是配置成offset binary的,AD转换的值如下图所示:

../_images/image560.png

在模块电路设计中,AD9238的VREF的值为1V,这样最终的模拟信号输入和AD转换的数据如下:

AD模 拟输入值

AD8055运放

输出

AD8138差分输出

(VIN+−VIN−)

AD9 238数字输出

-5V

-1V

-1V

000000000000

0V

0V

0V

100000000000

+5V

+1V

+1V

11111111111

从表中我们可以看出,-5V输入的时候,AD9238转换的数字值最小,+5V输入的时候,AD9238转换的数字值最大。

  1. AD9238数字输出时序

AD9238双通道AD的数字输出为+3.3V的CMOS输出模式,2路通道(A和B)独立的数据和时钟。AD数据在时钟的上降沿转换数据,FPGA端可用AD时钟的采样AD数据。

../_images/image653.png

硬件环境搭建#

../_images/image748.png
  1. 基于AN108的工程搭建硬件环境,删除ad9280_sample模块,由于是两个AD9238通路,需要添加两个ad9238_sample模块,IP核在repo文件夹。

../_images/image840.png
  1. 再添加一个DMA模块,将两个DMA的Buffer Length改为23,Memory Map DataWidth修改为64,提高带宽。两个模块配置如下:

../_images/image935.png
  1. 添加一个接口到Concat模块,连接到新添加的dma中断口

../_images/image1034.png
  1. 添加AXI SLAVE接口到AXI Interconnect模块

../_images/image1144.png
  1. 修改CPU的时钟配置,将FCLK_CLK2修改为65MHz,供ADC时钟使用

../_images/image1236.png
  1. 将时钟引出两路,提供给两个AD9238芯片

../_images/image1334.png

由于FCLK_CLK2只能引出一个引脚,需要在空白处右键选择create port,填写引脚名称,方向,类型,并将引脚连接到FCLK_CLK2

../_images/image1431.png
  1. 将AD9238的数据引脚引出,并修改名称

../_images/image1528.png
  1. 连接好其余信号,保存,点开Address Editor,查看地址配置,如果有些模块没有配置地址,点击Auto Assign Address

../_images/image1627.png
  1. Generate Output Products和Create HDL Wrapper,在XDC中绑定AD9238引脚,之后生成bit文件

../_images/image1726.png

Vitis程序开发#

  1. 与AN108实验的Vitis开发类似,但需要叠加两个ADC波形,定义了两个DMA接收缓存

../_images/image1824.png
  1. 设置ADC_COE为16,2^4,也就是将AD9238的12bit转换成8bit,ADC_BYTE为2,ADC_BITS为有效数据宽度,设置为12,FPGA程序中将12bit数据扩展为16bit。

../_images/image1924.png

在调用波形叠加函数draw_wave时,Sign符号设置为UNSIGNEDSHORT

../_images/image2021.png

其他操作与AN108类似

板上验证#

  1. 连接电路板如下图所示,将AN9238模块插到扩展口,连接SMA接口到波形发生器,连接HDMI线到显示器,打开电源。为了方便观察显示效果,波形发生器采样频率设置范围为100KHz~1MHz,电压幅度最大为10V

../_images/image2127.png

AX7Z035硬件连接图

  1. 下载程序

../_images/image2226.png
  1. 显示结果如下

../_images/image2325.png