1 引言
在信号处理领域,DSP技术的应用越来越广泛,基于DSP的信号采集处理平台不断出现。常见的DSP信号采集处理平台利用总线进行数据采集,总线上多个设备的数据传输经常相互冲突。ADI公司的Tiger SHARCl01型DSP(简称TSl01)只有总线和链路口可以与外设通信,基于缓解总线冲突的目的,笔者设计了一种以现场可编程门阵列(FPGA)作为数据接口缓冲器,避开总线,经TSl01的链路口将多个A/D转换器采集到的数据传送到TSl01。由FPGA完成多个多路A/D转换器采集数据的缓冲排序,并形成符合TSl01链路口传输协议的数据流,送到TSl01的链路口。该设计实现了链路口与其他非链路口外部设备的通信。减少了TSlOl总线上的数据传输量,缓解了总线竞争的问题。
2 ADS8361型A/D转换器
ADS8361是TI公司生产的双通道、四路、模拟差分输入、16 bit同步采样串行A/D转换器。4路模拟差分输入分成2组,每组各有1个A/D转换模块,可同时采样;对每个输入最快可以实现500 ks/s的采样率,即2 μs就完成1次A/D采样。采样后的数据由串行接口输出,这对于具备同步串行接口的大多数DSP是非常有用的,DSP的总线可以挂接多种其他设备,在高速连续采样的过程中,DSP的串口和总线可以互不影响地独立工作。
ADS8361在采样频率率为50 kHz时,有80 dB的共模抑制,这在强噪声环境中非常重要。ADS8361需要模拟电压和数字电压分别供电,考虑到与外部电路的匹配,所以模拟部分选择5 V供电,数字部分与DSP的I/O电压一致,选择3.3 V供电。工作时既可以使用内部2.5 V参考电压,也可以由外部提供参考电压。差分模拟输入信号的电压范围为±2.5V。ADS8361采用SSOP-24封装。CS引脚是ADS8361的片选;Ml、M0、AO引脚用于选择采样通道和数据通道;RD引脚为读取数据引脚,CONVST引脚是A/D转换脉冲,在使用中应将RD与CON-VST引脚相连;CLOCK引脚用于输入采样时钟(与下文中FPGA输出的ADCLK相连);2个通道的数据输出引脚分别为SERIAL DATA A和SERIALDATA B,每次转换输出16 bit数据。ADS8361的工作时钟最大值为10MHz,高电平和低电平至少各40 ns。
3 TSl01的链路口及传输方式
TSl01是高性能128 bit浮点数字信号处理器,其运算能力很强(18亿次/秒),而外部总线吞吐能力相对不足(若外部频率为100 MHz,则外部总线传输速度为800 MB/s),当外设较多时很容易形成I/O瓶颈。不过它有四个高速链路口,每个链路口的传输速度极限为250 MB/s,适合TSl01之间的点对点高速传输,也可与其相同协议的外设通信,从而大大缓解了总线压力。
TSl01的每个链路口由发送器和接收器两部分组成,每部分都有128 bit的移位寄存器和128 bit的缓冲寄存器,其结构如图l所示。每个链路口均有8 bit数据线和LxCLKIN、LxCLKOUT和LxDIR(x为链路口序号0-3)3个控制引脚,可支持多片TSl01处理器间点对点的双向数据传送,也可以用于与外部设备进行数据传输。其中LxDIR用来指示链路口的数据流向。LxCLKIN和LxCLKOUT为链路口的时钟/确认握手信号。发送数据时,LxCLKOUT为时钟信号,LxCLKIN为确认信号;接收数据时,LxCLKIN为时钟信号,LxCLKOUT为确认信号。发送数据时,首先传输4字数据到链路发送缓冲寄存器LBUFTx,再将其复制到移位寄存器(若移位寄存器为空,此时LBUFTx可被写入新的数据),然后以字节的形式发送(先发送低字节),每个字节在链路时钟的上升沿和下降沿被驱动和锁存。接收器的移位寄存器为空时,系统将开始接收发送方传输的数据并将其送入移位寄存器,同时驱动LxCLKOUT为低电平。当整个4字接收完毕后,如果接收缓冲寄存器LBUFRx为空,系统会将4字数据从移位寄存器复制到LBUFRx,并在数据被复制后驱动其Lx-CLKOUT为高电平,以告诉发送方接收缓冲寄存器为空,可以准备接收新数据。发送方检测到Lx-CLKIN为高电平后立即进行下次传输。
常见的启动链路传输数据的方法有二种:利用TSl01的IRQ中断启动和利用链路中断启动。链路传输以DMA方式进行,DMA方式是在TSl01内核不干预的情况下,后台通过链路口高速传送数据的机制。从外部设备向链路口传送数据,实际上是链路口把外部设备送来的数据自动保存到TSlOl的内、外存储器中,也可以经其他链路口转发出去。对链路口及其DMA寄存器进行正确的设置后就可以设置TCB块。DMA启动后,一旦链路缓冲器未满,它将向外部设备请求数据。这时,如果DMA可以占用内部或外部数据总线,那么,系统便可将数据从链路口传送到存储器中。
4 数据采集的硬件设计
TSIOI是运算能力强但与外部连接资源相对少的一类DSP,在多个TSl01级连的系统中,如果利用总线进行数据采集,A/D转换器通常需要长时间占用总线,会经常出现争占总线的问题,从而导致信号采集处理出现总线瓶颈,利用链路口进行数据采集可以很大程度地释放总线资源。本应用中需要对10路模拟信号同时进行500 kHz的采样,传输的数据率为lOx0.5 MBx2=10 MB/s<250 MB/s。
TSl01通过FPGA进行数据采集,它的链路口作为数据输入口。它们的连接结构如图2所示,将链路口的LxCLKIN直接和FPGA连接,由FPGA驱动,在FPGA向链路口传送数据时作为链路口的时钟输入。LxDIR和LxCLKOUT可以悬空,链路口的8条数据线接到FPGA上。
设计中将每个A/D转换器的M1、NO、A0引脚接地,仅取用每个A/D转换器的2个模拟差分输入——AO和B0通道,2个通道可以在2μs之内同时完成1次采样。本设计共用5个ADS8361级连以扩充模拟输入通道,实现10个模拟通道输入,每个ADS8361的RD与CONVST连接,由FPGA进行控制,5个ADS8361同时进行A/D转换,转换后在FPGA内同时完成串并转换,把转换后的并行数据先锁存在FPGA内部,再将各通道按先低字节后高字节依次传送到TSl01的链路口。
5 数据采集的软件设计
软件部分包括TSl01软件设计和FPGA软件设计,FPGA软件设计采用VHDL实现。其结构如图3所示。
FPGA的主要操作是将5个ADS8361的10路串行采集数据转换成20个8 bit数据,再将数据锁存,同时产生链路时钟,将锁存后的数据发送到TSl01链路口。需要实现的时序如图4所示,其中CLOCK是TSlOl外部时钟,ADCLK是ADS8361的工作时钟,是CLDCK的5分频,占空比为60%,CONVST与RD相连接,LINKCLK是链路时钟,LINKDATA是链路数据。
使用链路传输时,TSl01在链路时钟的上升沿和下降沿都锁存数据,20个8 bit数据需要lO个链路脉冲,而链路口每次至少需要传输128 bit的数据,即至少需要8个脉冲,且发送数据需要的脉冲数必须为8的倍数。所以设计中每次通过链路发送数据的脉冲数为16个,前10个传输A/D转换器采集到的数据,其后的6个脉冲发送0x55。发送到链路的数据是A/D转换器上次转换的结果。TSl01可以设置链路口工作时钟为内核时钟的2、3、4、8分频,设计中TSl01外部时钟CLOCK是50MHz,内核时钟是CLOCK的5倍频即250 MHz,链路口接收数据时FPGA给TSIOI的链路时钟LINKCLK是25 MHz TSl01链路口工作时钟应尽量接近链路时钟LINKCLK,所以设置TSl01链路口工作时钟为内核时钟的8分频即31.25 MHz。
系统采用链路中断方式接收FPGA送来的数据,链路中断方式数据接收的程序如下:
6 A/D转换器电路的设计和使用
设计高精度A/D转换器的关键是保证有效位数,ADS8361的输入动态范围为:±2.5 V,每个量化单位对应0.076 mV,因此应设法降低噪声和干扰。噪声和干扰的来源主要有二种:一种是A/D转换器自身的噪声如量化噪声等,另一种是周围电路产生的噪声干扰。前者是A/D转换器固有的,后者的大小远远超过前者,特别是电源、模拟/电路数字电路之间的干扰。ADS8361的差分输入方式大大降低了共模干扰。设计中主要考虑如何在电路中减少其他噪声和干扰。
电源设计是抑制噪声的关键,本文介绍的设计具有多种电压(模拟5 V、-5 V和数字3.3 V、1.2V等)并且是混合模拟和数字信号的板级设计,选择合适的电源电路,合理地进行电源层和地层的切割是很重要的。开关电源具有体积小、效率高、输出稳定等优点,同时能够很好地解决TSlOl的上电次序问题,但纹波明显。开关频率越高输出电压纹波越小,电路中选用的电感器在10μH~200 μH为宜,电路中可以使用ESR小、容值大的电容器构成去耦电路,同时在板上放置多种电容器进行滤波。
减少数字信号干扰也可以有效提高A/D转换器的精度,布板和布线时要使ADS8361模拟差分信号输入区域尽量远离数字信号,FPGA设计中尽量避免多个信号电平同时翻转,同时给A/D转换器提供良好的工作时钟,应使用串联终端法,串联1只小电阻器可以很好减少时基抖动,时钟信号进入A/D转换器的布线越短越好,同时不要离数字信号太近,也不要靠近模拟区,否则会增加模拟区的噪声。同时要注意单点共地,在共地的点上串接1个磁珠。设计中使用了多层板布局,在轻载情况下可以将输出电压纹波减到4mV。
7 结束语
笔者设计一种通过TSl01链路口进行多A/D转换器多通道高精度数据采集的实现方法,在DSP信号采集处理系统中可以不占用总线,实现并行数据传输和处理,有更高的实时性,同时探讨了如何提高A/D转换器精度的问题。该设计方法已经应用于多种并行和串行A/D转换电路中,具有通用性。