首页
|
新闻
|
新品
|
文库
|
方案
|
视频
|
下载
|
商城
|
开发板
|
数据中心
|
座谈新版
|
培训
|
工具
|
博客
|
论坛
|
百科
|
GEC
|
活动
|
主题月
|
电子展
注册
登录
论坛
博客
搜索
帮助
导航
默认风格
uchome
discuz6
GreenM
»
FPGA/CPLD可编程逻辑
» 手把手课堂:在Zynq SoC上实现模拟混合信号
返回列表
回复
发帖
发新话题
发布投票
发布悬赏
发布辩论
发布活动
发布视频
发布商品
手把手课堂:在Zynq SoC上实现模拟混合信号
发短消息
加为好友
pengpengpang
(pengpengpang)
当前离线
UID
1023229
帖子
6106
精华
0
积分
3055
阅读权限
90
来自
中国
在线时间
156 小时
注册时间
2013-12-20
最后登录
2016-7-3
论坛元老
UID
1023229
来自
中国
1
#
打印
字体大小:
t
T
pengpengpang
发表于 2014-7-22 10:18
|
只看该作者
手把手课堂:在Zynq SoC上实现模拟混合信号
Taylor
,
工程师
,
中国
,
文章
,
课堂
作者:Adam Taylor,
特许工程师,
aptaylor@theiet.org
在Zynq SoC内部使用XADC可以极大提高系统集成度,而且实现起来非常简单直观。
本文是Adam Taylor计划编写的Zynq-7000 All Programmable SoC系列实际操作教程的第四篇。前三篇已分别发表在《赛灵思中国通讯》的第47、48和49期。Adam是《赛灵思中国通讯》的长期撰稿人,本期杂志中还有他的一篇有关设计调试的文章。另外Adam还在All Programmable星球社区上撰写博客(
www.programmableplanet.com
)。
赛灵思Zynq®-7000 All Programmable SoC配套提供一个带有2个12位模数转换器(ADC)的XADC模块。这两个ADC的采样率可高达每秒百万次采样(1MSPS),具有理想的500kHz有效输入信号带宽(辅助输入端信号带宽为250kHz)。XADC多路复用17个输入信号并测量一系列内部电压与温度。如果您的设计无法为外部信号提供足够的模拟输入引脚,那么应对XADC加以配置,以驱动外部模拟多路复用器并按照要求的顺序对所有输入进行排序。
XADC能够实现单极或双极测量,因此器件的输入均为差分输入。17个差分输入被划分为一个专用对(称为VP/VN)和16个辅助输入(可以是模拟或数字I/O,被称为VAUXP和VAUXN)。有效输入信号带宽视所用的差分输入类型而定,如果使用专用对,则信号带宽为500kHz,如果使用辅助输入,则信号带宽为250kHz。
XADC的混合信号性能非常好,根据数据手册显示,其具有60dB的最低信噪比(SNR)和70dB的总谐波失真(THD)。根据器件所处温度范围(-55oC至125oC或-40oC至100oC)的不同,XADC的分辨率可以是10位或12位。这样根据下面的等式计算得出的XADC有效位数是9.67。
ENOB = (SNR–1.76/6.02)
(参考《赛灵思中国通讯》第45期中《ADC和DAC的FPGA工程师使用指南》,了解这些器件的更多理论详情。)
XADC具有16、64和256个采样的平均计算法可供用户选择,用以降低输入端噪声。用户还可以为每个所测量的内部器件参数设置最大和最小告警等级。
XADCXADC适合哪些应用?
设计人员可将这种ADC用于从简单的板载参数(电压、电流和温度)内务处理遥测,到对触摸传感器、马达控制或简单的无线通信协议的支持等一系列应用。此外,还可以将其用在军事或其他重要系统中,以检测设备篡改。
XADC的重要优势之一是用来监控一系列系统内部参数,验证设计方案的良好程度。此外,为了简化设计初期的验证工作,您可以在基于Zynq-7000 All Programmable SoC的系统中使用XADC来测量由片上温度传感器记录的温度以及后续的其他参数。
硬件实现
要想使用XADC,首先需要打开包含Zynq SoC实现方案的PlanAhead™项目(如果您不知道如何操作,请参考《赛灵思中国通讯》第47期的封面专题文章)。选择您所创建的处理器子系统,并双击打开Xilinx Platform Studio (XPS)。您可以在XPS中修改处理系统。
XPS打开后,选择项目窗口左侧的IP Catalog标签,并选择模拟菜单下的AXI XADC。这时会出现提示,问您是否要向设计中添加IP。点击是,显示IP配置窗口,如图1所示。这里没有太多需要配置的内容,除非您想对复杂的AXI总线接口进行优化。
用户标签是主要的操控区域。您可以通过该标签为处理器添加中断,启用温度总线。您可以将启用后的温度总线连接至储存器接口生成器(Memory Interface Generator),用以提供影响时序的温度信息。在ISim中仿真XADC时使用的是仿真监视文件。
如果您对XADC的配置比较满意,就可以关闭IP配置窗口,同时XADC将被添加到处理系统中。如果您点击System Assembly查看器的地址标签,就会看到分配给XADC的地址范围,然后通过勾选来锁定地址范围。
下一步是设置连接到XADC的外部端口数。在默认情况下,XADC可支持1个外部多路复用器、16个辅助模拟输入、8个告警输出和1个转换开始,如图2所示。
必要时您可以移除这些端口,只为ADC保留专用的模拟输入Vp和Vn,以及连接监视器的内部信道。例如,ZedBoard只能在信道0和8上支持两个辅助模拟输入,同时提供四个XADC专用的GPIO。您可以根据需要将这些GPIO连接到告警输出或多路复用器输出。可在XPS内选择下拉菜单中的“不连接外部端口”选项来断开外部I/O。
如果您希望使一些辅助输入仍处于连接状态(例如添加两个ZedBoard输入),可在系统内部保留VAUXP和VAUXN信道,同时在RTL设计的顶层只连接信道0和信道8。如果希望连接辅助输入但移除其他外部端口,需要右击特定的I/O,然后选择“无连接”选项,如图3所示。
外部连接设置好后,运行设计规则检查(DRC)。如果DRC未显示任何错误,即可退出XPS并返回到PlanAhead中,并在此生成比特流。如果您查看一下综合结果,就会发现资源列表中已含有XADC。
编写软件
硬件设计已经完成,此时您需要将硬件再次导入到软件开发套件(SDK)中,以便升级板支持包。在PlanAhead中选择文件->导出->导出硬件到SDK选项。这时会出现提示,警告我们将覆盖已有的硬件定义。点击“是”并覆盖。
如果SDK打开,您会收到一个提示介绍硬件规范文件的变更情况。如果SDK没有打开,那么会在下次打开的时候收到此提示。
点击SDK提示中的“是”选项,硬件定义就会被更新,同时您的项目将被重建。假设设计没有错误,那么您将开始执行代码修改工作。
打开system.xml或xparameters.h文件,您不仅会看到设计中所有其他外设的地址范围,还能看到刚刚添加到XPS内的XADC的地址范围。
打开system.mss文件会显示板支持包(BSP)的整体细节。这里我们真正感兴趣的是外设驱动程序,此处您可以看到xai_adc_0(或您在XPS中对XADC的任意命名)。接下来,您会看到用于打开文档和实例的热链接。
为了缩短开发时间,赛灵思在报头文件中提供了一系列驱动程序,便于我们使用这些器件。您需要在代码中访问这些驱动程序。为此需要添加BSP更新过程中所生成的以下报头文件。
#include "xadcps.h"
该文件包含对于XADC寄存器、采样平均选项、信道顺序选项和省电模式等内容的定义。另外还包含一系列可在系统中使用的类型定义、宏命令和函数。
集中在一起
举一个简单的实例:我将读取系统的内部温度和电压参数,并通过RS232链路将它们输出。
在编写代码时首先要做的是查询将要进行初始化的XADC的配置,这里要用到XAdcPs_Config类型的指针。利用XAdcPs_LookupConfig()函数调用以及从更新的xparameters.h文件中获得的器件ID将配置信息(器件ID和XADC的基地址)存储在指针内。初始化流程的下一步是使用此前获取并存储在配置指针中的信息,该步骤需要一个XAdcPs类型的指针。
Status_ADC = XAdcPs_CfgInitialize (XADCInstPtr,ConfigPtr,ConfigPtr->BaseAddress)
我将配置指针命名为ConfigPtr,将实例化指针命名为XADCInstPtr。XADC的初始化完成后,按照实例要求对其进行配置。以下是配置流程:
1. 采用XAdcPs_SelfTest()函数运行自测试,以确认器件没有问题。
2. 利用XAdcPs_SetSequencerMode()函数将定序器设置为单通道,从而停止定序器当前操作。
3. 利用XAdcPs_SetAlarmEnables()函数禁用所有告警。
4. 利用XAdcPs_SetSeqInputMode()函数重启定序器并让其按我所要求的顺序排序。
5. 利用XAdcPs_SetSeqChEnables()函数配置信道,使之能根据我的要求采样。
完成以上步骤后就可以使用ADC并从XADC接收数据。只需调用XAdcPs_GetAdcData()函数即可从XADC读取采样。对于内部温度和电压参数,然后我使用两个提供的宏命令(XAdcPs_原始ToTemperature()和XAdcPs_原始ToVoltage())将原始的XADC数值转换为实际的温度或电压值。
实际值和原始数据随后都通过RS232链路输出。图4给出了仅器件温度进行采样的初始结果。
当我将采样范围扩大至内部电源轨和温度时,会返回如下结果:
• 原始温度40696, 实际温度39.805603
• 原始VccInt 21677, 实际VccInt 0.992294
• 原始VccAux 39431, 实际VccAux 1.805008
• 原始VccBram 21691, 实际VccBram 0.992935
• 原始VccPInt 21649, 实际VccPInt 0.991013
• 原始VccPAux 39402, 实际VccPAux 1.803680
• 原始VccDDR 32014, 实际VccDDR 1.465485
所有这些参数都在Zynq SoC运行可接受的限值内,但需要Zynq SoC在实验室条件下工作。
正如您所看到的,在Zynq SoC中实现和使用模拟混合信号非常简单直观。XADC可以提高All Programmable系统的集成度和功能性。
收藏
分享
评分
记录学习中的点点滴滴,让每一天过的更加有意义!
回复
引用
订阅
TOP
返回列表
电商论坛
Pine A64
资料下载
方案分享
FAQ
行业应用
消费电子
便携式设备
医疗电子
汽车电子
工业控制
热门技术
智能可穿戴
3D打印
智能家居
综合设计
示波器技术
存储器
电子制造
计算机和外设
软件开发
分立器件
传感器技术
无源元件
资料共享
PCB综合技术
综合技术交流
EDA
MCU 单片机技术
ST MCU
Freescale MCU
NXP MCU
新唐 MCU
MIPS
X86
ARM
PowerPC
DSP技术
嵌入式技术
FPGA/CPLD可编程逻辑
模拟电路
数字电路
富士通半导体FRAM 铁电存储器“免费样片”使用心得
电源与功率管理
LED技术
测试测量
通信技术
3G
无线技术
微波在线
综合交流区
职场驿站
活动专区
在线座谈交流区
紧缺人才培训课程交流区
意见和建议