任勇峰,刘占峰,彭巧君,李辉景,周涛,王淑琴
(中北大学仪器科学与动态测试教育部重点实验室,山西太原030051)
随着数字信号处理技术的发展,数据传输速率越来越高,数据量越来越大。在传统的测试设备设计中,大多是通过USB总线与上位机进行通信。这种通信方式传输速率不高,连接也不稳固。采用64 bit、66 MHz的PCI总线,传输速率可达到528 MB/s,且基于CPCI总线的通信设备数据传输速率比USB总线更快、更稳定,板卡的四周都被牢牢地固定住,机械结构也很稳固[1]。
图1 接口卡整体结构组成框图
接口卡整体结构如图1所示。接口卡主要包括CPCI总线接口、高速数据接口和全双工RS422接口。其中,CPCI接口实现接口卡与上位机之间的通信,高速数据接口接收记录器下传的高速数据,并由FPGA控制通过CPCI总线将数据传输给上位机进行实时显示与存盘;RS422接口将上位机下发的控制命令转发给记录器,并接收记录器反馈回来的状态信息,试验人员根据状态反馈来监测记录器是否工作正常。
CPCI完全兼容PCI协议,本设计通过PCI9054总线控制芯片和FPGA来实现PCI协议,代替传统的FIFO芯片和串/并转换芯片,完成对模拟电路的控制功能,节约了板卡面积,减少PCB走线,有效防止了传输线之间的串扰[2]。
PCI9054总线控制芯片有3种工作模式,分别为M模式、C模式、J模式。其中,M模式应用于MotorolaMPC850/860PowerQUICC和PowerPC80x/82x;C模式即非多路复用的32位地址和数据总线,应用于DSP、FPGA等;J模式即多路复用的32位地址和数据总线,应用于Intel1960、IBMPowerPC401、IDTRC32364、DSP以及IOP480等[3]。
C模式类似于单片机的工作方式,它的地址线和数据线分开使用,可以很方便地控制本地时序。在使用C模式时,只需要严格控制好本地端和CPCI端的各种时序,就可以很好地使用PCI9054芯片。因此,在本设计中使PCI9054工作在C模式。通过设置MODE0(156引脚)和MODE1(157引脚)的值来实现其工作模式的配置,将PCI9054的156脚和157脚接地后,使其工作于C模式。
2.2.1 CPCI总线访问本地总线时序介绍
PCI9054的访问方式选择DMA方式。PCI9054作为主控设备,通过其内部的DMA控制器来实现局部总线上的数据与CPCI总线上的数据之间的传输。DMA访问方式下,CPCI总线向本地总线传输数据时,本地时序如图2所示。
图2 CPCI总线向本地总线传输数据时序图
当上位机向接口卡下发控制命令时,上位机通过配置DMA控制器的命令/状态寄存器来启动DMA访问。此时,DMA控制器通过发出LHOLD信号来向本地总线申请总线的主控权,本地FPGA收到LHOLD请求信号后,反馈一个信号LHOLDA来响应请求,DMA控制器收到此响应信号之后,便获得主控本地总线的权利。当DMA控制器获得主控权之后,ADS#信号变低,意味着地址总线LA上的地址为有效地址。BLAST#变低,单周期访问开启,只有收到本地总线反馈的READY#信号有效(低)时,才能真正开启访问。LW/R#为高代表写操作,为低代表读操作,如图2所示,当上位机下发命令时为写操作,LW/R#为高。当所有时序满足之后,FPGA从地址LA上获得数据信号LD。
当接口卡向上位机传输数据时,本地总线时序与图2所示时序相似,只是LW/R#为低,进行读操作。DMA控制器从地址LA将数据读入其内部的缓存FIFO中,在不占用CPU资源的情况下,将数据存储下来。如果ADS#处于高状态,则代表开启一次突发访问,FPGA无条件向CPCI总线上传数据。
2.2.2 FPGA控制本地时序
用VHDL语言编程来实现本地时序地控制。按照上一节介绍的时序控制接口卡与CPCI总线之间进行通信。FPGA内部调用一个FIFO,记录器上传的LVDS数据缓存于此FIFO中,当FIFO内数据达到2 KB时,其FIFO可编程半满信号有效。当处于单周期读访问时,一旦FIFO可编程半满则启动一次DMA访问。当处于单周期写访问时,FPGA从命令地址读取上位机下发的命令数据。VHDL程序的流程图如图3所示。
图3 CPCI接口VHDL程序流程图
数据传输有并行和串行两种方式。在传输速率要求不高、传输距离较短的电路中,并行传输方式是首选。但是,随着数据传输速率以及时钟频率的提高,很容易发生数据和时钟不同步的现象,造成数据接收错误的结果,较高的传输速率还会使信号线之间产生干扰。差分信号以其功耗低、串扰小和辐射低等特点,在各种高速总线中得到了应用。因此,这里采取LVDS串行通信技术。这种技术通过一对差分PCB走线或平衡电缆来传输幅度非常低的信号(约350 mV),传输速率可以达到100 Mb/s,甚至超过1 Gb/s,且其信号连线较少,带宽较高,抗干扰能力较强[4],可以保证本设计中高速数据传输的正确性。
由于趋肤效应和介质损耗[5],高速信号在传输过程中会发生衰减。因此,当传输距离较长时,往往要使用电缆驱动器和均衡器来保证高速数据传输的准确性。电缆驱动器将信号以最大功率耦合到电缆上,可以延长高速数据的传输距离;电缆均衡器可以对传输的信号进行高频补偿。
本设计中,LVDS串行器/解串器分别选用TI公司的SN65LV1203和SN65LV1224,这组芯片的数据传输速率最大可以达到660 Mb/s;信号驱动器/电缆均衡器分别选用NS公司的CLC001和CLC014,这组芯片的数据传输速率最大可以达到662 Mb/s。LVDS接口电路结构如图4所示,记录器的FPGA控制LVDS串行器将10 bit并行数据转换成串行数据,再通过电缆驱动器将信号耦合到电缆上。接口卡的电缆均衡器对接收到的信号进行高频补偿之后传送给解串器,解串器根据参考时钟将串行数据转换成10 bit的并行数据,由FPGA进行后续的处理。
图4 LVDS接口电路结构
为串行器提供一个频率为18.432 MHz的时钟,在时钟上升沿时,串行器SN65LV1203将I/O口上的10 bit并行数据存入锁存寄存器中,再转换成串行数据传输给驱动器CLC001。串行器在发送数据时,会自动附加起始位和停止位,其中,起始位为“1”,停止位为“0”,起始位和停止位是串行数据流内嵌的同步标志。驱动器的外围电路按照NS公司的CLC001芯片的典型应用电路进行配置。为了降低信号反射,在发送端要放置阻抗匹配电阻,在电缆均衡器的外围电路配置中,接收端也要放置终端匹配电阻。
与串行器时钟频率保持一致,给解串器也提供一个相同频率的时钟REFCLK,且RCLK_R/F置高,即在时钟的上升沿时刻,解串器将LVDS输入端的串行信号转换成10 bit并行信号,由FPGA控制通过CPCI总线上传给上位机。
为了解决LVDS数据接收时钟与CPCI接口数据传输时钟不同步的问题,FPGA调用一个异步时钟控制的FIFO来进行数据缓存,当FIFO内数据达到一次DMA传输的数据量时,其可编程FIFO半满信号有效。为了防止FIFO内数据溢出,FIFO深度要大于一次DMA传输的数据量。
为了提高接口卡的抗干扰能力,需要采取隔离措施,以达到接口卡与记录器之间电气隔离、记录器不受接口卡影响的目的。光电隔离是一种应用较为广泛的隔离方法,常用于实现电气隔离[6]。本设计要求RS422数据传输的波特率为115.2 kb/s,选用HCPL-063L光耦进行隔离,它是一种高速兼容LVTTL 3.3 V电平的光耦合器,输出上升沿时间为45 ns,下降沿时间为20 ns,可以满足波特率要求。由于HCPL-063L内部输出端的三极管的集电极开路,所以在设计电路时需要外接上拉电阻。
光耦隔离需要注意的是,输入/输出的供电电源要进行隔离,否则就失去了隔离的意义。本设计采用DCDC芯片RO3.33.3S隔离前后的3.3 V电源。RS422接口芯片选用应用比较广泛的MAX3490,在接口处都有上拉、下拉电阻,即使接口短路也不会损坏电路。
图5 RS422数据接收逻辑
本设计中RS422接口遵循UART协议,先发低位,再发高位,其中包括1 bit起始位、8 bit数据位和1 bit停止位,总共10 bit,无奇偶校验位。接口卡的系统时钟为36.864 MHz,传输1 bit二进制位需要经历36 864 000/115 200=320个时钟周期,传输1 B的数据则需要经历320×10=3 200个时钟周期。
在接收数据时,存在毛刺和干扰,为避免引起接收数据出现错误,以每位传输的中间态时钟作为接收的时间,如起始位接收时钟为第160个时钟,第1位数据位为第480个时钟,第2位数据位为第800个时钟,以此类推,如图5所示。
发送数据与接收数据的方法类似,是以每位传输的起始态时钟作为发送的时间,起始位发送时钟为第0个时钟,第1位数据位为第320个时钟,第2位数据位为第640个时钟,以此类推。
给记录器提供一个频率为3 Hz、幅值为0.5 V~4.5 V的正弦模拟信号供其采集,接口卡接收记录器下传的数字量信号,并通过CPCI总线将数据上传给上位机。用上位机画图软件依据接收到的数据文件绘制波形,得到如图6所示图形。
图6 上位机绘制波形图
如图6所示,根据接口卡接收的数据绘制出的波形为光滑连续的正弦波,与信号源波形一致。根据图中2点的横坐标可以看出,2.5个正弦周期的长度间隔大约为0.836 s,可以计算出正弦波频率为3 Hz,与信号源频率一致。记录器的ADC为16 bit,最大可测电压值为5 V,即每个分层值约代表0.076 mV,图中分层值的最小值约为6 724,最大值约为57 147,可以计算出上图正弦波的幅值约为0.5 V~4.5 V,与信号源幅值一致。
上述验证结果表明,接口卡能够正确接收记录器下发的高速数据并通过CPCI总线将数据上传给上位机进行处理,具有很高的可靠性。
[1]张华,胡修林,马若飞.超高速数据采集系统设计与优化策略研究[J].电子技术应用,2010,36(12):86-90.
[2]孙国良.基于FPGA的cPCI接口数据采集系统设计[D].北京:北京邮电大学,2009.
[3]王旭.PCI9054局部总线三种工作模式的具体应用[J].电子与封装,2005,12(5):27-28.
[4]储成群.基于LVDS接口的高速数据记录器的设计[D].太原:中北大学,2011.
[5]孟青.多通道数据采集记录器的设计与研究[D].太原:中北大学,2013.
[6]谢子青.光电隔离抗干扰技术及应用[J].现代电子技术,2003(13):33-34.