文獻標識碼: A
文章編號: 0258-7998(2013)01-0020-03
先進的電信計算平臺ATCA(Advanced Telecom Computing Architecture)是國際工業(yè)計算機制造者聯(lián)合會PICMG(PCI Industrial Computer Manufacturer's Group)標準歷史上最重大的革新。它的設計初衷是針對電信運營級應用,為下一代通信及數(shù)據(jù)網(wǎng)絡應用提供一個高性價比、模塊化、兼容性強、擴展性好的硬件構架,為新一代電信運營設備提供一個“可靠、可用、適用”的解決方案。
ATCA不僅能因其總線的開放性而降低電信設備總體部署成本,而且最大限度地提升了不同廠商產(chǎn)品之間的兼容性。ATCA設備在降低網(wǎng)絡建設和維護成本的同時,還可以通過更換板卡快速支持新應用和新業(yè)務,靈活性更強。由于這些優(yōu)點,ATCA架構不僅在電信運營領域得到了廣泛應用,也逐漸在儀器儀表、軍事和航空航天等領域受到關注。
1 多網(wǎng)口后板的設計所面臨的問題
符合ATCA標準的系統(tǒng)由一個或多個熱插拔線卡(即模塊)組成,這些線卡也稱為現(xiàn)場可替換單元FRU(Field Replacable Unit)。在基于ATCA的網(wǎng)絡設備中,為了提供數(shù)量多且性能高的網(wǎng)絡接口,往往在前板安裝先進的網(wǎng)絡處理器NPU(Network Process Unit)或CPU,而在同槽位的后板(RTM)上布置多個網(wǎng)絡接口連接器(如RJ45或者SFP插槽),用于連接外部網(wǎng)線或光纖。
RJ45接口最高支持1 000 Mb/s的以太網(wǎng)速率,接口電纜是銅電纜,不適應電信設備“光進銅退”的發(fā)展趨勢。而SFP(Small Form-factor Pluggable transceiver)插槽由于既能容納RJ45接口的電模塊(Copper SFP),也能容納FiberJack接口的光模塊(Fiber SFP),靈活性好,速率可達10 Gb/s,因此越來越得到設計師的青睞。但是如何管理這些SFP模塊,對設計師而言,在硬件和軟件方面,面臨如下問題:
(1)硬件方面:因為ATCA標準[1]規(guī)定,前板通往后板和背板的連接器分為3個區(qū)域:區(qū)域1、區(qū)域2和區(qū)域3。其中,區(qū)域1用于電源和管理信號,連接到背板;區(qū)域2負責前板之間的數(shù)據(jù)通路,也連接到后板;區(qū)域3用于前后板的連接,信號自定義,而前后板的連接無需經(jīng)過背板,采用共面互連技術。區(qū)域3最多允許安放3個高速連接器,因為前后板之間的連接信號數(shù)量有限,所以在利用這些互聯(lián)信號時需要精打細算。互連信號越少,就越能節(jié)省昂貴的高速連接器,降低產(chǎn)品成本。按照SFP標準[2],每個SFP模塊都提供了一個符合I2C標準的管理接口,通過I2C接口,系統(tǒng)可以獲得模塊的型號、參數(shù)和工作狀態(tài)等信息。
如果把每個模塊的I2C接口總線都連接到如圖1所示的前板,則會造成浪費。因為一個I2C接口需要占用2個互連引腳,I2C占用的互連引腳越多,留給其他模塊的互連引腳就越少,而實際上有相當多的互連引腳被用于傳輸以太網(wǎng)的收發(fā)信號,才能保證足夠的數(shù)據(jù)通路帶寬。
另外,所有同類型SFP模塊的I2C接口的器件地址都是相同的,而I2C標準[3]規(guī)定每條I2C總線上不能存在兩個相同的器件地址,所以當它們與CPU相連時,必須經(jīng)過I2C復用器(因為處理器通常沒有足夠的I2C總線接口)。I2C復用器可以采用專用的芯片實現(xiàn)(如PHILIPS公司的PCA9548A,支持將一個I2C接口擴展為8個I2C接口),也可以用CPLD或者FPGA實現(xiàn)。
(2)軟件方面:I2C是一種低速串行總線,頻率一般為100 kHz或400 kHz。以100 kHz為例,如果不考慮器件的響應時間,讀取一個字節(jié)大約耗費40個I2C時鐘周期(約0.4 ms)。因為處理器和I2C復用器之間只有一個I2C接口相連,處理器不得不通過逐個輪詢的方式去查詢各個SFP模塊的狀態(tài)變化,占用了大量的CPU資源;如果用中斷方式,SFP模塊標準中又沒有定義模塊的中斷引腳,硬件架構上不提供支持。所以,如何有效管理各個SFP模塊而又盡可能低地耗費CPU指令是軟硬件設計面對的一大難題。對以上問題,本文提出下面的優(yōu)化解決方案。
2 優(yōu)化的解決方案
為了解決硬件和軟件面臨的設計難題,本文從硬件架構入手,借助于CPLD或FPGA芯片,輔以高效的軟件設計,開發(fā)出了一套行之有效的解決方案。
2.1 硬件設計
為了減少I2C接口所占用的前后板互連引腳數(shù)目,本文將執(zhí)行I2C復用功能的芯片放到了后板上,這樣只有一條I2C總線通過互連區(qū)域3(即只占用2根互連引腳),極大地節(jié)省了互連引腳的數(shù)目。另一方面,I2C復用器不采用商業(yè)專用芯片,而是采用CPLD或者FPGA,可為軟件設計提供較佳的靈活性(如提供中斷機制)。在本設計中,采用了FPGA。
假設后板上安放了8個SFP插槽,與優(yōu)化前的設計相比,優(yōu)化后的設計節(jié)省了14個互連引腳。為了進一步提升處理器訪問后板SFP模塊的速率,本文用PCIe總線取代I2C總線,如圖2所示。連接FPGA和處理器,PCIe總線占用4根互連引腳,雖然比I2C總線多占2個引腳,但是速率提升到了2.5 Gb/s,遠高于I2C的速率,使處理器和I2C復用器之間的速率瓶頸問題得以解決。選擇PCIe的另一個好處是:如果采用中斷方式,則PCIe不需要專用的中斷引腳,因為它是依賴帶內(nèi)消息中斷的。此外,連接FPGA和8個SFP插槽的8組I2C總線互相獨立,所以FPGA可以并行地訪問8個SFP模塊,比串行訪問的效率提升了8倍。
2.2 軟件設計
如何處理高速處理器與低速外圍總線之間的關系,是軟件設計的主要任務。處理器的速度一般在幾百到上千兆赫茲,而I2C總線的速度一般最高為400 kHz(普通的只有100 kHz),兩者完全不在一個數(shù)量級上。所以,F(xiàn)PGA不但要承擔擴展I2C總線的任務,而且要承擔管理低速總線設備的任務,使處理器有更多的時間處理計算量大、優(yōu)先級高的任務。因此,軟件設計的主要工作在FPGA上。
FPGA中集成了2個成熟的IP核:一個是PCIe內(nèi)核,工作于從設備(End Point)模式,1路通道(x1 Lane);另一個是I2C內(nèi)核,工作于主設備(Master)模式,各條總線互相獨立。FPGA軟件的設計需要考慮兩方面的因素:一是高效,盡可能降低CPU的負擔;二是支持熱插拔,因為SFP模塊隨時都可能被插入或拔出,導致I2C總線上正在運行的協(xié)議隨時會被中斷而產(chǎn)生異常。
FPGA中的寄存器設計以及與SFP模塊之間的控制連線如圖3所示。根據(jù)SFP標準[2],每個模塊會引出一個存在(Prt)信號和一個使能(En)信號,F(xiàn)PGA中的使能(En)寄存器通過使能信號控制每個模塊是否工作。存在(Prt)寄存器通過讀取存在信號反映每個SFP插槽中是否插入了SFP模塊。重啟寄存器用于重啟各條I2C總線,特別是當I2C協(xié)議正在總線上運行時,模塊被突然拔出,I2C總線因為缺少客戶端的響應而產(chǎn)生異常,此時會在中斷狀態(tài)寄存器反映異常情況,并且自動重啟I2C總線,以便下次模塊插入時可以正常工作。CPU也可以主動設置指令寄存器來重啟某條I2C總線。
地址寄存器和數(shù)據(jù)寄存器成對出現(xiàn),每一對寄存器對應一條I2C總線。當處理器需要讀取SFP模塊內(nèi)的一個寄存器時,可以將寄存器地址設置到地址寄存器,再設置指令寄存器為讀操作。如果操作正常,則操作完成后,F(xiàn)PGA會把讀取的數(shù)據(jù)存放在對應的數(shù)據(jù)寄存器中;如果操作出現(xiàn)異常,則FPGA會設置中斷狀態(tài)寄存器的相關比特位反映異常情況;當處理器需要寫SFP模塊內(nèi)的一個寄存器時,先把待寫數(shù)據(jù)寫入數(shù)據(jù)寄存器,并將寄存器地址寫入地址寄存器,再設置指令寄存器為寫操作。如果寫操作異常,F(xiàn)PGA也會設置中斷狀態(tài)寄存器的相關比特位反映異常情況。
中斷狀態(tài)寄存器反映了每條I2C總線的工作狀態(tài)以及模塊本身的狀態(tài),例如:I2C總線工作是否正常、讀寫操作是否成功完成、模塊被拔出或者插入等。中斷屏蔽寄存器定義了各個狀態(tài)變化是否要觸發(fā)中斷上報機制。
指令寄存器在不同比特位針對每條I2C總線設置了讀、寫、輪詢和重啟4種指令(讀寫和重啟指令在前文中已有描述)。輪詢指令是指:如果SFP模塊存在且使能,則FPGA會不停地讀取SFP模塊中的寄存器(寄存器地址由地址寄存器指定),并將讀回的數(shù)據(jù)存放在數(shù)據(jù)寄存器中,供處理器隨時調用;同時可以設置中斷,如果本次讀的數(shù)值不同于上次讀的數(shù)值,則產(chǎn)生中斷并通知處理器。輪詢功能為系統(tǒng)軟件監(jiān)測后板對外的以太網(wǎng)接口的鏈路狀態(tài)提供了強大的支持。因為在系統(tǒng)運行過程中,以太網(wǎng)鏈路可能被斷開或連接,鏈接狀態(tài)隨時可能變化。例如,速率從百兆變?yōu)槭?,或從千兆變?yōu)榘僬?;模式從全雙工變?yōu)榘腚p工。
許多SFP模塊的鏈路狀態(tài)可以從其中的一個物理層狀態(tài)寄存器獲得。假設處理器通過直接輪詢這個寄存器來獲得鏈路信息。如果I2C工作頻率為100 kHz,則讀取一個寄存器耗時約0.4 ms(8個SFP模塊共耗費約3.2 ms);在一個主頻為1 GHz的處理器中,輪詢一次占用的CPU資源高達3 200 000個CPU時鐘周期,處理器為了及時獲得模塊和鏈路狀態(tài),不得不頻繁地(如每隔0.1 s)去輪詢一次,明顯降低了處理器的工作效率。然而,模塊和鏈路狀態(tài)不是一直在變化的,可能數(shù)小時或者幾周有一次變化,但是處理器如果不能及時捕獲這一次變化,就可能給系統(tǒng)運行造成致命的后果。例如鏈路斷開了沒有及時發(fā)現(xiàn),仍然誤認為連接,將導致實際業(yè)務的中斷。而為了偶然出現(xiàn)的一次狀態(tài)變化,而頻繁地去輪詢查看低速設備的狀態(tài),耗費大量的CPU資源是不值得的。
因此,在新的軟件設計中,由FPGA接管處理器的輪詢?nèi)蝿?,以中斷方式上報給處理器,使處理器只要在系統(tǒng)初始化時去獲得SFP模塊和鏈路狀態(tài),運行過程中幾乎不需要在I2C總線上浪費任何CPU資源。
另外,對某些中斷類型,例如模塊的插拔、鏈路狀態(tài)等,F(xiàn)PGA設計了防止“中斷風暴”的功能。“中斷風暴”是指短時間內(nèi)有大量的中斷產(chǎn)生,直接影響處理器的效率甚至業(yè)務。例如有時SFP模塊或網(wǎng)線沒有插緊或者對端設備的網(wǎng)線虛插,可能引發(fā)狀態(tài)的頻率變化,觸發(fā)大量中斷產(chǎn)生。
因為在系統(tǒng)軟件中,中斷的優(yōu)先級大于任何線程或任務,當中斷過多時,處理器就忙于處理中斷而無暇顧及正常的數(shù)據(jù)處理和業(yè)務。而FPGA會根據(jù)“中斷風暴寄存器”規(guī)定的時間間隔,統(tǒng)計相同類型的中斷數(shù)量,上報第一個發(fā)生的中斷和最后一個發(fā)生的中斷,隱瞞中間過程產(chǎn)生的中斷,從而提高了處理器效率。時間間隔的設置需要根據(jù)應用仔細權衡,一般設置為50 ms左右。此外,運行在處理器上的軟件發(fā)現(xiàn)某類中斷頻繁上報時,還可以通過設置中斷屏蔽寄存器禁止這類中斷,并輸出消息提醒用戶。
圖4是針對一個SFP模塊的FPGA的軟件流程。首先,F(xiàn)PGA讀入模塊的存在寄存器和使能寄存器,然后判斷模塊是否存在和使能,如果模塊不存在或者不使能則跳過;否則,根據(jù)指令寄存器中的指令進行相關操作。如果沒有設置指令,則跳過;如果是寫指令,則根據(jù)地址寄存器和數(shù)據(jù)寄存器的值進行寫操作;如果是讀指令,則根據(jù)地址寄存器中的數(shù)值進行讀操作,并將讀取的數(shù)值存放在數(shù)據(jù)寄存器中;如果設置了輪詢,則不斷地讀取設定的寄存器,更新數(shù)據(jù)寄存器中的數(shù)值。每種操作完成后都會調用中斷子程序,例如讀取存在寄存器后,F(xiàn)PGA會把當前數(shù)值和前一次的值進行比較,如果不同,則根據(jù)中斷屏蔽寄存器的設置觸發(fā)中斷;輪詢操作時數(shù)據(jù)寄存器的數(shù)值發(fā)生更新也可觸發(fā)中斷。
本設計采用軟、硬件相結合(包括SFP模塊頻繁插拔、鏈路狀態(tài)頻繁變化等),經(jīng)過長時間連續(xù)集成測試,同時觀察CPU的利用率,后板模塊管理任務所占的CPU利用率始終低于0.1%,而且處理器沒有漏過任何一次模塊和鏈路的狀態(tài)變化。測試證明,優(yōu)化后的設計不但可以長時間可靠工作,而且大幅度降低了處理器在管理多網(wǎng)口后板上的指令開銷,提高了處理器的利用率。本文介紹的優(yōu)化后的后板的軟、硬件設計架構不但適合于ATCA標準的后板,也可以應用到CompactPCI標準和其他自定義后板的設計中。
參考文獻
[1] PICMG.PICMG R3.0 advancedTCA base specification[Z]. 2008.
[2] SFF Committee.SFF-8472 specification for diagnostic monitoring interface for optical transceivers[EB/OL]Rev 11,2010.9,ftp://ftp.seagate.com/sff/SFF-8472.PDF.
[3] PHILIPS.The I2C-bus specification version 2.1[Z].2000.