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