空间高速总线SpaceWire节点的设计与实现

2010-06-11 01:53陈大羽武文波
航天返回与遥感 2010年4期
关键词:字符数据包时钟

陈大羽 王 琨 李 涛 雷 宁 武文波

(北京空间机电研究所,北京100076)

1 引言

随着卫星应用范围的不断扩大,星上设备的种类和数量都呈现出增加趋势,但是,由于不同的设备采用不同的接口,设备间互连复杂,导致数据传输存在一定瓶颈。因此,迫切需要一种高可靠性、高速和低复杂度的总线技术来解决星上设备互连问题。SpaceWire总线就是针对这种需求提出的,是欧空局2003年推出的一种高速、点对点、全双工的串行总线协议[1]。该协议以IEEE 1355-1995协议和LVDS标准为基础,提供了一种通用接口标准,简化和规范了不同设备之间互连。

与CAN、FlexRay和1553B总线相比,SpaceWire总线的一个突出特点就是高速度和低复杂度,很容易在ASIC和FPGA上实现。更为重要的是该总线技术已成功应用于Mars Express和Smart-1等多个空间任务,目前,国内开展此项技术研究的单位很少,尚且没有星上应用实例。本文针对SpaceWire总线进行研究,分析其硬件实现特点,并给出了一种节点设计的实现方法。

2 SpaceWire总线介绍

SpaceWire总线可用于航天器有效载荷分系统设备之间、单元之间的数据和控制信息的处理,能满足高性能、高速数据传输,可以提供一种统一的用来连接传感器、数据处理单元、大容量存储器的基础框架。SpaceWire总线除了具有很好的电磁兼容性(Electro Magnetic Compatibility,EMC)的特性之外,在错误检测、异常处理、故障保护和故障恢复及时间确定性方面都做了相应加强。

SpaceWire总线的特点如下:

1)全双工、串行、点对点的串行数据总线,码速率达200Mbit/s,利用每个方向上的2对差分信号线实现数据的传输;

2)电缆最长为10m,连接器采用专为航天应用开发设计的微型9针D型连接器;

3)通过采用LVDS技术,获得了高速传输能力,其电压为350mV;

4)输出的编码方式采用数据-滤波(Data-Strobe,DS)编码;

5)网络由一定数量的SpaceWire节点通过SpaceWire路由器连接而成,节点可以通过SpaceWire电缆直接相连,也可通过SpaceWire路由器与其它SpaceWire节点或路由器相连;

6)SpaceWire总线标准ECSS-E-50-ST-12C涉及物理层、信号层、字符层、交换层、信息包层和网络层共6层协议,对应ISO/OSI中的物理层和数据链路层[1]。

SpaceWire总线协议ECSS-E-50-ST-12C对节点的软件设计做出详细的描述,其中交换层涉及节点的整体框架和状态机,信号层介绍DS编码,这2层协议是节点设计的基础。

2.1 SpaceWire节点组成结构

协议中SpaceWire节点的框架结构由STATEMACHINE状态机模块、TRANSMITTER发送模块、TX FIFO模块、RECEIVER接收模块和RX FIFO模块5个模块组成,如图1所示。

图1 SpaceWire节点组成框图

SpaceWire节点的STATE MACHINE状态机模块控制着整个节点按照时钟节拍有序地工作,包含ErrorReset、ErrorWait、Ready、Started、Connecting、Run共 6个状态 ,当状态机跳转到 Run 状态时,2个节点可以传输数据。

TRANSMITTER发送模块负责完成数据字符、时间码、控制字符的发送。该模块的位比特率在2~200Mbit/s之间可调。发送的数据格式采用DS编码,图1中的DOUT和SOUT为编码后的数据信号。

TX FIFO模块从主机设备接收数据,然后将数据写入TRANSMITTER发送模块,完成发送数据的存取功能。

RECEIVER接收模块通过输入信号DIN和SIN恢复出时钟Rx-Clk,然后用该时钟采集数据DIN信号完成接收另一节点发送的控制字符、时间码和数据字符的功能。其中接收到的控制字符给STATE MACHINE状态机模块进行处理,接收到的数据字符写入RX FIFO模块。

RX FIFO模块从RECEIVER接收模块接收数据,当主机设备存储空间未满时将数据写入,完成接收数据的存取功能。

2.2 DS编码

TRANSMITTER发送模块和RECEIVER接收模块分别采用了DS编码。DS编码是一种编码模式,它将数据和时钟信号编码为D信号和S信号,其中D信号和原始数据信号完全一致,S信号只是在数据信号不发生改变的情况下,才会发生翻转,如图2所示。

图2 DS编码技术示意图

DS编码的特点如下:

1)编码算法简单。D和S信号的生成逻辑如下:初始时D=0,S=0;当发送数据期间,D=Data,S=Data XOR Strobe。其中,Strobe信号为生成S信号时设置的中间信号。

2)解码算法容易。只需要将D和S信号异或操作即可得到解码器时钟,Rx-Clk=D XOR S,解码时采用Rx-Clk的上下沿采集D信号接收数据;

3)抗误码率高。相对于Data-Clock编码,DS编码传输具有更高的抗误码率,即使有接近一位的信号漂移或者畸变,也可以正确识别[2]。

3 节点设计关键

本课题根据图1所示的框图进行节点设计,主要对时钟域划分、TRANSMITTER发送模块设计、RECEIVER接收模块设计和RX FIFO模块读出频率4个节点设计关键点分别进行介绍。

3.1 时钟域划分

常规SpaceWire节点设计采用2个时钟域划分,即RECEIVER接收模块工作在Rx-Clk接收时钟域,其它模块工作在主时钟域。在这种设计中,其它模块在和RECEIVER接收模块进行数据交互时做跨时钟域处理,其优点是设计简单;缺点是TRANSMITTER发送模块的数据发送速率不高。由于TRANSMITTER发送模块和STATE MACHINE状态机模块、TX FIFO模块、RX FIFO模块都工作在主时钟域,由此可知,时钟速率最慢的模块决定了主时钟的工作频率。

本课题将节点划分为4个时钟域:Main-Clk时钟域、Tx-Clk发送时钟域、Rx-Clk接收时钟域和Host-Clk时钟域,如图3所示。STATE MACHINE状态机工作在Main-Clk时钟域,该模块负责整个系统的控制;TRANSMITTER发送模块工作在Tx-Clk发送时钟域,频率在2~200MHz范围之间可调;RECEIVER模块工作在Rx-Clk接收时钟域,通过DIN和SIN得到接收时钟Rx-Clk,该模块在该时钟域完成数据接收;TX FIFO模块采用异步FIFO设计,写数据工作在Host-Clk时钟域,读数据工作在Tx-Clk时钟域;RX FIFO模块同样采用异步FIFO设计,写数据工作在Rx-Clk时钟域,读数据工作在Host-Clk时钟域。

图3 SpaceWire节点时钟域划分框图

数据在不同的时钟域传输需要做跨时钟域处理,这样可以消除亚稳态对数据的影响。划分时钟域的优点包括:1)使只有TRANSMITTER发送模块工作在高速时钟下,比多个模块工作在主时钟域的常规节点设计,更容易提高数据的发送速率;2)TX FIFO模块和RX FIFO模块采用异步FIFO设计完成SpaceWire节点和主机设备异步数据交互,与同步FIFO设计相比,异步FIFO设计可以提高节点与不同主机设备的连接灵活性和可靠性。

3.2 TRANSMITTER发送模块设计

TRANSMITTER发送模块工作在2~200MHz的可变频率下,目前的常规设计采用上升沿发送数据,也就是用单倍数据速率(Single Data Rate,SDR)寄存器1个时钟周期发送1位数据。此时程序最高工作频率为200MHz,对设计者提出了很高的要求。本课题设计采用双倍数据速率(Double Data Rate,DDR)寄存器上下沿同时发送数据,此时一个时钟周期发送2位数据,对于200MHz数据率只需要采用100MHz时钟即可完成数据发送,大大降低了硬件程序的设计难度,也有利于向更高性能扩展。对于Xilinx FPGA,输出双倍数据速率寄存器ODDR元件完成上下沿采样发送数据,输出差分缓存OBUFDS元件在FPGA内部完成单端信号转成差分信号,连接2个元件可得到TRANSMITTER发送模块的底层输出设计,如图4所示。

图4 Xilinx FPGA下发送模块的底层输出设计

3.3 RECEIVER接收模块设计

RECEIVER接收模块设计关键在于时钟恢复后,能否正确使用恢复后的Rx-Clk时钟接收数据。RECEIVER接收模块设计非常简单,一个异或门和两个寄存器即可完成,如图5所示。但是,由于接收端最高工作频率为200MHz,时钟周期只有5ns,这样FPGA内异或门、寄存器位置和布线延时特性会造成Rx-Clk建立保持时间不能满足时序要求,不能正确接收D信号,从而导致整个RECEIVER接收模块接收数据错误,无法正常工作。为了解决该问题,本课题通过直接在FPGA底层手动放置异或门和寄存器位置来调整FPGA内部布线延时,以满足建立保持时间要求使恢复后的Rx-Clk正确接收D信号。

图5 RECEIVER接收模块接收数据设计

图6给出通过恢复后的Rx-Clk时钟双沿采集数据填充到移位寄存器的DS解码流程图[2]。

图6 R ECEIVER模块DS解码流程图

当数据未传输(D=0,S=0)时,通过异或操作恢复后的时钟为0,此时不接收数据。当数据传输时,通过异或恢复出时钟,在时钟上升沿采集数据填充到移位寄存器,在时钟的下降沿将数据填充到移位寄存器的下一个位置。收到2位数据与之前收到的数据进行拼接,然后判断是控制字符、时间码或者数据字符,控制字符传输到STATE MACHINE状态机模块处理,数据字符写入RX FIFO,时间码则直接发送到主机进行确认。

3.4 RX FIFO模块读出频率

首先,介绍一下SpaceWire标准协议中的数据字符和数据包结束字符(End of Packet,EOP),其格式如图7所示。协议规定2个EOP之间的所有数据字符为一个完整的数据包,采用EOP来标志前一数据包的结束和下一数据包的开始。数据写入RX FIFO时,要求把EOP作为特殊字符写入RX FIFO,也就是写入RX FIFO数据个数为数据字符个数加1。

图7 SpaceWire数据字符和EOP

根据协议可知,节点输出到主机设备的并行数据频率低于位比特率,也就是说从RX FIFO读出的数据频率小于DIN的发送频率,因此,精确计算出RX FIFO的最小读出数据频率对RX FIFO模块的设计至关重要,如果低于此频率,RX FIFO的写入频率大于读出频率,就会发生RX FIFO数据溢出。下面举2个例子说明不同数据包大小情况下,计算RX FIFO读出的数据频率的方法。

例1,假设输入数据DIN位比特速率为200Mbit/s,数据包采用一个数据字符和一个EOP数据包结束控制字符,下面给出RX FIFO读取接收数据的最小时钟频率的计算过程。

已知,数据字符和EOP共计2个数据写入RX FIFO。

由于DIN位比特速率为200Mbit/s,所以每比特数据的时间为5ns。接收数据字符所需要的时间是10bit所需要的时间,10×5ns=50ns;接收EOP所需要的时间是4×5ns=20ns;写入RX FIFO的2个数据所需要的时间是70ns,平均每个数据35ns,这样得出RX FIFO的最小读出数据频率为28.571MHz(1/35ns)。

例2,假设输入数据DIN位比特速率为200Mbit/s,数据包采用4个数据字符和一个EOP数据包结束控制字符,给出RX FIFO读取接收数据的最小读出数据频率的计算过程。

已知,数据字符和EOP共计5个数据写入RX FIFO。

由于DIN位比特速率为200Mbit/s,所以每位数据的时间为5ns。接收4个数据字符所需要的时间是40bit所需要的时间,40×5ns=200ns;接收EOP所需要的时间是4×5ns=20ns;写入RXFIFO的5个数据所需要的时间是220ns,平均每个数据44ns,这样得出RX FIFO的最小读出数据频率为22.727MHz(1/44ns)。

上述2个例子中的计算结果可以按照公式(1)计算得到。

式中 FRC表示RX FIFO读出时钟的最小读出数据频率;NDC表示一个数据包中数据字符Data Charactor个数;TDC表示每一数据字符Data Charactor的接收时间;TE表示EOP的接收时间;RB表示位比特速率[3]。

通过上面2个例子可以得出,RX FIFO模块可以接收的最小读出数据频率和RECEIVER接收模块可以接收的最小数据包大小相关。由式(1)可知,在数据包里数据个数为1的情况下取得最小读出数据频率,该频率为28.571MHz;只要主机系统的读出频率大于这一频率,无论数据包多大,都不会发生RX FIFO数据溢出。

4 SpaceWire节点实验测试

为了验证SpaceWire节点的功能和性能是否满足协议规定的设计要求,可采用两个硬件程序设计的SpaceWire节点传输图像数据的实验方法进行测试,图8为SpaceWire节点验证框图。

图8 SpaceWire节点验证框图

从图8可知整个实验的工作过程,在ROM中存储一幅大小为128行×128列×8bit的图像,SpaceWire节点1从ROM读出数据并打包,经差分数据线对发送给SpaceWire节点2;节点2将收到的数据写入缓存FIFO;然后从缓存FIFO按照Cameralink采集卡的规定接口格式读出数据;最后,通过采集卡采集图像,并和原始图像进行对比验证。图中UART串口的作用是控制节点1的工作状态并且监视其内部参数[4]。

经实验验证,串口可以控制SpaceWire节点1的工作状态和监视其内部参数,采集到的图像数据和原始图像保持一致。在Xilinx的XC4VSX35-10开发平台上,SpaceWire单个节点程序占用241个寄存器和898个4输入查找表,并且可以工作在240MHz时钟频率下[5]。

5 结束语

SpaceWire总线是一种高速、点对点、全双工的串行总线协议。本文在对总线协议、SpaceWire节点的总体框架和DS编码进行深入分析的基础上,针对时钟域划分、TRANMITTER发送模块设计、RECEIVER接收模块设计进行了设计。并且对不同数据包大小情况下,RX FIFO的最小读出数据频率做了分析计算,为RX FIFO模块设计提供了理论支持。最后,通过图像传输实验验证了SpaceWire节点设计的功能和性能,结果表明该节点设计可以满足空间高速数据传输中高可靠性、低误码率和低复杂度的要求。

[1]European Cooperation for Space Standardization.ECSS-E-50-ST-12C SpaceWire Links,Nodes,Routers and Networks[S].Issue2,Noordwijk The Netherlands,2008.

[2]罗学平,孟新,姚秀娟.一种高速数据传输协议的研究与应用[J].微计算机信息,2008(8):217-218.

[3]McClements C,Parkes S,Leon A.The SpaceWire CODEC[C].International SpaceWire Seminar,2003.

[4]Saponara S,Bacchillone T,Corona I D,et al.Hardware/Software FPGA-based Network Emulator for High-speed On-board Communications[C].11th EUR OMICR O CONFERENCE on DIGITAL SYSTEM DESIGN Architectures,Methods and Tools,2008 IEEE,2008:353-359.

[5]Xilinx.Virtex-4 User Guide[EB/OL].http://www.xilinx.com,2006.

猜你喜欢
字符数据包时钟
二维隐蔽时间信道构建的研究*
别样的“时钟”
民用飞机飞行模拟机数据包试飞任务优化结合方法研究
古代的时钟
论高级用字阶段汉字系统选择字符的几个原则
字符代表几
一种USB接口字符液晶控制器设计
图片轻松变身ASCⅡ艺术画
C#串口高效可靠的接收方案设计
有趣的时钟