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