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