引言
SpacewiTe是欧空局2003年提出的一种高速的、点对点、全双工的串行总线网络,面向空间应用。它以IEEE 1355—1995和LVDS标准为基础,提供了一种通用接口标准以简化和规范不同设备之间的互连,对解决目前星上数据处理系统的总线带宽不足有重要作用。而且,随着FPGA容量增大和功耗降低,以及内部软核的广泛应用,使用FPGA开发数字电路,可以缩短设计时间、减少PCB面积、提高系统的可靠性,FPGA已成为解决系统级设计的重要选择方案之一。本文在Actel的集成开发环境Libem下编写了HDL代码,利用内部集成仿真工具Mod—elSim对设计进行了时序仿真。
1、SpaceWire Codec接收端概述
SpaceWire标准饵CSS—E一50—12A)包括链路,节点和交换机三方面的内容。SpaceWire采用线路交换形式,节点是指传输包的流出设备或者流向设备,链路是指数据包传输的路径。
SpaceWire是总线数据网络结构,包括6层协议:物理层,信号层,字符层,交换层,信息包层和网络层。SpaceWire Codec实现的是信号层,字符层和交换层的相关内容。
SpaceWire物理层电缆采用九针微型D连接器.由四对双绞线组成,传输四对差分信号。
SpaceWire信号层用LVDS差分信号传输,抑制了共模噪声,保证了低电磁干扰。采用DS(data-strobe)编码实现嵌入式时钟总线传输,Ds编码用data信号表示实际传输的数据,strobe信号随D信号变化而编码,原则是在任一时钟周期Ds信号只有一个发生变化,这样DS信号异或就可得到接收端的时钟。如图1:
SpaceWire字符层定义了两种类型的字符:四个控制字符和数据字符,采用奇校验方式。
串行比特流各个字符之间没有分隔符,每个字符以奇偶检验位开始,第二位是ctrl—flag位,即区分数据字符和控制字符的标志,后面是不同的数据字符和控制字符。串行的比特流以包的形式传输,包以控制字符EOP标志结尾。
SpaceWire交换层定义了链路的初始化和状态机的运转,实现链路的拥塞控制,检测链路的断开等。
SpaceWire Codec由发送端,接收端和控制器组成,控制器根据接收端收到的不同数据字符控制状态机的运行,协调发送端和接收端的工作。
其中接收端实现时钟恢复,检测DS信号,判断并处理Data数据,进行奇偶校验,把数据字符送到fifo中,实现链路的拥塞控制,检测链路的断开状况等。这些功能的实现使用到不同的时钟,设计时需要解决多时钟域信号传输的同步问题。
在本设计中。SpaceWire Codec接收端按照功能不同划分为以下几个模块:
图2接收端模块划分
上图中的asyrst_n由epu复位信号和控制器的复位信号做组合逻辑得到。设计时用cpu配置链路状态,控制FPGA运行。数据字符经过6fo送到epu存储区中。
2、时钟域划分
上图中,虚线表示了不同的时钟域。
用恢复的时钟clk0进行Ds信号的检测和处理.在clk0时钟域内实现的是同步检测和设计。由于DS信号不能通过自身恢复得到的时钟去检测DS链路的断开.因此需要采用FPGA的pU模块倍频得到的高频时钟gclk 来检测链路的断开状_re况。在本设计中,拥塞控制要和发送端配合工作,发送端使用的是本地时钟gclk,因此链路拥塞控制模块也要用本地时钟gclk来控制。用cpu时钟clk_c读走fifo中数据,送到cpu存储区中。
3、复位信号处理
接收端模块的复位信号由cpu给出,链路状态机运行到复位状态也要对接收端进行复位。由于复位信号扇出很大,且要在不同的时钟域起作用.因此对复位信号的处理相当重要。
在接收端中,DS信号到来之前,DS信号检测和Data数据一处理模块的寄存器必须有确定的状态,这两个模块复位时clk0还没有出现,因此采用了不需要时钟控制的异步复位。
对复位信号而言,复位信号的释放和时钟沿之间也存在时间约束关系,如同触发器的D输入端必须满足建立和保持时间一样,复位信号相对时钟也必须满足recovery time/removalTIme。如图3所示,recovery TIme指复位信号无效电平相对时钟沿到来前的稳定时间,removal TIme指复位信号无效电平相对时钟沿到来后的稳定时间。
图3复位信号的recovery/removal TIme
4、 DS信号的检测
如图4示,恢复的clkO时钟是D信号频率的1/2,用clk0检测DS信号,必须用elk0的上沿和下沿实现,如下图所示:
图4 DS信号的检测
clk0是DS组合逻辑得到的门控时钟,且clk0的扇出很大,上沿和下沿都要用到,布局布线时将它放在全局时钟bu雎r上,保证了clkO有最小的抖动和偏移。
5 、data数据处理
SpaceWire总线定义的串行数据的最大特点是各个不同的数据之间没有分割字符。处理数据时不仅要对本次数据格式进行正确判断和校验,并且要根据判读和检验结果指出下一个data起始位,否则下一个数据的判断将会出现错误。
设计中采取了串行移位寄存器的方法,设置了5个两位的寄存器。在同—个cIkO周期内能看到串行数据线上的10位串行数据,根据不同数据位进行判读和奇偶校验。正确判读后,根据不同的data数据长度.分别用不同的ready信号指示下—个data的起始位,进而进行下一个数据格式的处理。
这些信号都是clkO时钟域的同步信号,且移位寄存器间没有长路径延时,这样可以保证数据处理模块的稳定运行。
6 、多时钟设计
接收端不同的时钟域产生的信号是异步信号,信号传输时需要同步到不同的时钟域。数据信号通过fifo传输,控制信号在标志位同步模块中实现同步到gclk时钟域。
在链路被动启动时,接收端收到NULL信号后,给出异got—NULL标志,使link_enabh信号有效,链路由ready状态进入started状态,因此gotNULL信号电平有效。gotNULL信号由clkO时钟域的DS数据处理模块给出,需要同步到FPGA的本地时钟域。电平同步通常用两个D触发器构成同步器,第一级触发器在采样输入信号时可能进入亚稳态,后面的触发器获得前一个触发器输出时,前一个触发器已退出了亚稳态,并且输出已稳定.极大地减小了亚稳态的发生。
其他的标志位信号,如gotDATA、gotFCT、gotEOP、gotEEP等都是脉冲有效,这些信号的同步是在电平同步的基础上做组合逻辑实现的,如图5所示:
图5电平信号gotDATA的同步
在信号同步中,第二级寄存器的输出是稳定可用的,把第二级的输出再延迟一拍,对gotDATA_2和gotDATA_3寄存器的输出做组合逻辑,实现了一个gclk周期的有效电平。在时序允许的情况下,打一拍输出,实现了脉冲有效信号的同步。
链路检测模块在gclk_re时钟域实现,根据协议要求,当离上一次DS信号出现850m后没有Ds数据出现,则认为链路断开。该模块给出的链路断开标志link_dis相对gclk时钟,是快时钟域信号,为了便于信号同步,link_dis标志输出电平而非脉冲。
7、结束语
本文介绍了SpaeeWire Codec接收端的时序设计,给出了各个不同模块的时钟域划分,门控时钟和复位信号的有效处理,以及对串行数据的检测和判读,多时钟域信号的同步等实现方法。
本文作者创新点:对多时钟域复位信号采用了对应时钟域的异步复位同步释放方法;对串行总线数据判读采用了串行移位寄存器的方法,便于数据的正确识别。对嵌入式时钟总线传输的接收端设计有一定的参考意义。