SPI42接口协议分析.docx

上传人:b****1 文档编号:10756720 上传时间:2023-05-27 格式:DOCX 页数:36 大小:1.56MB
下载 相关 举报
SPI42接口协议分析.docx_第1页
第1页 / 共36页
SPI42接口协议分析.docx_第2页
第2页 / 共36页
SPI42接口协议分析.docx_第3页
第3页 / 共36页
SPI42接口协议分析.docx_第4页
第4页 / 共36页
SPI42接口协议分析.docx_第5页
第5页 / 共36页
SPI42接口协议分析.docx_第6页
第6页 / 共36页
SPI42接口协议分析.docx_第7页
第7页 / 共36页
SPI42接口协议分析.docx_第8页
第8页 / 共36页
SPI42接口协议分析.docx_第9页
第9页 / 共36页
SPI42接口协议分析.docx_第10页
第10页 / 共36页
SPI42接口协议分析.docx_第11页
第11页 / 共36页
SPI42接口协议分析.docx_第12页
第12页 / 共36页
SPI42接口协议分析.docx_第13页
第13页 / 共36页
SPI42接口协议分析.docx_第14页
第14页 / 共36页
SPI42接口协议分析.docx_第15页
第15页 / 共36页
SPI42接口协议分析.docx_第16页
第16页 / 共36页
SPI42接口协议分析.docx_第17页
第17页 / 共36页
SPI42接口协议分析.docx_第18页
第18页 / 共36页
SPI42接口协议分析.docx_第19页
第19页 / 共36页
SPI42接口协议分析.docx_第20页
第20页 / 共36页
亲,该文档总共36页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

SPI42接口协议分析.docx

《SPI42接口协议分析.docx》由会员分享,可在线阅读,更多相关《SPI42接口协议分析.docx(36页珍藏版)》请在冰点文库上搜索。

SPI42接口协议分析.docx

SPI42接口协议分析

SPI-4.2协议分析

一.SPI-4.2协议简介:

SPI-4.2协议的全称为SystemPacketInterface,可译为“系统包接口”。

该协议由OIF(OpticalInternetwokingForum)创建,用于规定10Gbps聚合带宽应用下的物理层(PHY)和链路层(Link)之间的数据抱传输协议,支持多通道的包或信元传输。

适用于OC-192,ATM,POS以及10G以太网。

1.系统模型:

SPI-4.2系统参考模型如图1所示,我们把从链路层到物理层的数据方向,称为“发送”方向;而从物理层到链路层的数据方向,称为“接收”方向。

在两个方向上,都存在数据流控制(流控)机制,流控数据传输方向和数据传输方向相反,把接收端的状态信息实时地反映到发射端,用来调节控制发射端的数据传输。

图1.SPI-4.2系统参考模型图

在发送与接收方向,FIFO信息(流控数据)都是和相应得数据通路之间分开独立发送的,我们称之为带外传输。

状态信息的带外传输使得发送和接收接口相互独立,这就使得SPI4.2接口不仅适合于双向传输的链路层器件,也适合于单向传输的应用。

另外,数据包的地址、描述信息(包括包结束、包开始信息等)、差错控制编码都是和数据一起,进行带内传输。

SPI-4.2支持多通道(Port)传输。

一个通道,是指接收或发送方向上,相互传输数据的一对关联的实体。

如果有很多对关联的实体(即很多个通道),都在同时传输数据,它们可复用SPI总线。

最多可支持256个通道(由流控数据内的地址位[11:

4]确定)。

例如OC-192的192个STS-1通道,快速以太网中的100个通道等,各个通道的数据都可以相互独立地复用在SPI总线上传输。

2.协议特点:

A.点对点互连(PHY与LINK之间);

B.支持最大256个通道;

C.数据链路宽度为16位,LVDS差分I/O接口;线上最小数据速率为622Mbps;

D.数据链路内部携带地址、起始标志和验证码等;

E.使用源同步时钟,双沿采样,最小时钟频率为311MHz;

F.流控端口宽度为2位,LVDS或LVTTL端口,同样是使用源同步时钟;

G.接收模块和发射模块都有FIFO队列,用于缓存数据,队列长度由设计确定;

H.接收模块和发射模块FIFO状态信息相互独立,并附带DIP-2校验码,提高传输可靠性。

另外,SPI4.2接口的突发数据(Burst)可以按规定的最大长度、最小长度或固定长度进行传输,除非在数据末尾有EOP(EndOfPacket)标志以外,突发数据的长度都必须是16Byte的倍数。

每一次传输的附带信息(端口地址,起止标志,差错控制)以16bit的控制字(PC=PayloadControl)发送。

图2显示了数据包(Packet)和ATM信元两个数据通道复用到SPI总线上的数据流的示例图,从中我们可以看到不同通道的数据负载和控制字交替传输的情况。

图2.数据包映射图

3.接口信号:

SPI-4.2的接口信号如图3所示,包含发送数据总线接口(TDCLK,TDAT[15:

0],TCTL)和接收数据总线接口(RDCLK,RDAT[15:

0],RCTL)。

发送FIFO状态总线接口(TSCLK,TSTAT[1:

0]),接收FIFO状态总线接口(RSCLK,RSTAT[1:

0])。

接收和发送两个方向完全类似。

每个方向的信号线都包括数据总线和状态总线。

以接收方向为例,数据总线包括RDAT,RDCLK和RCTL,其中RDAT为16比特的数据线,RDCLK为与RDAT、RCTL的同步的源同步时钟,RCTL为控制信号线。

RDCLK为双沿采样的时钟,在上升沿和下降沿RDAT和RCTL分别表示不同的数据。

当RCTL为1时,表示RDAT上的当前传输的是控制字;当RCTL为0时,表示当前传输的是实际所需数据。

状态总线为RSTAT和RSCLK,其中RSCLK为源同步时钟,对RSTAT进行采样;RSTAT为2比特的状态线,用于传输接收方向的目标FIFO的状态,主要用于流控(flowcontrol)。

图3.接口信号图

数据总线(包括R/TDCLK、R/TDAT、R/TCTL)只能使用LVDS电平标准;状态总线(包括R/TSCLK、R/TSTAT)可以使用LVTTL电平标准,也可使用LVDS电平标准。

当使用LVTTL电平标准时,时钟频率不超过数据总线的1/4(通常取1/4或1/8);当使用LVDS电平标准时,最大时钟频率可以和数据总线频率一致。

接口的信号列表见表1。

表1接口信号列表

信号

方向

描述

TDCLK

Link—〉PHY

发送数据采样同步时钟

双沿采样、驱动TDAT和TCTL

TDAT[15:

0]

Link—〉PHY

发送数据

传输从Link到PHY的载荷数据和带内控制字。

TCTL

Link—〉PHY

1:

TDAT[15:

0]上为控制字

0:

TDAT[15:

0]上为数据

TSCLK

PHY—〉Link

TSTAT采样同步时钟

TSTAT[1:

0]

PHY—〉Link

传输轮循的FIFO状态信息以及相关的错误侦测和成帧

RDCLK

PHY—〉Link

接收数据采样同步时钟

用其上升和下降沿来采样和驱动RDAT和RCTL

RDAT[15:

0]

PHY—〉Link

接收数据

传输从PHY到Link的载荷数据和带内控制字

RCTL

PHY—〉Link

1:

RDAT[15:

0]上为控制字

0:

RDAT[15:

0]上为数据

RSCLK

Link—〉PHY

RSTAT采样同步时钟

RSTAT[1:

0]

Link—〉PHY

传输轮循的FIFO状态信息以及相关的错误侦测和成帧

二.接口详述:

SPI-4.2接口包含数据总线(DataPath)和状态总线(FIFOStatusChannel)两大部分,下面就针对两部分分别进行介绍。

1.数据总线(DataPath):

数据总线中TDAT/RDAT、TDCLK/RDCLK和TCTL/RCTL相互之间的关系见图4。

从图中可以看出:

时钟和DAT/CTL同步。

总线上传输的数据分为两类:

一类为需传输的数据负载(payload),一类用于控制负载传输的字节,称为控制字(Controlwords)。

我们可以通过R/TCTL的电平情况来区分数据总线上传输的是是数据负载,还是控制字。

当R/TCTL为高电平时,数据线上传输的是控制字;当R/TCTL为低电平时,数据线上传输的是正常数据。

在传输控制字时,如果下一个周期仍然是控制字,则当前控制字为IDLE控制字。

图4.数据总线时序图

A.数据负载:

数据负载为16位,其在总线上传输时,高8位为低字节,低8位传送高字节。

如图5所示,其中图(a)包含奇数个字节的数据包负载传输的字节顺序,无效的字节“XX”一般设置为零,图(b)为包含偶数个字节的数据包负载传输的字节顺序。

(a)(b)

图4.负载传输顺序

数据负载包的最大、最小长度由具体的应用决定。

但是,每次数据突发,通常必须为16字节(8个周期)的整数倍。

只有一种情况例外,即当前数据包已传输到数据的最末尾。

也就是说,仅仅带包终止标志(EOP)控制字的前一个数据突发可以不是16字节的整数倍。

从数据包传输的角度来看,数据突发只能暂时停止在包的16字节整数倍的边界处,或停止在数据包结束处。

图5.SOP间距示意图

注:

S:

SOP有效的控制字

E:

EOP有效的控制字

ES:

SOP、EOP有效的控制字

I:

idle控制字

C:

连续传输控制字(bit[15:

12]=8)

EC:

EOP有效,设置连续传输的控制字

P0,P1……:

载荷数据字节

对于每一通道,其数据在总线上传输时,包起始标志(SOP)控制字的间隔不能少于8个周期(每个周期为两个字节(16比特),可以传输一个控制字或者数据字),短包之间的间隙(gap)用idle控制字来填充。

也就是说,连续传输两个数据包时,这两个数据包的起始位置至少要相隔8个周期。

图5上部列出了单通道情况,针对不同包长时,数据在总线上的排列情况。

上面所说的8个周期限制仅仅是针对单个通道传输数据而言,当多个通道复用总线时,多个通道之间的控制字和数据字相互独立,没有相互关系,也没有限制。

在图5左下角,在不同通道的数据负载之间只有连续传输控制字,这样可以让更多的数据能够立即被传输,提高了传输效率。

上面提到的多通道传输。

是指在某个时间段内,总线上在传输这个通道的数据;在下一个时间段,总线上在传输另外一个通道的数据。

每一段数据,称为一次数据突发(Burst);两次数据突发之间,以控制字(EC)分隔,并表征前后两次突发数据的状态。

同时,有关通道的信息也内嵌在控制字中。

B.控制字:

控制字用于控制负载数据的传输,表征负载数据的状态,在接收和发送方向使用相同的控制字。

在整个传输的数据流中,控制字既表示了该控制字前一段连续负载的状态,同时也表示了后一段连续负载的状态。

每个控制字由两个字节组成,为总线上一个周期传输的数据。

包括以下几个控制域:

a)类型(Type):

表示后一周期的数据,为负载数据,还是一个IDLE周期。

b)包结束标志(EOPS):

表示前一个周期的数据为数据包的最后一个周期。

c)包超始标志(SOP):

表示下一个周期的数据为数据包的第一个周期。

d)通道地址(ADR):

表示后一段连续负载数据所属的通道。

e)校验和(DIP-4):

校验和,保证控制字和数据传输的正确性。

这几个控制域在16比特中的分布如图6所示:

图6.控制字的控制域分布图

其中EOPS为两比特,除表示数据结束的含义之外,还可以用来表示数据包结束时的两个字节,是仅有一个字节有效(11),还是两个字节都有效(10)。

通道地址为8比特,因此可以支持256个通道的数据传输。

详细说明见表2、表3,举例说明见表4。

表2控制字格式描述表

Bit位

标签

描述

15

Type

控制字类型

1:

载荷控制字(控制字后将立即发送载荷)

0:

idle或者训练控制字

14:

13

EOPS

EOP状态,与前一个采样周期的payload传输状态有关

00:

非EOP

01:

EOP中止(特定应用的错误状态)

10:

EOP正常终止,2byte有效

11:

EOP正常终止,1byte有效

在一个burst的首个控制字中EOPS也是合理的,但是他不会被设置或者设置为“00”

12

SOP

SOP状态

1:

控制字后立即会有payload传输

0:

其他情况

在idle和训练控制字中全部设为“0”

11:

4

ADR

端口地址

8bit的载荷数据的端口地址,无保留地址

Idle中设为全“0”

训练序列中设为全“1”

3:

0

DIP-4

4-bit的对角线隔行校验位

4-bit的奇校验,通过计算当前控制字和紧邻的数据字(前1控制字后面的数据字内容,无数据字则不计算)

表3控制字类型列表

Bit[15:

12]

下一个字状态

前一个字状态

意义

0

0000

Idle

Continued

Idle,非EOP,训练控制字

1

0001

Reserved

Reserved

Reserved

2

0010

Idle

EOP

w/abort

Idle,中止前一个包

3

0011

Reserved

Reserved

Reserved

4

0100

Idle

EOP

w/2bytes

Idle,EOP,2字节有效

5

0101

Reserved

Reserved

Reserved

6

0110

Idle

EOP

w/1byte

Idle,EOP,1字节有效

7

0111

Reserved

Reserved

Reserved

8

1000

Valid

None

Valid,无SOP,无EOP

9

1001

Valid/SOP

None

Valid,SOP,无EOP

A

1010

Valid

EOP

w/abort

Valid,无SOP,中止

B

1011

Valid/SOP

EOP

w/abort

Valid,SOP,中止

C

1100

Valid

EOP

w/2byte

Valid,无SOP,EOP,2字节有效

D

1101

Valid

EOP

w/2byte

Valid,SOP,EOP,2字节有效

E

1110

Valid

EOP

w/1byte

Valid,无SOP,EOP,1字节有效

F

1111

Valid

EOP

w/1byte

Valid,SOP,EOP,1字节有效

表4控制字举例

控制字

描述

011000000000abcd

Idle控制字,位于数据传输之后,正常终止,上次传输最后一个数据字中1byte有效(abcd为校验,与此控制字和前一个数据有关)

0000000000001111

Idle控制字,前一个也为idle控制字

110100000101abcd

载荷控制字位于上次传输之后,正常终止,上次传输最后一个数据字中2byte有效(abcd为校验,与此控制字和前一个数据有关)下一个数据传输到5端口

C.状态跳变:

前面分别介绍了数据负载和控制字,下面介绍二者之间的关系变化。

图7显示了连续周期的数据通路上的状态转换。

“DataBurst”后的状态转换(转换至“PayloadControl”(如果有数据等待传输),或者“IdleControl”(其他情况))条件只能为接收到了8个周期的整数倍数据(等同于16Byte整数倍的数据段)或者接收到了包结束标志EOP。

“PayloadControl”状态后必须跟着“DataBurst”(除非支持控制字扩展功能,这里不讨论)。

其中的训练数据字和训练控制字会在后面介绍。

图7(a).数据通路状态转换图

图7(b).负载数据/控制字的有效序列

图7(b)所示为负载数据及控制字的有效序列。

图中最下面一行为有效的控制字编码,编码为控制字的[15:

12]位的内容,左下标为EOP标志,右下标为SOP标志。

进行数据突发时称为ACTIVE,不传输数据或发送训练序列时称为IDLE。

由IDLE至ACTIVE的控制字没有左下标,这是由于控制字之间没有数据突发,故不需要EOP标志;由ACTIVE至IDLE的控制字没有右下标,这是由于控制字之后没有数据突发,故不需要SOP标志。

由ACTIVE经过8、E、C和A四个控制字时,继续进行数据突发传输;经过9、E、D和B四个控制字时,继续进一个新数据包的突发传输;经过0、6、4和2结束数据包传输,进入到IDLE。

由IDLE经过8、9继续或开始数据包的突发传输,进入到ACTIVE;经过0仍然处于IDLE,或发送训练序列。

训练序列包括10个周期的TC(TrainingControl)和10个周期的TD(TrainingData)。

图8.单通道状态跳转图

每个通道在总线上传输数据时可分为三个状态:

激活状态(ACTIVE):

表示当前正在发送数据;

暂停状态(PAUSED):

表示当前未发送数据,但有数据包尚未发送完成;

未激活状态(INACTIVE):

表示当前未发送数据,且无未完成的数据包。

图8为单个通道在各种控制字作用下的状态跳转图。

状态机的跳转过程如下:

a)通道n可以从INACTIVE跳转到ACTIVE状态,其条件是PC[n]&SOP,即控制字为控制通道n(控制字中的地址域值为n)且为包的起始(控制字的SOP域为1,表示包开始)。

此时,开始传输一个数据包。

b)控制字为(IC|PC[~n])&EOP时,即IDLE控制字或其它通道的payload控制字,且EOP为1时,从ACTIVE状态跳到INACTIVE状态。

此时,一个数据包的传输结束,总线不再被通道n占用。

c)控制字为PC[n]&EOP&SOP时,即通道n的控制字且既包括EOP也包括SOP时,从ACTIVE状态跳转到ACTIVE状态。

此时,当前数据包传输结束,继续传送下一个数据包。

d)控制字为PC[n]&~EOP&~SOP时,即通道n的控制字且既不包括EOP也不包括SOP时,从ACTIVE状态跳到ACTIVE状态。

此时,继续传输当前数据包。

e)控制字为(IC|PC[~n])&~EOP时,即IDLE控制字或其它通道的payload控制字,且EOP不为1时,从ACTIVE状态跳到PAUSED状态。

此时,当前数据包的传输被中断。

f)控制字为PC[n]&~OP时,即通道n的payload控制字且包括SOP时,从PAUSED状态跳到ACTIVE状态。

此时,中断的数据包传输被恢复。

2.状态总线(FIFOStatusChannel):

SPI-4.2的流控功能是通过状态总线实现的。

接收模块和发射模块上都有FIFO缓存队列,以接收方向为例,即物理层(PHY)至链路层(Link)的方向上,数据由物理层送至链路层,在链路层的每个通道中,数据被送入到FIFO缓存。

链路层将FIFO的状态通过状态总线RSTAT反馈给物理层,物理层观察到FIFO的状态之后,控制自己发送数据的速率,从而实现流控功能。

在发送方向上,也是使用相同的流控机制。

如图9所示,为利用FIFO状态的反馈进行流控的结构图。

图9.FIFO状态进行流程控制图

FIFO的状态在RSTAT上传输,RSTAT为2比特,FIFO有三种状态,分别用“00”,“01”和“10”表示,“11”用于特殊用途,如表示DISABLE或帧边界等状态。

FIFO的状态含义如表5所示。

简单来说,“10”表示FIFO进入几乎满状态,只能写入少量的数据;“00”表示处于快要空的状态,需马上写入数据,否则将导致FIFO下溢,“01”表示某个中间状态。

对应每一个状态,都在一个所谓的“分值”(Credits),表示接收到该状态后,FIFO还可以容纳多少个16字节。

其中MaxBurst1必须大于或等于MaxBurst2,有关MaxBurst值及分值的含义请参考“流控分值”一节。

表5FIFO信号定义列表

MSB

LSB

意义

1

1

Reserved

保留字或者用来表示链接非使能状态

1

0

Satisfied

表明相应的端口FIFO几乎是满的状态,当satisfied接收到时,只有紧邻的上次16byte的数据块可以继续发送出去,其余数据在FIFO状态变化之前禁止发送

0

1

Hungry

当Hungry接收到时,在FIFO状态变化之前只有紧邻的上次准许发送的数据块(不论大小)或者最多MaxBurst2个16byte的数据可以继续发送出去,其余数据在FIFO状态变化之前禁止发送

0

0

Starving

表明相应PHY端口的Buffer即将清空,当接收到Starving状态时,在下一个端口状态改变前,可以发送MaxBurst1个16byte的数据块

在SPI-4.2的数据总线中有多个通道的数据在传输;同样,在状态总线中,多个通道的FIFO状态在状态总线上传输。

数据总线中,通过控制字表征每次数据突发的状态及数据属于哪个通道;在状态总线上,直接采用轮流的方式发送各个通道的FIFO状态。

各个FIFO的状态,通过一个控制序列进行发送,这个序列称为日历序列(CalendarSequence),该序列的长度称为日历长度,标识为CALENDAR_LEN。

日历序列的值为通道号,在状态总线上,根据日历序列的值来确定发送第几个通道的状态。

例如CALENDAR_LEN=4,日历序列的值为:

CALENDAR[i]=1,2,3,4。

那么在状态总线上首先发送通道1的FIFO状态,下一个周期再发送通道2的FIFO状态,再下一个周期为通道3的FIFO状态,然后是通道4的FIFO状态;再然后继续循环从通道1的状态开始发送。

为了使状态总线的接收方能够定位这些轮流发送过来的FIFO状态的起始位置,使用“11”作为帧首定界符,使用DIP-2值为帧尾定界符。

帧首和帧尾之间为FIFO的状态,由于状态帧周期性发送,只要连续定位足够多的“11”和DIP-2值,就可以确定帧的边界,从而得到各个FIFO的状态。

在帧首和帧尾之间,通常会按照日历序列重复多次发送FIFO状态,这个重复的次数标记为CALENDAR_M。

那么,在帧首和帧尾之间的状态个数为:

CALENDAR_LEN×CALENDAR_M。

(a)

(b)

图10.FIFO状态发送跳变图

图10状态总线的FIFO状态发送跳转图,其中(a)为没有训练序列的LVTTL/LVDS接口模式,(b)为有训练序列的LVDS接口模式。

FIFO状态发送方最初处理DISABLE的工作状态,不停地发送“11”;当使用后,进入SYNC状态,发送一个周期的“11”,然后进入到CALENDAR状态,根据CALENDAR_LEN、CANLENDAR_M值,和日历序列,发送多个通道的FIFO状态;再回到DIP-2状态,发送前述数据的DIP-2值。

从DIP-2状态再回到SYNC状态,如此循环往复。

对于流控,SPI-4.2协议有如下规定:

1)“接收”方向,即PHY到LINK方向的实现是可选的;“发送”方向,即LINK到PHY方向的实现是必须的。

若都进行了实现,相互之间应该完全独立地工作。

2)CALENDAR_LEN至少应该与通道数相等,通常应设置为所有通道的总速率除以最低速率的通道速率的商。

例如对于OC-192应用,其中存在VC-3通道,可设置其值为192。

具体计算方式见下面例子。

3)某个通道在日历序列中出现的次数,与这个通道的速率成正比。

4)当某个通道多次出现在日历序列中,应使这些值以大致相等的间隔排列在日历序列中,这样可以使状态接收方均匀地收到FIFO状态,更好地进行流控(见图11)。

5)同一个传输方向上接收端和发射端的CALENDAR_LEN,CALENDAR_M值和日历序列CALENDER[i],必须分别配置为完全相同的值。

6)MaxBurst1和MaxBurst2的值,可以设置为所有通道使用相同的值,也可以为每个通道指定不同的值。

但对于SPI-4.2的“接收”方向或“发送”方面,PHY和LINK层必须配置为相同的值。

7)在LVDS接口模式下,CALENDAR_LEN,CALENDAR_M的乘积必须不小于16,以便区分状态信息和训练序列。

图11.日历长度和重复次数都为4的数据传输示意图

以下为几种日历序列配置的例子:

1)单个OC-192或10Gbps以太通道:

CALENDAR_LEN=1,CALENDAR[1]=1;

2)四个OC-48通道:

CALENDAR_LEN=1,CALENDAR[i]=1,2,3,4;

3)两个OC-48通道,八个OC-12通道(通道3至10),CALENDAR_LEN=16,CALENDAR[i]=1,2,3,4,1,2,5,6,1,2,7,8,1,2,9,10,另外一种可行的方法为:

CALENDAR[i]=1,3,2,4,1,5,2,6,1,7,2,8,1,9,2,10;

4)10个1Gbps以太端口

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2