光纤通道端口状态机的研究及FPGA实现
2011-03-06刘小刚
刘小刚,周 东
(电子科技大学 a.电子科学技术研究院;b.通信与信息工程学院,四川 成都 611731)
0 引言
光纤通道是一种系统和I/O设备之间高性能数据传输接口标准,其传输速率高、延迟低、可靠性高[1],同时综合了通道传输的高速性和网络传输的灵活性。国内对光纤通道技术的研究比国外晚,并且研究和开发光纤通道的硬件平台大都必须从国外进口。所以加大对光纤通道协议控制芯片和应用平台的研究,有利于未来国防建设和国民经济的发展。
在光纤通道协议控制器中,光纤通道端口(FC_Port)是基本的通信单元。只有当端口状态机处于激活状态时FC_Port才能发送和接收数据帧。而FC_Port上电、复位后端口会处于非激活状态,这就需要数据收发双方通过一套完整的机制使得端口从非激活状态转换到激活状态。现在研究光纤通道端口状态机工作原理的基础上,提出了一种基于FPGA的端口状态机实现方案,该端口状态机具有超时定时器、错误检测以及信用度管理功能,在遇到链路错误时能够自动执行相应的原语序列协议对链路进行恢复,增强了数据链路传输的可靠性。
1 端口状态机工作原理
端口状态机的核心是一个状态转移逻辑,表1规定了当前状态在各种输入条件下的跳转状态,第一行为当前状态,第一列为输入信号,表2规定了当前状态下应该发送的有序集[2]。光纤通道定义了一组有序集作为状态转移逻辑的输入,用于维持端口状态机的正常工作,常用的有序集有:
①LR,端口要发起链路复位协议,或者要从连接超时错误中恢复;
②LRR,端口正在接收和识别LR源语序列;
③IDLE,链路初始化完成,并且可以用作填充字用来维持链路同步;
④OLS,端口正在执行链路初始化协议、正在接收NOS源于序列,或者正要进入离线状态;
⑤NOS,端口探测到链路故障,或者端口处于离线状态而等待接收OLS原语序列。
原语序列协议由一组有序集组成,它有两种功能:通知另一端口链路上发生了某种错误;使链路两端的端口都复位从而进入某个确定的状态[2]。端口状态机应支持四种原语序列协议,它们分别是:
①链路初始化协议:当端口上电、内部复位、或者要从离线状态退出时执行该协议;
②链路复位协议:当链路链接需要恢复、链接超时、或者缓冲到缓冲溢出时执行该协议;
③链路故障协议:当失去同步超过时限、丢失信号、或者执行链路复位协议超时时执行该协议;
④上线至离线协议:当要降低功耗、或者因要诊断而从激活状态进入离线状态时执行该协议。
表1 端口状态转换表
表2 端口状态输出表
2 硬件逻辑设计思想
光纤通道协议控制器的组成如图1所示。端口状态机除了要实现表1和表2中的状态转移逻辑之外,还控制着发送通道、接收通道和接口控制逻辑。图2为端口状态机的实现,它主要由状态转移逻辑、定时器组、错误检测模块和信用度管理模块组成。
2.1 状态转移逻辑
状态转移逻辑的输出与当前状态和输入有关,其核心是一个9状态的Mealy型状态机[3],共需要4比特位进行编码。如图1所示,在光纤通道控制器中,帧发送通道负责发送来自端口状态机的原语序列和来自帧发送模块的数据帧,发送通道根据图2中的Channel信号选择数据源,Channel为高就发送原语序列,反之就发送数据帧。
图1 光纤通道控制器组成
如图2所示,当发送模块没有数据帧需要发送时,端口状态机使Channel置高,表明其正在使用发送通道,并且通过PriSeq发送IDLE填充字以保持链路的传输特性;端口状态机有更高的优先级,当端口当前状态PSM_State处于激活状态AC时,端口状态机才会让出通道使用权,使Channel置低。
图2 端口状态机设计
2.2 事件超时定时器组
事件超时是指在服务参数[4]中的R_T__TOV时间内没有收到回复,从表1可以看出事件超时是端口状态机中引起状态跳转的信号之一。当状态机到达某个状态时就启用该状态的事件超时定时器,如果在 R_T__TOV内没有收到应答信号,就会产生事件超时。这时状态机会进入LF2状态,并执行链路故障协议使端口最终复位至AC状态[5]。
四种原语序列协议涉及到的状态有 LR1、LR2、LR3、OL1、OL2和LF1,因此需要6个定时器。其核心是一个32位计数器,它的使能信号在进入当前状态时有效,并使其复位并开始计数。离开当前状态会使使能信号复位,当计数器到达R_T_TOV时就会产生事件超时输出。
2.3 错误检测
链接错误状态块(Link Error Status Block)记录着端口在运行期间遇到的各种错误,T11-FC-FS标准规定一个N端口在运行期间会遇到6种错误:链路故障错误、协议错误、同步丢失错误、信号丢失错误、无效传输字错误和无效CRC校验错误,而设计的端口状态机能够检测到其中前四种错误。表3描述了状态机能够检测到的各种错误情况,第一行为当前状态,第一列为输入信号,NL表示正常,PER表示协议错误,LF表示链路故障错误,SIG表示信号丢失错误,SYN表示失去同步错误。错误检测模块会根据状态转移逻辑的输出信号cstate、nstate和各输入信号判断是否有错误产生,错误检测模块的输出会送到图1中接口控制逻辑中的链接错误状态块,从而使其相应的错误计数器的值加一,同时端口状态机会跳转到相应的状态并执行对应的原语序列协议对链路进行恢复。
由表1和表3得知,当出现事件超时错误时,端口状态机会跳转到LR1状态,进而执行链路复位协议对链路进行恢复。当出现协议错误、同步丢失或信号丢失错误时,端口状态机会跳转到LF2状态,进而执行链路故障协议对链路进行恢复。
表3 链接错误管理
2.4 信用度管理
流控制在光纤通道中用于调整链路两端端口帧的发送速率,以避免溢出。光纤通道中有多种机制进行流控制,而不同类型的服务使用的流控制机制也不一样[6]。这里的端口状态机使用针对3类服务的流控制机制:BB_Credit_CNT和R_RDY。BB_Credit_CNT表示链路另一端端口当前已被占用的缓冲区个数。当接收到一帧数据,它就会加一,收到一个R_RDY就会减一;当BB_Credit_CNT等于BB_Credit时,表示对方没有可用的缓冲区用于接收数据帧,这时就应该停止发送数据帧以防止溢出。
在光纤通道控制器中,只有当端口状态机处于AC状态时,帧发送模块才能够申请发送通道的使用权。进入AC状态表明通信的两端口已执行完原语序列,这时双方的接收缓冲区都会清空。因此信用度管理模块的输出信号Reset_BB_Credit会送到发送通道,用于将 BB_Credit_CNT清零。
3 仿真结果
基于前面的分析,使用 Verilog描述语言对端口状态机进行了功能设计和仿真试验。试验中将2个端口状态机A和B进行互连,将各自的原语序列输出端连接到对方的原语序列输入端。如图3所示,端口状态机A和B上电之后都进入状态OL1(0110),然后两端口执行链路初始化协议,相继经过状态OL2(0111)、LR2(0010)和LR3(0011)最终到达AC(0000)状态。仿真试验中使端口状态机 A遇到无信用度的错误(NoCredit),这时两端口开始执行链路复位协议,并经过状态LR1(0001)、LR2(0010)和LR3(0011)后最终到达激活状态AC。
图3 端口状态机仿真结果
4 结语
提出了一种光纤通道端口状态机的设计方法,并根据光纤通道协议标准FC-FS-3实现了该设计。试验结果表明端口状态机功能正常,在各输入下能正确跳转并能输出相应的原语序列,在遇到错误或故障时能够执行相应的原语序列协议从而进行链路恢复,该端口状态机能成功地与其它模块互连组成光纤通道控制器。
[1] 林强,熊华刚,张其善.光纤通道综述[J].计算机应用研究,2006(02):9-13.
[2] Martin Siewa Logic.Fiber Channel Framing and Signaling[S].New York: American National Standards Institute, 2006.
[3] 夏宇闻.Verilog数字系统设计教程[M].北京:北京航空航天大学,2003:35-60.
[4] Robert Kembel.Fiber Channel-Link Services[S].New York:American National Standards Institute, 2007.
[5] 雷艳静,冯萍,曾小荟,等.光纤通道中N端口状态机OPNET建模[J].计算机工程与应用,2005(22):21-23.
[6] 蔡昭权,秦磊华.光纤通道流量控制协议性能分析与应用[J].通信技术,2008,41(05):111-112.