摘 要 為了滿足存儲網(wǎng)絡和下一代航空電子系統(tǒng)對光纖通道網(wǎng)絡的需求,提出了一種新的光纖通道網(wǎng)絡接口控制芯片的設計方案。用 Verilog實現(xiàn)了接口控制芯片的RTL設計并完成了功能仿真和驗證,通過嵌入式PowerPC完成了接口控制芯片的控制軟件設計。以Xilinx公司的Virtex-II Pro系列FPGA為平臺,實現(xiàn)了接口控制芯片原型。
關鍵詞 光纖通道 FPGA 接口控制芯片 嵌入式 PowerPC
引 言
作為通道技術和網(wǎng)絡技術結合的產(chǎn)物,光纖通道(fibre channel)是一種具有高實時性、高可靠性、高帶寬,高性價比的開放式網(wǎng)絡。任何需要接入到光纖通道網(wǎng)絡的設備都需要相應的網(wǎng)絡接口卡(NAC),而網(wǎng)絡接口卡的核心是接口控制芯片。目前市場上商用的光纖通道接口控制芯片寥寥可數(shù)且價格昂貴,并且核心技術都掌握在國外公司;而軍用的光纖通道接口控制芯片更由于眾所周知的原因在市場上根本就買不到。因此,根據(jù)光纖通道標準設計出擁有自主知識產(chǎn)權的光纖通道網(wǎng)絡接口控制芯片,對于我國的經(jīng)濟和軍事發(fā)展具有極其重要的意義。
由于光纖通道標準是一簇十分龐大而復雜的協(xié)議,不同的特性適用于不同的應用環(huán)境;又因為光纖通道標準目前仍處于發(fā)展階段,標準的內(nèi)容還在做不停的變化,因此選用FPGA作為當前接口控制芯片的載體是一個非常合適的選擇。一方面對于不同的應用環(huán)境,可以對相應的功能模塊進行適當?shù)牟脺p,既能滿足應用需要又能降低成本;另一方面對于協(xié)議的變化,基于FPGA的實現(xiàn)也很容易就能對老版本設計進行更新。
1 協(xié)議分析
和OSI參考模型類似,光纖通道協(xié)議簇也是以分層的方式來組織各個協(xié)議的。其分層模型如圖1所示。
作為數(shù)據(jù)傳輸協(xié)議,光纖通道支持許多上層協(xié)議,包括VIA、SCSI、IPv4、IPv6、SBCCS、ASM等。在為這些協(xié)議傳輸數(shù)據(jù)之前,需要先將待發(fā)送的數(shù)據(jù)映射成規(guī)定的格式,F(xiàn)C-4層實現(xiàn)這一映射,對于每一個支持的上層協(xié)議,都有一個映射協(xié)議與之相對應。
FC-3層是一個通用服務層,為映射層協(xié)議提供一系列通用服務。比較重要的幾個服務包括:交換注冊、端口注冊和注銷服務。
FC-2層是光纖通道協(xié)議中最重要的一層,定義了將數(shù)據(jù)塊進行端到端傳輸?shù)囊?guī)則和機制,包括不同類型的服務、幀格式定義、序列的分片和重裝、交換管理、地址分配和多播管理等。
FC-1層定義了串行編碼和解碼規(guī)范,規(guī)定使用8B/10B編碼。
FC-0層是光纖通道協(xié)議的物理層規(guī)范,定義了發(fā)射機、接收機、傳輸介質以及它們之間的接口規(guī)范。傳輸速率也在這里定義。
2 設計方案
通過對協(xié)議的分析得出,映射層協(xié)議和具體應用環(huán)境密切相關,應該由用戶自己實現(xiàn)。接口控制芯片在邏輯上可以分成三部分,即通用服務模塊、端到端IU傳輸和緩沖到緩沖幀傳輸;在實現(xiàn)方式上又可以分為軟件部分和硬件部分。接口控制芯片系統(tǒng)框圖如圖2所示。
圖2左邊的PowerPC和存儲器控制器通過PLB總線互聯(lián)在一起,構建了Linux操作系統(tǒng)和接口控制芯片的軟件部分的運行平臺。
PowerPC架構中還包含了通用的OPB總線,用來進行外部設備的互聯(lián)。OPB總線通過一個PLB-OPB橋連接到PLB總線,如圖2右邊所示。連接到OPB總線的外部設備只有一個,也就是光纖通道傳輸核。
用戶接口定義了接口控制芯片的用戶接口。根據(jù)應用環(huán)境的不同,這個模塊有不同的實現(xiàn)方法,如PCI或USB。
當用戶有數(shù)據(jù)需要發(fā)送時,通過接口控制芯片的用戶接口將數(shù)據(jù)按標準格式存人芯片內(nèi)部的數(shù)據(jù)存儲器,并通過設置相應的寄存器請求接口控制芯片的數(shù)據(jù)傳輸服務。然后,軟件代碼將數(shù)據(jù)接管過來,先為這次數(shù)據(jù)(IU)傳輸分配相應的軟件資源(交換狀態(tài)塊、序列狀態(tài)塊等)用以記錄數(shù)據(jù)的發(fā)送狀態(tài)。等完成相應的處理后,PowerPC通過光纖通道傳輸核提供的接口通知傳輸核對數(shù)據(jù)進行處理,包括分片、成幀、CRC計算和8B/10B編碼等任務。最后,傳輸核通過輸出引腳輸出高速串行數(shù)據(jù)去調(diào)制光發(fā)射機并發(fā)送到光纖鏈路。
當從輸入鏈路上接收到數(shù)據(jù)時,傳輸核首先對數(shù)據(jù)進行處理,包括位同步、串并轉換、8B/10B解碼、字同步、有序集檢測、CRC校驗和幀提取。當有效幀接收到并存到接收緩沖區(qū)后,硬件模塊設置相應的寄存器通知Power-PC,然后PowerPC對接收到的幀進行處理,包括分配相應的軟件資源、幀重裝。當屬于一個序列的所有幀都正確接收完后,PowerPC通過用戶接口模塊通知用戶模塊,用戶模塊接收到數(shù)據(jù)后自行進行處理。
3 硬件設計
接口控制芯片的硬件部分也就是圖2中的光纖通道傳輸核,負責將數(shù)據(jù)幀按標準規(guī)定的格式從發(fā)送緩沖區(qū)傳輸?shù)芥溌妨硪欢说慕邮站彌_區(qū)。為了正確有效地完成這個任務,接口控制芯片的硬件部分實現(xiàn)以下一些功能:緩沖到緩沖的流量控制、鏈路級別的差錯檢測和恢復、字同步、有序集檢測、幀提取、8B/10B編解碼和串并/并串轉換等功能。接口控制芯片的硬件部分功能框圖如圖3所示。
3.1 發(fā)送控制邏輯
發(fā)送控制邏輯的功能是控制幀、原語信號和原語序列的發(fā)送順序,使之符合光纖通道標準,主要包括保證連續(xù)幀之間具有足夠的間隔和在幀之間插入原語信號。
發(fā)送幀的CRC值也由發(fā)送控制邏輯計算,傳統(tǒng)的串行計算方法達不到要求的速率,這里采用并行CRC算法進行計算,每個時鐘有效沿可以計算32位數(shù)據(jù),大大提高了數(shù)據(jù)吞吐量。
緩沖到緩沖流量控制也在發(fā)送控制邏輯中實現(xiàn)。發(fā)送控制邏輯維持一個計數(shù)器,表示當前已發(fā)送但還未被確認的幀的數(shù)目,每當發(fā)送1幀,計數(shù)器加1;當接收到 R_RDY原語信號時,計數(shù)器減1。如果這個值小于配置寄存器中的BB_Credit值,則表示可以繼續(xù)發(fā)送幀;否則,表明目標端口已經(jīng)沒有可用的接收緩沖區(qū),發(fā)送控制邏輯此時就不往外發(fā)出幀。
3.2 接收控制邏輯
8B/10B解碼出來的數(shù)據(jù)是字節(jié)數(shù)據(jù),而所有的有序集都是字,因此需要在輸入的字節(jié)流中正確區(qū)分出字邊界。接收控制邏輯內(nèi)部的字同步模塊和接收狀態(tài)機協(xié)同工作,實現(xiàn)這一功能。標準規(guī)定的接收機狀態(tài)轉換圖如圖4所示。
3.3 8B/1 0B編解碼
傳統(tǒng)的編解碼方法由數(shù)字邏輯實現(xiàn),主要是為了節(jié)省邏輯資源。由于FPGA內(nèi)含有豐富的RAM,使其作為編解碼的載體既可以降低復雜程度又可以提高編解碼的速度,待編碼的數(shù)據(jù)作為地址線輸人,編碼數(shù)據(jù)存在RAM內(nèi)從數(shù)據(jù)線輸出。
3.4 端口狀態(tài)機
作為鏈路級差錯檢測與恢復的核心,端口狀態(tài)機對收發(fā)鏈路的狀態(tài)進行監(jiān)測。每當鏈路狀態(tài)出現(xiàn)異常,端口狀態(tài)機就根據(jù)異常的起因啟動不同的鏈路恢復協(xié)議來對鏈路進行恢復。如果恢復失敗,那么端口狀態(tài)機就通過狀態(tài)寄存器向上層報告。出于版面的考慮,簡化的端口狀態(tài)機的狀態(tài)轉換圖如圖5所示。
3.5 其他模塊
異步FIFO:由于接口控制芯片的接收部分使用從接收數(shù)據(jù)中恢復出來的時鐘,因此和芯片的主時鐘是異步的。當將接收到的數(shù)據(jù)交給其他工作于主時鐘的模塊處理時需要進行速率調(diào)整。異步FIFO用于實現(xiàn)這個功能。串并/并串轉換:高速的串并轉換對器件性能有較高要求。FPGA內(nèi)部集成了專用的硬核 (RocketIO)用來實現(xiàn)這一功能,因此對其進行適當?shù)呐渲眉纯?。這樣節(jié)省了專用的串并轉換芯片。
配置寄存器存儲一系列的工作參數(shù),如(R_T_TOV、E_D_TOV等),復位后以默認值初始化寄存器。完成注冊后,使用新值更新寄存器。
光纖通道傳輸核通過狀態(tài)寄存器來表示自己當前所處的狀態(tài)(如在線、離線等)。
4 軟件設計
接口控制芯片的軟件部分負責進行參數(shù)協(xié)商和處理與端到端數(shù)據(jù)傳輸相關的事務,包括端口注冊和交換注冊、提供不同類型的服務、端到端流量控制、序列級差錯檢測和恢復。
為了簡化軟件的設計,以嵌人式Linux操作系統(tǒng)作為接口控制芯片的軟件運行環(huán)境。通過設計一系列的操作函數(shù),實現(xiàn)整個軟件系統(tǒng)。最重要的函數(shù)包括:端口注冊函數(shù)、IU發(fā)送函數(shù)和接收幀處理函數(shù)。
4.1 端口注冊函數(shù)PLogin_in()
注冊包含端口注冊和交換注冊。兩種注冊的流程類似,這里僅分析端口注冊。系統(tǒng)啟動后,需要對芯片的工作參數(shù)進行配置,注冊函數(shù)根據(jù)用戶的配置選擇注冊方式。如果用戶指定隱式注冊,那么注冊函數(shù)從配置文件中讀取默認配置參數(shù)配置芯片;如果用戶指定顯式注冊,那么注冊函數(shù)發(fā)送注冊請求,等對方端口返回響應后,注冊函數(shù)用響應的數(shù)據(jù)配置參數(shù)。端口注冊函數(shù)的工作流程如圖6所示。
4.2 IU發(fā)送函數(shù)Sen
4.3 接收幀處理函數(shù)Frm_Rcved()
當光纖通道傳輸核將正確的幀接收到并存儲于接收緩沖區(qū)后,通過狀態(tài)接口通知PowerPC。此時Frm_Rcved()函數(shù)開始處理幀頭,幀頭中需要檢查的參數(shù)很多,這里不在贅述。如果幀頭中的參數(shù)沒有錯誤,那么函數(shù)為這個新接收到的幀分配存儲空間,然后從接收緩沖區(qū)中將幀取到存儲器中,并以一定的方式和之前接收到的幀關聯(lián)起來(例如鏈表);如果幀頭中的參數(shù)有誤,則將幀丟棄并啟動中止序列協(xié)議進行序列恢復。
結 語
本文提出的方案以嵌入式技術和FPGA技術為基礎,使其具有極大的靈活性和可擴展性。在不同的應用環(huán)境中只需要對相應的軟硬件代碼進行適當?shù)牟脺p或擴展即可,無需對PCB電路進行任何更改,具有極其廣泛的應用價值。