微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > SPI4.2总线应用和调试经验谈

SPI4.2总线应用和调试经验谈

时间:05-09 来源:互联网 点击:

引言

  SPI4.2总线(System Packet Interface,系统间数据包接口)是一种速度高达10 Gb/s的芯片间互连总线,主要应用于ATM信元传输、POS(Packet Over SONET/SDH,基于SONET/SDH的包传输)和10 Gb/s以太网等高端场合。特别在通信领域,很多高端处理器和网络处理器,如Intel公司的IXP2800、Cavium公司的多内核处理器CN58xx系列、NetLogic公司的XLR732、BrOAdcom的BCM1480,几乎都集成了SPI4.2接口,以提高芯片的吞吐能力,适应通信产业朝着LTE(长期演进)发展的需求。还有众多的物理层芯片,例如Cortina公司的CS1331,可以将SPI4.2总线转换成8个千兆以太网接口。SPI4.2总线之所以被众多的高端芯片所采用,与其高速、灵活、可靠的特性是密不可分的。

  1 SPI4.2总线基本原理

  SPI4.2总线是一种芯片间的互连总线,连接芯片的链路层和物理层模块。其工作时钟是源同步双边沿触发时钟,至少为311 MHz。图1是使用SPI4.2总线连接两个芯片的示意图。可见,SPI4.2总线的信号在发送和接收方向完全对称而又互相独立,数据链路和状态链路分开,并且其时钟也是完全分开的。因此,该总线不仅适合于双向通道,而且适合于只收不发或者只发不收的单向通道。


图1 SPI4.2连接示意图

  SPI4.2总线具有以下特点:

  ① 点对点互连,收发数据链路宽度为16位。

  ② 发送和接收模块的信号各分为两组,即数据信号和状态信号,分别对应数据链路和状态链路,每个链路具有自己的时钟。数据链路发送和接收数据,状态链路传输相应链路的状态信息。

  ③ 数据链路包含DCLK、DAT[15:0]和CTL三种LVDS(低压差分传输)信号。前面加“T”表示信号属于发送模块,加“R”表示信号属于接收模块。以发送模块为例,TDCLK是双边沿触发时钟,TCTL是控制信号,TDAT[15:0]承载了数据和控制信息。当TCTL为高电平时,TDAT[15:0]传送的是数据包;当TCTL为低电平时,TDAT[15:0]传送的是控制包。数据采用DIP4校验交织码。

  ④ 状态链路包括SCLK时钟信号和STAT[1:0]状态信号,信号类型是LVTTL或LVDS。SPI4.2 发送时序如图2所示。如果选择LVTTL,则SCLK时钟频率是数据链路时钟速率的1/4。如果选择LVDS,则SCLK时钟频率和数据链路时钟频率相同。下文中均以LVDS为例进行阐述。状态链路主要用于流控。

  ⑤ 接收和发送模块都含有一个FIFO队列,用于缓存数据,队列长度由芯片设计而定。队列的状态信息通过状态链路周期性地发送,接收模块和发送模块的状态信息是独立的。状态信息附加了DIP2交织校验码,以提高传输可靠性。


图2 SPI4.2 发送时序

  除了数据包中最后一段不满16字节的数据(EOP)之外,SPI4.2总线的数据实行突发传输,以16字节为单位(称为一个数据块),每次传输多个数据块。因为数据宽度是16位,所以一次突发传输至少需要4个时钟周期。数据的高地址位字节先发送(MSB),低地址位字节后发送,数据块传输过程中不会被中断。每次突发传输的间隔期间传送控制包或者训练序列。图2中,TDAT表示数据块,TCTRL表示控制块。控制包长度为16位,包含了前次传输和下次传输的状态信息:包开始标志、包结束标志、逻辑端口地址和DIP4交织校验码等。数据链路遵循有限状态机进行工作,状态包括5种:控制包传输、数据包传输、空闲包传输、训练序列传输以及训练序列控制[1]。

  因为状态链路的宽度是2位,所以每次突发传输至少传输16位数据(4个时钟周期)。反映FIFO队列的状态信息有3种:饱(Satisfied)、饿(Hungry)、极饿(Starving),分别对应二进制数字10、01和00。11表示链路处于失步状态,正在同步过程中。当状态是“饱”时,说明队列几乎满了,只接收当前正在传送的数据包,其他数据包只有等状态更新后才能接收。当状态是“饿”时,可以接收最大MaxBurst2个数据块。当状态是“极饿”时,说明队列几乎空了,可以接收最大MaxBurst1个数据块。MaxBurst1和MaxBurst2是SPI4.2总线初始化时设定的参数,MaxBurst1不得小于MaxBurst2。

  2 SPI4.2总线的初始化和同步

  SPI4.2总线初始化时必须设定一些基本参数,如表1所列。

SPI4.2总线协议定义了一个叫“日历”的数据结构CALENDAR[i](i=1,…,CALENDAR_LEN)。CALENDAR_LEN(日历长度)参数规定了逻辑端口(或称为虚拟通道)的数目,该数值不能小于实际的逻辑端口数目。例如,如果SPI4.2总线用于10 Gb/s以太网口,那么日历长度是1(即CALENDAR_LEN = 1);如果SPI4.2总线用于10个1 Gb/s以太网口,那么日历长度是10(CALENDAR_LEN = 10),CALENDAR[i] = 1,2,…,10,代表了10个以太网端口。CALENDAR[i

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top