劉小剛,周 東
(電子科技大學 a.電子科學技術(shù)研究院;b.通信與信息工程學院,四川 成都 611731)
光纖通道是一種系統(tǒng)和I/O設備之間高性能數(shù)據(jù)傳輸接口標準,其傳輸速率高、延遲低、可靠性高[1],同時綜合了通道傳輸?shù)母咚傩院途W(wǎng)絡傳輸?shù)撵`活性。國內(nèi)對光纖通道技術(shù)的研究比國外晚,并且研究和開發(fā)光纖通道的硬件平臺大都必須從國外進口。所以加大對光纖通道協(xié)議控制芯片和應用平臺的研究,有利于未來國防建設和國民經(jīng)濟的發(fā)展。
在光纖通道協(xié)議控制器中,光纖通道端口(FC_Port)是基本的通信單元。只有當端口狀態(tài)機處于激活狀態(tài)時FC_Port才能發(fā)送和接收數(shù)據(jù)幀。而FC_Port上電、復位后端口會處于非激活狀態(tài),這就需要數(shù)據(jù)收發(fā)雙方通過一套完整的機制使得端口從非激活狀態(tài)轉(zhuǎn)換到激活狀態(tài)?,F(xiàn)在研究光纖通道端口狀態(tài)機工作原理的基礎上,提出了一種基于FPGA的端口狀態(tài)機實現(xiàn)方案,該端口狀態(tài)機具有超時定時器、錯誤檢測以及信用度管理功能,在遇到鏈路錯誤時能夠自動執(zhí)行相應的原語序列協(xié)議對鏈路進行恢復,增強了數(shù)據(jù)鏈路傳輸?shù)目煽啃浴?/p>
端口狀態(tài)機的核心是一個狀態(tài)轉(zhuǎn)移邏輯,表1規(guī)定了當前狀態(tài)在各種輸入條件下的跳轉(zhuǎn)狀態(tài),第一行為當前狀態(tài),第一列為輸入信號,表2規(guī)定了當前狀態(tài)下應該發(fā)送的有序集[2]。光纖通道定義了一組有序集作為狀態(tài)轉(zhuǎn)移邏輯的輸入,用于維持端口狀態(tài)機的正常工作,常用的有序集有:
①LR,端口要發(fā)起鏈路復位協(xié)議,或者要從連接超時錯誤中恢復;
②LRR,端口正在接收和識別LR源語序列;
③IDLE,鏈路初始化完成,并且可以用作填充字用來維持鏈路同步;
④OLS,端口正在執(zhí)行鏈路初始化協(xié)議、正在接收NOS源于序列,或者正要進入離線狀態(tài);
⑤NOS,端口探測到鏈路故障,或者端口處于離線狀態(tài)而等待接收OLS原語序列。
原語序列協(xié)議由一組有序集組成,它有兩種功能:通知另一端口鏈路上發(fā)生了某種錯誤;使鏈路兩端的端口都復位從而進入某個確定的狀態(tài)[2]。端口狀態(tài)機應支持四種原語序列協(xié)議,它們分別是:
①鏈路初始化協(xié)議:當端口上電、內(nèi)部復位、或者要從離線狀態(tài)退出時執(zhí)行該協(xié)議;
②鏈路復位協(xié)議:當鏈路鏈接需要恢復、鏈接超時、或者緩沖到緩沖溢出時執(zhí)行該協(xié)議;
③鏈路故障協(xié)議:當失去同步超過時限、丟失信號、或者執(zhí)行鏈路復位協(xié)議超時時執(zhí)行該協(xié)議;
④上線至離線協(xié)議:當要降低功耗、或者因要診斷而從激活狀態(tài)進入離線狀態(tài)時執(zhí)行該協(xié)議。
表1 端口狀態(tài)轉(zhuǎn)換表
表2 端口狀態(tài)輸出表
光纖通道協(xié)議控制器的組成如圖1所示。端口狀態(tài)機除了要實現(xiàn)表1和表2中的狀態(tài)轉(zhuǎn)移邏輯之外,還控制著發(fā)送通道、接收通道和接口控制邏輯。圖2為端口狀態(tài)機的實現(xiàn),它主要由狀態(tài)轉(zhuǎn)移邏輯、定時器組、錯誤檢測模塊和信用度管理模塊組成。
狀態(tài)轉(zhuǎn)移邏輯的輸出與當前狀態(tài)和輸入有關(guān),其核心是一個9狀態(tài)的Mealy型狀態(tài)機[3],共需要4比特位進行編碼。如圖1所示,在光纖通道控制器中,幀發(fā)送通道負責發(fā)送來自端口狀態(tài)機的原語序列和來自幀發(fā)送模塊的數(shù)據(jù)幀,發(fā)送通道根據(jù)圖2中的Channel信號選擇數(shù)據(jù)源,Channel為高就發(fā)送原語序列,反之就發(fā)送數(shù)據(jù)幀。
圖1 光纖通道控制器組成
如圖2所示,當發(fā)送模塊沒有數(shù)據(jù)幀需要發(fā)送時,端口狀態(tài)機使Channel置高,表明其正在使用發(fā)送通道,并且通過PriSeq發(fā)送IDLE填充字以保持鏈路的傳輸特性;端口狀態(tài)機有更高的優(yōu)先級,當端口當前狀態(tài)PSM_State處于激活狀態(tài)AC時,端口狀態(tài)機才會讓出通道使用權(quán),使Channel置低。
圖2 端口狀態(tài)機設計
事件超時是指在服務參數(shù)[4]中的R_T__TOV時間內(nèi)沒有收到回復,從表1可以看出事件超時是端口狀態(tài)機中引起狀態(tài)跳轉(zhuǎn)的信號之一。當狀態(tài)機到達某個狀態(tài)時就啟用該狀態(tài)的事件超時定時器,如果在 R_T__TOV內(nèi)沒有收到應答信號,就會產(chǎn)生事件超時。這時狀態(tài)機會進入LF2狀態(tài),并執(zhí)行鏈路故障協(xié)議使端口最終復位至AC狀態(tài)[5]。
四種原語序列協(xié)議涉及到的狀態(tài)有 LR1、LR2、LR3、OL1、OL2和LF1,因此需要6個定時器。其核心是一個32位計數(shù)器,它的使能信號在進入當前狀態(tài)時有效,并使其復位并開始計數(shù)。離開當前狀態(tài)會使使能信號復位,當計數(shù)器到達R_T_TOV時就會產(chǎn)生事件超時輸出。
鏈接錯誤狀態(tài)塊(Link Error Status Block)記錄著端口在運行期間遇到的各種錯誤,T11-FC-FS標準規(guī)定一個N端口在運行期間會遇到6種錯誤:鏈路故障錯誤、協(xié)議錯誤、同步丟失錯誤、信號丟失錯誤、無效傳輸字錯誤和無效CRC校驗錯誤,而設計的端口狀態(tài)機能夠檢測到其中前四種錯誤。表3描述了狀態(tài)機能夠檢測到的各種錯誤情況,第一行為當前狀態(tài),第一列為輸入信號,NL表示正常,PER表示協(xié)議錯誤,LF表示鏈路故障錯誤,SIG表示信號丟失錯誤,SYN表示失去同步錯誤。錯誤檢測模塊會根據(jù)狀態(tài)轉(zhuǎn)移邏輯的輸出信號cstate、nstate和各輸入信號判斷是否有錯誤產(chǎn)生,錯誤檢測模塊的輸出會送到圖1中接口控制邏輯中的鏈接錯誤狀態(tài)塊,從而使其相應的錯誤計數(shù)器的值加一,同時端口狀態(tài)機會跳轉(zhuǎn)到相應的狀態(tài)并執(zhí)行對應的原語序列協(xié)議對鏈路進行恢復。
由表1和表3得知,當出現(xiàn)事件超時錯誤時,端口狀態(tài)機會跳轉(zhuǎn)到LR1狀態(tài),進而執(zhí)行鏈路復位協(xié)議對鏈路進行恢復。當出現(xiàn)協(xié)議錯誤、同步丟失或信號丟失錯誤時,端口狀態(tài)機會跳轉(zhuǎn)到LF2狀態(tài),進而執(zhí)行鏈路故障協(xié)議對鏈路進行恢復。
表3 鏈接錯誤管理
流控制在光纖通道中用于調(diào)整鏈路兩端端口幀的發(fā)送速率,以避免溢出。光纖通道中有多種機制進行流控制,而不同類型的服務使用的流控制機制也不一樣[6]。這里的端口狀態(tài)機使用針對3類服務的流控制機制:BB_Credit_CNT和R_RDY。BB_Credit_CNT表示鏈路另一端端口當前已被占用的緩沖區(qū)個數(shù)。當接收到一幀數(shù)據(jù),它就會加一,收到一個R_RDY就會減一;當BB_Credit_CNT等于BB_Credit時,表示對方?jīng)]有可用的緩沖區(qū)用于接收數(shù)據(jù)幀,這時就應該停止發(fā)送數(shù)據(jù)幀以防止溢出。
在光纖通道控制器中,只有當端口狀態(tài)機處于AC狀態(tài)時,幀發(fā)送模塊才能夠申請發(fā)送通道的使用權(quán)。進入AC狀態(tài)表明通信的兩端口已執(zhí)行完原語序列,這時雙方的接收緩沖區(qū)都會清空。因此信用度管理模塊的輸出信號Reset_BB_Credit會送到發(fā)送通道,用于將 BB_Credit_CNT清零。
基于前面的分析,使用 Verilog描述語言對端口狀態(tài)機進行了功能設計和仿真試驗。試驗中將2個端口狀態(tài)機A和B進行互連,將各自的原語序列輸出端連接到對方的原語序列輸入端。如圖3所示,端口狀態(tài)機A和B上電之后都進入狀態(tài)OL1(0110),然后兩端口執(zhí)行鏈路初始化協(xié)議,相繼經(jīng)過狀態(tài)OL2(0111)、LR2(0010)和LR3(0011)最終到達AC(0000)狀態(tài)。仿真試驗中使端口狀態(tài)機 A遇到無信用度的錯誤(NoCredit),這時兩端口開始執(zhí)行鏈路復位協(xié)議,并經(jīng)過狀態(tài)LR1(0001)、LR2(0010)和LR3(0011)后最終到達激活狀態(tài)AC。
圖3 端口狀態(tài)機仿真結(jié)果
提出了一種光纖通道端口狀態(tài)機的設計方法,并根據(jù)光纖通道協(xié)議標準FC-FS-3實現(xiàn)了該設計。試驗結(jié)果表明端口狀態(tài)機功能正常,在各輸入下能正確跳轉(zhuǎn)并能輸出相應的原語序列,在遇到錯誤或故障時能夠執(zhí)行相應的原語序列協(xié)議從而進行鏈路恢復,該端口狀態(tài)機能成功地與其它模塊互連組成光纖通道控制器。
[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數(shù)字系統(tǒng)設計教程[M].北京:北京航空航天大學,2003:35-60.
[4] Robert Kembel.Fiber Channel-Link Services[S].New York:American National Standards Institute, 2007.
[5] 雷艷靜,馮萍,曾小薈,等.光纖通道中N端口狀態(tài)機OPNET建模[J].計算機工程與應用,2005(22):21-23.
[6] 蔡昭權(quán),秦磊華.光纖通道流量控制協(xié)議性能分析與應用[J].通信技術(shù),2008,41(05):111-112.