IS 流数据 。 由于 ADC 时钟与 AXIS 的时钟频率不同 , 需要在 ADC 中添加 FIFO 进行跨时钟域处理 ,起到缓冲
的作用 , AXIS 时钟频率是 ADC 时钟的两倍 , 所以不会发生数据溢出的情况 。 ARM 配置 adc_clk 时钟端口 ,
adc_rst 和复位端完成采集的时序及复位控制 。
2.3
采集系统通信
系统分为内部通信和外部通信 。 内部通过 AX4 总线进行通信 , 包含 5 个独立的传输通道读地址 、 读数
据 、 写地址 、 写数据 、 写回复 , 这些通道都支持单向传输 , 包括 AXI4 、 AXI-Stream 、 AXI-lite 3 种接口 , 系统数
据从 AD 到 ZYNQ 单向传输 ; 因此只开启了写通道 。 DMA 采用的 AXI-Stream 接口 , 主从设备间能够直接进
行数据的读取 , 数据传输不需要地址 , 提高了系统的实时性 。 AXI 协议中主设备和从设备通过握手信号建立
连接 。 如图 3 所示 , 使用 UART 接口与外部通信系统采用 Silicon Labs CP20102GM 芯片实现 USB 接口转
UART 接口的功能 , 并采用 micro USB 线与终端进行串行通信 。 UART 接口的 TX/RX 信号与 ZYNQ PS 的
BANK501 信号相连 , BANK501 的 VCCMIO 电平为 1.8 V , 而 CP2102GM 的数据电平为 3.3 V , 系统中间接入
TXSOQ02DCUR 电平转换芯片实现电平匹配 。
2.4 DDR 高速存储
图 4 为 DDR3 DRAM 硬件连接示意图 , DDR 是双倍速率同步动态随机存储器 , 数据在工作时钟的
上升沿和下降沿都会进行采样 , 有效提升了存储速率 。 系统配有两颗 4 Gbit 的 DDR3 芯片 , 型号为
H5TQ4G63ARFR-PBC 。 DDR 总线位宽为 32 bit , 最高运行速度可以达到 533 MHz 。 DDR3 存储器直接与
ZYNQ 处理器的 BANK502 存储接口相连 。 ZYNQ-Processing System 核配置存储器时 , 必须确保 DDR 接口型
号一致或者兼容 。
3
数据采集系统的软件设计
Xilinx IDE 套件中 , 在 vivado 完成硬件工程设
计的基础上 , SDK 会自动配置一些重要的参数 , 分
为 3 个模块 : 硬件定义 ( hardware definition ) 包含定
义的寄存器类型 、 地址映射以及当前设计包含的 IP
块信心 ; 板级支持包 ( board support package ) 包含支
持 IP 块的驱动程序和变量参数头文件 ; 应用程序
( application ) 用于测试不同的功能 。 据此完成系统
软件部分设计 。
3.1 ADC-DMA 控制
ADC-DMA 控制是系统软件核心模块 , 程序运
行前对 ADC 和 DMA 相关参数进行初始化设置 , 如
ADC 的括基地址 、 偏移地址 、 采集长度 、 系数 、 字节
数 、 位数和通道数 。 DMA 最大传输字节数 、 设备 ID 、
中断 ID 和中断触发源 。 ADC 数据写入 FIFO 中是
按照 1 至 8 通道顺序存储 , 程序定义了二维数组 ,
将每个通道的数据独立出来 , 并调整了通道顺序 。
为了在屏幕上显示所有通道数据 , 系统将每个通道
的系数进行了微调 , 使各通道波形形成错位 。 DMA
的中断触发类型为完成触发 , 此中断属于 ZYNQ 的
共享中断 , 触发机制为当任务执行完成后触发 , 硬
件设计中 DMA 只开起了写通道接口 , 中断函数只
打开 Streams 到 Memery Map 中断 。 SDK Terminal
的接口 、 波特率和数据位配置后 , 应用 printf 函数驱
动串口通信完成终端数据显示 。 同时可以通过
HDMI 接口与显示器相连 , 实现波形的实时显示 。
ADC 控制流程图如图 5 。
3.2 DMA-SG 模式应用设计
DMA-SG 模式相对简单模式有着更高效的数据传输特性 , 允许一次单一 DMA 传输访问多个内存空间 ,
所有任务结束后才触发中断 。 硬件工程开启 SG 模式后引出 M_AXI_SG 接口 , 用于读写链表 。 链表以 13 个寄
存器组成的描述符为基本单元 。 描述符中包含下一个描述符指针地址 、 数据缓存地址 、 控制存储信息等 。 写
通道 SG 模式驱动设计流程如图 6 所示 , 需要在内存中开辟缓存空间和链表制作 。 将第一个描述符写入当前
地址寄存器 。 启动 DMA 并建立中断系统 , 传输结束后会触发中断 。 将最后一个描述符写入结尾结存器 , 触发
DMA 通过总线抓取链表描述符 , BD 包传输完成后读取下一个描述符 。 将最后一个描述符指针只指向第一
个描述符的地址 , 匹配回环模式 。 数据处理完成后 , 清除链表状态 。
3.3
显示控制模块
该模块提供了易于使用的 API , 控制显示器通过 VGA 或 HDMI 连接到系统开发板上 。 根据显示器分辨
率大小设置画布大小 、 背景和颜色 。 在画布中取长方形区间作显示波形的幅值和传播时间 。 区间内设计 32 ×
32 像素点的小方格作为量化单位 , 水平和垂直方向每隔 4 像素点显示一次 , 网格显示为灰色 , 背景显示为
黑色 。 设计网格叠加函数和波形叠加函数对画布缓存区的数据进行实时读取 , 实现波形的不间断显示 。
Catch 中读取的数据在图像上显示为离散点 , 将数据与前一个数据进行比较 , 得出差值并在同一列描点 , 使
波形显示更为平滑 。 可以通过修改波形起始位置参数改变波形区域的大小 , 但列起始位置加上波形高度必
须小于显示器分辨率 , 否则无法正常显示 。 系统屏幕以彩条作为显示背景 , 设计了无缝帧缓冲器区 , 可实现
无痕动画 。
图像驱动流程如图 7 所示 。 首先要创建一个显示对象 , 并对其初始化设置 。 调用 DisplaySetMode 函数设
置传输模式 。 调用 DisplayStart 函数将数据传输到显示器上 。 要实现无缝动画 , 需要先将一张图像绘制到当
前未显示的帧缓存区 , 后调用 DisplayChangFrame 函数显示此帧 , 重复操作显示图像 。 若更改分辨 , 需调用显
示模式函数设置模式 , 然后 , 从新开始传输数据 。
4
实验结果分析
采用 digilent 的 Analog Discovery 2 任意函数发生器提供所需的信号进行实验 。 图 8 ( a ) 为信号发生器设
置页面 , 实验对正弦信号 、 20 kHz 、 2 V 信号进行采集显示 , AD 采样频率为 200 kHz , 8 个采集通道全部开启 ,
由于硬件条件限制 , 只进行了单通道实验 。 HDMI 显示结果以及试验平台如图 8 ( b ) 所示 , 图形界面显示的正
弦波即为系统采集信号 , 纵向分析 , 相邻虚线间距表示一个度量单位 , 波峰到波谷共经过 4 个单位表示
从 +2 V 到 -2 V 信号 , 分析得出实验结果和原始信号波形相同 。 为了进一步验证采集精度 , 实验进行了 8 通
道 4 个模拟电压值的测试 , 测试结果通过串口打印出来 , 如表 1 所示 , 第一列基准电压为信号发生器发出
值 , 后面 8 列为系统测量结果 。 根据式 ( 1 ), 计算出采集误差为 0.02% 。

针对电能质量检测领域的高速数据采集要求 , 利用 Xilinx 提供的 Vivado 开发套件在 ZYNQ SoC 上完成
高速数据采集系统的设计 。 该设计在硬件方面 , 借助 ZYNQ 的 FPGA 部分实现系统的采集控制 , ARM 部分
完成数据传输 、 存储和结果显示 , 其中基于自定义 ad7606_sample IP 实现了 AD7606 的采集控制 , 利用 AXI
HP 高速接口 、 AXI-DMA 硬核 IP 、 DMA-SG 模式加快了系统的数据传输和处理速度 。 在软件方面 , 完成了 SG
模式下的 BD 包建立 、 波形显示设计及 DMA 数据传输控制 。 通过测试的实验结果表明 , ARM 端驱动 HDMI
接口实现了采集信号的实时在线显示 。 通过对串口终端打印出来的数据进行分析 , 确定系统的采集误差可
达到 0.02% 。 系统具备体积小 、 功耗低 、 精度高 、 实时性强 、 稳定性强等特点 。