【VS开发】PCIe体系结构的组成部件
PCIe總線作為處理器系統(tǒng)的局部總線,其作用與PCI總線類似,主要目的是為了連接處理器系統(tǒng)中的外部設(shè)備,當(dāng)然PCIe總線也可以連接其他處理器系統(tǒng)。在不同的處理器系統(tǒng)中,PCIe體系結(jié)構(gòu)的實現(xiàn)方法略有不同。但是在大多數(shù)處理器系統(tǒng)中,都使用了RC、Switch和PCIe-to-PCI橋這些基本模塊連接PCIe和PCI設(shè)備。在PCIe總線中,基于PCIe總線的設(shè)備,也被稱為EP(Endpoint)。
4.2.1 基于PCIe架構(gòu)的處理器系統(tǒng)
在不同的處理器系統(tǒng)中,PCIe體系結(jié)構(gòu)的實現(xiàn)方式不盡相同。PCIe體系結(jié)構(gòu)以Intel的x86處理器為藍(lán)本實現(xiàn),已被深深地烙下x86處理器的印記。在PCIe總線規(guī)范中,有許多內(nèi)容是x86處理器獨有的,也僅在x86處理器的Chipset中存在。在PCIe總線規(guī)范中,一些最新的功能也在Intel的Chipset中率先實現(xiàn)。本節(jié)將以一個虛擬的處理器系統(tǒng)A和PowerPC處理器為例簡要介紹RC的實現(xiàn),并簡單歸納RC的通用實現(xiàn)機制。
1 處理器系統(tǒng)A
在有些處理器系統(tǒng)中,沒有直接提供PCI總線,此時需要使用PCIe橋,將PCIe鏈路轉(zhuǎn)換為PCI總線之后,才能連接PCI設(shè)備。在PCIe體系結(jié)構(gòu)中,也存在PCI總線號的概念,其編號方式與PCI總線兼容。一個基于PCIe架構(gòu)的處理器系統(tǒng)A如圖4?7所示。
在上圖的結(jié)構(gòu)中,處理器系統(tǒng)首先使用一個虛擬的PCI橋分離處理器系統(tǒng)的存儲器域與PCI總線域。FSB總線下的所有外部設(shè)備都屬于PCI總線域。與這個虛擬PCI橋直接相連的總線為PCI總線0。這種架構(gòu)與Intel的x86處理器系統(tǒng)較為類似。
在這種結(jié)構(gòu)中,RC由兩個FSB-to-PCIe橋和存儲器控制器組成。值得注意的是在圖4?7中,虛擬PCI橋的作用只是分離存儲器域與PCI總線域,但是并不會改變信號的電氣特性。RC與處理器通過FSB連接,而從電氣特性上看,PCI總線0與FSB兼容,因此在PCI總線0上掛接的是FSB-to-PCIe橋,而不是PCI-to-PCIe橋。
在PCI總線0上有一個存儲器控制器和兩個FSB-to-PCIe橋。這兩個FSB-to-PCIe橋分別推出一個×16和×8的PCIe鏈路,其中×16的PCIe鏈路連接顯卡控制器(GFX),其編號為PCI總線1;×8的PCIe鏈路連接一個Switch進(jìn)行PCIe鏈路擴展。而存儲器控制器作為PCI總線0的一個Agent設(shè)備,連接DDR插槽或者顆粒。
此外在這個PCI總線上還可能連接了一些使用“PCI配置空間”管理的設(shè)備,這些設(shè)備的訪問方法與PCI總線兼容,在x86處理器的Chipset中集成了一些內(nèi)嵌的設(shè)備。這些內(nèi)嵌的設(shè)備使用均使用“PCI配置空間”進(jìn)行管理,包括存儲器控制器。
PCIe總線使用端到端的連接方式,因此只有使用Switch才能對PCIe鏈路進(jìn)行擴展,而每擴展一條PCIe鏈路將產(chǎn)生一個新的PCI總線號。如圖4?7所示,Switch可以將1個×8的PCIe端口擴展為4個×2的PCIe端口,其中每一個PCIe端口都可以掛接EP。除此之外PCIe總線還可以使用PCIe橋,將PCIe總線轉(zhuǎn)換為PCI總線或者PCI-X總線,之后掛接PCI/PCI-X設(shè)備。多數(shù)x86處理器系統(tǒng)使用這種結(jié)構(gòu)連接PCIe或者PCI設(shè)備。
在PCIe總線規(guī)范中并沒有明確提及PCIe主橋,而使用RC概括除了處理器之外的所有與PCIe總線相關(guān)的內(nèi)容。在PCIe體系結(jié)構(gòu)中,RC是一個很模糊也很混亂的概念。Intel使用PCI總線的概念管理所有外部設(shè)備,包括與這些外部設(shè)備相關(guān)的寄存器,因此在RC中包含一些實際上與PCIe總線無關(guān)的寄存器。使用這種方式有利于系統(tǒng)軟件使用相同的平臺管理所有外部設(shè)備,也利于平臺軟件的一致性,但是仍有其不足之處。
2 PowerPC處理器
PowerPC處理器掛接外部設(shè)備使用的拓?fù)浣Y(jié)構(gòu)與x86處理器不同。在PowerPC處理器中,雖然也含有PCI/PCIe總線,但是仍然有許多外部設(shè)備并不是連接在PCI總線上的。在PowerPC處理器中,PCI/PCIe總線并沒有在x86處理器中的地位。在PowerPC處理器中,還含有許多內(nèi)部設(shè)備,如TSEC(Three Speed Ethenet Controller)和一些內(nèi)部集成的快速設(shè)備,與SoC平臺總線直接相連,而不與PCI/PCIe總線相連。在PowerPC處理器中,PCI/PCIe總線控制器連接在SoC平臺總線的下方。
Freescale即將發(fā)布的P4080處理器,采用的互連結(jié)構(gòu)與之前的PowerPC處理器有較大的不同。P4080處理器是Freescale第一顆基于E500 mc內(nèi)核的處理器。E500 mc內(nèi)核與之前的E500 V2和V1相比,從指令流水線結(jié)構(gòu)、內(nèi)存管理和中斷處理上說并沒有本質(zhì)的不同。E500mc內(nèi)核內(nèi)置了一個128KB大小的L2 Cache,該Cache連接在BSB總線上;而E500 V1/V2內(nèi)核中并不含有L2 Cache,而僅含有L1 Cache而且與FSB直接相連。在E500mc內(nèi)核中,還引入了虛擬化的概念。在P4080處理器中,一些快速外部設(shè)備,如DDR控制器、以太網(wǎng)控制器和PCI/PCIe總線接口控制器也是直接或者間接地連接到CoreNet中,在P4080處理器,L3 Cache也是連接到CoreNet中。P4080處理器的拓?fù)浣Y(jié)構(gòu)如圖4?8所示。
目前Freescale并沒有公開P4080處理器的L1、L2和L3 Cache如何進(jìn)行Cache共享一致性。多數(shù)采用CoreNet架構(gòu)互連的處理器系統(tǒng)使用目錄表法進(jìn)行Cache共享一致性,如Intel的Nehelem EX處理器。P4080處理器并不是一個追求峰值運算的SMP處理器系統(tǒng),而針對Data Plane的應(yīng)用,因此P4080處理器可能并沒有使用基于目錄表的Cache一致性協(xié)議。在基于全互連網(wǎng)絡(luò)的處理器系統(tǒng)中如果使用“類總線監(jiān)聽法”進(jìn)行Cache共享一致性,將不利于多個CPU共享同一個存儲器系統(tǒng),在Cache一致性的處理過程中容易形成瓶頸。
如圖4?8所示,P4080處理器的設(shè)計重點并不是E500mc內(nèi)核,而是CoreNet。CoreNet內(nèi)部由全互連網(wǎng)絡(luò)組成,其中任意兩個端口間的通信并不會影響其他端口間的通信。與MPC8548處理器相同,P4080處理器也使用OceaN[1]結(jié)構(gòu)連接PCIe與RapidIO接口。
在P4080處理器中不存在RC的概念,而僅存在PCIe總線控制器,當(dāng)然也可以認(rèn)為在P4080處理器中,PCIe總線控制器即為RC。P4080處理器內(nèi)部含有3個PCIe總線控制器,如果該處理器需要連接更多的PCIe設(shè)備時,需要使用Switch擴展PCIe鏈路。
在P4080處理器中,所有外部設(shè)備與處理器內(nèi)核都連接在CoreNet中,而不使用傳統(tǒng)的SoC平臺總線[2]進(jìn)行連接,從而在有效提高了處理器與外部設(shè)備間通信帶寬的同時,極大降低了訪問延時。此外P4080處理器系統(tǒng)使用PAMU(Peripheral Access Management Unit)分隔外設(shè)地址空間與CoreNet地址空間。在這種結(jié)構(gòu)下,10GE/1GE接口使用的地址空間與PCI總線空間獨立。
P4080處理器使用的PAMU是對MPC8548處理器ATMU的進(jìn)一步升級。使用這種結(jié)構(gòu)時,外部設(shè)備使用的地址空間、PCI總線域地址空間和存儲器域地址空間的劃分更加明晰。在P4080處理器中,存儲器控制器和存儲器都屬于一個地址空間,即存儲器域地址空間。此外這種結(jié)構(gòu)還使用OCeaN連接SRIO[3]和PCIe總線控制器,使得在OCeaN中的PCIe端口之間[4]可以直接通信,而不需要通過CoreNet,從而減輕了CoreNet的負(fù)載。
從內(nèi)核互連和外部設(shè)備互連的結(jié)構(gòu)上看,這種結(jié)構(gòu)具有較大的優(yōu)勢。但是采用這種結(jié)構(gòu)需要使用占用芯片更多的資源,CoreNet的設(shè)計也十分復(fù)雜。而最具挑戰(zhàn)的問題是,在這種結(jié)構(gòu)之下,Cache共享一致性模型的設(shè)計與實現(xiàn)。在Boxboro EX處理器系統(tǒng)中,可以使用QPI將多個處理器系統(tǒng)進(jìn)行點到點連接,也可以組成一個全互連的處理器系統(tǒng)。這種結(jié)構(gòu)與P4080處理器使用的結(jié)構(gòu)類似,但是Boxboro EX處理器系統(tǒng)包含的CPU更多。
3 基于PCIe總線的通用處理器結(jié)構(gòu)
在不同的處理器系統(tǒng)中,RC的實現(xiàn)有較大差異。PCIe總線規(guī)范并沒有規(guī)定RC的實現(xiàn)細(xì)則。在有些處理器系統(tǒng)中,RC相當(dāng)于PCIe主橋,也有的處理器系統(tǒng)也將PCIe主橋稱為PCIe總線控制器。而在x86處理器系統(tǒng)中,RC除了包含PCIe總線控制器之外,還包含一些其他組成部件,因此RC并不等同于PCIe總線控制器。
如果一個RC中可以提供多個PCIe端口,這種RC也被稱為多端口RC。如MPC8572處理器的RC可以直接提供3條PCIe鏈路,因此可以直接連接3個EP。如果MPC8572處理器需要連接更多EP時,需要使用Switch進(jìn)行鏈路擴展。
而在x86處理器系統(tǒng)中,RC并不是存在于一個芯片中,如在Montevina平臺中,RC由MCH和ICH兩個芯片組成。本節(jié)并不對x86和PowerPC處理器使用的PCIe總線結(jié)構(gòu)做進(jìn)一步討論,而只介紹這兩種結(jié)構(gòu)的相同之處。一個通用的,基于PCIe總線的處理器系統(tǒng)如圖4?9所示。
上圖所示的結(jié)構(gòu)將PCIe總線端口、存儲器控制器等一系列與外部設(shè)備有關(guān)的接口都集成在一起,并統(tǒng)稱為RC。RC具有一個或者多個PCIe端口,可以連接各類PCIe設(shè)備。PCIe設(shè)備包括EP(如網(wǎng)卡、顯卡等設(shè)備)、Switch和PCIe橋。PCIe總線采用端到端的連接方式,每一個PCIe端口只能連接一個EP,當(dāng)然PCIe端口也可以連接Switch進(jìn)行鏈路擴展。通過Switch擴展出的PCIe鏈路可以繼續(xù)掛接EP或者其他Switch。
4.2.2 RC的組成結(jié)構(gòu)
RC是PCIe體系結(jié)構(gòu)的一個重要組成部件,也是一個較為混亂的概念。RC的提出與x86處理器系統(tǒng)密切相關(guān)。事實上,只有x86處理器才存在PCIe總線規(guī)范定義的“標(biāo)準(zhǔn)RC”,而在多數(shù)處理器系統(tǒng),并不含有在PCIe總線規(guī)范中涉及的,與RC相關(guān)的全部概念。
不同處理器系統(tǒng)的RC設(shè)計并不相同,在圖4?7中的處理器系統(tǒng)中,RC包括存儲器控制器、兩個FSB-to-PCIe橋。而在圖4?8中的PowerPC處理器系統(tǒng)中,RC的概念并不明晰。在 PowerPC處理器中并不存在真正意義上的RC,而僅包含PCIe總線控制器。
在x86處理器系統(tǒng)中,RC內(nèi)部集成了一些PCI設(shè)備、RCRB(RC Register Block)和Event Collector等組成部件。其中RCRB由一系列“管理存儲器系統(tǒng)”的寄存器組成,而僅存在于x86處理器中;而Event Collector用來處理來自PCIe設(shè)備的錯誤消息報文和PME消息報文。RCRB寄存器組屬于PCI總線域地址空間,x86處理器訪問RCRB的方法與訪問PCI設(shè)備的配置寄存器相同。在有些x86處理器系統(tǒng)中,RCRB在PCI總線0的設(shè)備0中。
RCRB是x86處理器所獨有的,PowerPC處理器也含有一組“管理存儲器系統(tǒng)”的寄存器,這組寄存器與RCRB所實現(xiàn)的功能類似。但是在PowerPC處理器中,該組寄存器以CCSRBAR寄存器為基地址,處理器采用存儲器映像方式訪問這組寄存器。
如果將RC中的RCRB、內(nèi)置的PCI設(shè)備和Event Collector去除,該RC的主要功能與PCI總線中的HOST主橋類似,其主要作用是完成存儲器域到PCI總線域的地址轉(zhuǎn)換。但是隨著虛擬化技術(shù)的引入,尤其是引入MR-IOV技術(shù)之后,RC的實現(xiàn)變得異常復(fù)雜。
但是RC與HOST主橋并不相同,RC除了完成地址空間的轉(zhuǎn)換之外,還需要完成物理信號的轉(zhuǎn)換。在PowerPC處理器的RC中,來自O(shè)CeaN或者FSB的信號協(xié)議與PCIe總線信號使用的電氣特性并不兼容,使用的總線事務(wù)也并不相同,因此必須進(jìn)行信號協(xié)議和總線事務(wù)的轉(zhuǎn)換。
在P4080處理器中,RC的下游端口可以掛接Switch擴展更多的PCIe端口,也可以只掛接一個EP。在P4080處理器的RC中,設(shè)置了一組Inbound和Outbound寄存器組,用于存儲器域與PCI總線域之間地址空間的轉(zhuǎn)換;而P4080處理器的RC還可以使用Outbound寄存器組將PCI設(shè)備的配置空間直接映射到存儲器域中。PowerPC處理器在處理PCI/PCIe接口時,都使用這組Inbound和Outbound寄存器組。
在P4080處理器中,RC可以使用PEX_CONFIG_ADDR與PEX_CONFIG_DATA寄存器對 EP進(jìn)行配置讀寫,這兩個寄存器與MPC8548處理器HOST主橋的PCI_CONFIG_ADDR和PCI_CONFIG_DATA寄存器類似,本章不再詳細(xì)介紹這組寄存器。
而x86處理器的RC設(shè)計與PowerPC處理器有較大的不同,實際上和大多數(shù)處理器系統(tǒng)都不相同。x86處理器賦予了RC新的含義,PCIe總線規(guī)范中涉及的RC也以x86處理器為例進(jìn)行說明,而且一些在PCIe總線規(guī)范中出現(xiàn)的最新功能也在Intel的x86處理器系統(tǒng)中率先實現(xiàn)。在x86處理器系統(tǒng)中的RC實現(xiàn)也比其他處理器系統(tǒng)復(fù)雜得多。深入理解x86處理器系統(tǒng)的RC對于理解PCIe體系結(jié)構(gòu)非常重要。
4.2.3 Switch
本篇在第4.1.4節(jié),簡單介紹了在PCIe總線中,如何使用Switch進(jìn)行鏈路擴展,本節(jié)主要介紹Switch[5]的內(nèi)部結(jié)構(gòu)。從系統(tǒng)軟件的角度上看,每一個PCIe鏈路都占用一個PCI總線號,但是一條PCIe鏈路只能連接一個PCI設(shè)備,Switch、EP或者PCIe橋片。PCIe總線使用端到端的連接方式,一條PCIe鏈路只能連接一個設(shè)備。
一個PCIe鏈路需要掛接多個EP時,需要使用Switch進(jìn)行鏈路擴展。一個標(biāo)準(zhǔn)Switch具有一個上游端口和多個下游端口。上游端口與RC或者其他Switch的下游端口相連,而下游端口可以與EP、PCIe-to-PCI-X/PCI橋或者下游Switch的上游端口相連。
PCIe總線規(guī)范還支持一種特殊的連接方式,即Crosslink連接方式。使用這種方式時,Switch的下游端口可以與其他Switch的下游端口直接連接,上游端口也可以其他Switch的上游端口直接連接。在PCIe總線規(guī)范中,Crosslink連接方式是可選的,并不要求PCIe設(shè)備一定支持這種連接方式。
在PCIe體系結(jié)構(gòu)中,Switch的設(shè)計難度僅次于RC,Switch也是PCIe體系結(jié)構(gòu)的核心所在。而從系統(tǒng)軟件的角度上看,Switch內(nèi)部由多個PCI-to-PCI橋組成,其中每一個上游和下游端口都對應(yīng)一個虛擬PCI橋。在一個Switch中有多個端口,在其內(nèi)部就有多少個虛擬PCI橋,就有多少個PCI橋配置空間。值得注意的是,在Switch內(nèi)部還具有一條虛擬的PCI總線,用于連接各個虛擬PCI橋,系統(tǒng)軟件在初始化Switch時,需要為這條虛擬PCI總線編號。Switch的組成結(jié)構(gòu)如圖4?10所示。
Switch[6]需要處理PCIe總線傳輸過程中的QoS問題。PCIe總線的QoS要求PCIe總線區(qū)別對待優(yōu)先權(quán)不同的數(shù)據(jù)報文,而且無論PCIe總線的某一個鏈路多么擁塞,優(yōu)先級高的報文,如等時報文(Isochronous Packet)都可以獲得額定的數(shù)據(jù)帶寬。而且PCIe總線需要保證優(yōu)先級較高的報文優(yōu)先到達(dá)。PCIe總線采用虛擬多通路VC技術(shù)[7],并在這些數(shù)據(jù)報文設(shè)定一個TC(Traffic Class)標(biāo)簽,該標(biāo)簽由3位組成,將數(shù)據(jù)報文根據(jù)優(yōu)先權(quán)分為8類,這8類數(shù)據(jù)報文可以根據(jù)需要選擇不同的VC進(jìn)行傳遞。
在PCIe總線中,每一條數(shù)據(jù)鏈路上最多可以支持8個獨立的VC。每個VC可以設(shè)置獨立的緩沖,用來接收和發(fā)送數(shù)據(jù)報文。在PCIe體系結(jié)構(gòu)中,TC和VC緊密相連,TC與VC之間的關(guān)系是“多對一”。
TC可以由軟件設(shè)置,系統(tǒng)軟件可以選擇某類TC由哪個VC進(jìn)行傳遞。其中一個VC可以傳遞TC不相同的數(shù)據(jù)報文,而TC相同的數(shù)據(jù)報文在指定一個VC傳遞之后,不能再使用其他VC。在許多處理器系統(tǒng)中,Switch和RC僅支持一個VC,而x86處理器系統(tǒng)和PLX的Switch中可以支持兩個VC。
下文將以一個簡單的例子說明如何使用TC標(biāo)簽和多個VC,以保證數(shù)據(jù)傳送的服務(wù)質(zhì)量。我們將PCIe總線的端到端數(shù)據(jù)傳遞過程模擬為使用汽車將一批貨物從A點運送到B點。如果我們不考慮服務(wù)質(zhì)量,可以采用一輛汽車運送所有這些貨物,經(jīng)過多次往返就可以將所有貨物從A點運到B點。但是這樣做會耽誤一些需要在指定時間內(nèi)到達(dá)B點的貨物。有些貨物,如一些急救物資、EMS等其他優(yōu)先級別較高的貨物,必須要及時地從A點運送到B點。這些急救物資的運送應(yīng)該有別于其他普通物資的運送。
為此我們首先將不同種類的貨物進(jìn)行分類,將急救物資定義為TC3類貨物,EMS定義為TC2類貨物,平信定義為TC1類貨物,一般包裹定義為TC0類貨物,我們最多可以提供8種TC類標(biāo)簽進(jìn)行貨物分類。
之后我們使用8輛汽車,分別是VC0~7運送這些貨物,其中VC7的速度最快,而VC0的速度最慢。當(dāng)發(fā)生堵車事件時,VC7優(yōu)先行駛,VC0最后行駛。然后我們使用VC3運送急救物資,VC2運送EMS,VC1運送平信,VC0運送包裹,當(dāng)然使用VC0同時運送平信和包裹也是可以的,但是平信或者包裹不能使用一種以上的汽車運送,如平信如果使用了VC1運輸,就不能使用VC0。因為TC與VC的對應(yīng)關(guān)系是“多對一”的關(guān)系。
采用這種分類運輸?shù)姆椒?#xff0c;我們可以做到在A點到B點帶寬有限的情況下,仍然可以保證急救物資和EMS可以及時到達(dá)B點,從而提高了服務(wù)質(zhì)量。
PCIe總線除了解決數(shù)據(jù)傳送的QoS問題之外,還進(jìn)一步考慮如何在鏈路傳遞過程中,使用流量控制機制防止擁塞。
在PCIe體系結(jié)構(gòu)中,Switch處于核心地位。PCIe總線使用Switch進(jìn)行鏈路擴展,在Switch中,每一個端口對應(yīng)一個虛擬PCI橋。深入理解PCI橋是理解Switch軟件組成結(jié)構(gòu)的基礎(chǔ)。目前PCIe總線提出了MRA-Switch的概念,這種Switch與傳統(tǒng)Switch有較大的區(qū)別。
4.2.4 VC和端口仲裁
在Switch中存在多個端口,其中來自不同Ingress端口的報文可以發(fā)向同一個Egress端口,因此Switch必須要解決端口仲裁和路由選徑的問題。所謂端口仲裁指來自不同Ingress端口的報文到達(dá)同一個Egress端口的報文通過順序,端口仲裁機制如圖4?11所示。
在一個Switch中設(shè)有仲裁器,該仲裁器規(guī)定了數(shù)據(jù)報文通過Switch的規(guī)則。在PCIe總線中存在兩種仲裁機制,分別是基于VC和基于端口的仲裁機制。端口仲裁機制主要針對RC和Switch,當(dāng)多個Ingress端口需要向同一個Egress端口發(fā)送數(shù)據(jù)報文時需要進(jìn)行端口仲裁。具體地講,在PCIe體系結(jié)構(gòu)中有三個端口,需要進(jìn)行端口仲裁。
- Switch的Egress端口。當(dāng)EP A和EP B同時訪問EP C,D或者DDR-SDRAM時,需要通過Switch的Egress端口C。此時Switch需要進(jìn)行端口仲裁確定是EP A的數(shù)據(jù)報文還是EP B的數(shù)據(jù)報文優(yōu)先通過Egress端口C。
- 多端口RC的Egress端口。當(dāng)RC的端口1和端口3同時訪問Endpoint C時,RC的端口2需要進(jìn)行端口仲裁,決定來自RC哪個端口的數(shù)據(jù)可以率先通過。
- RC通往主存儲器的端口。當(dāng)RC的端口1、端口2和端口3同時訪問DDR控制器時,這些數(shù)據(jù)報文將通過RC的Egress端口4,此時需要進(jìn)行端口仲裁。
在PCIe體系結(jié)構(gòu)中,鏈路的端口仲裁需要根據(jù)每一個VC獨立設(shè)置,而且可以使用不同的算法進(jìn)行端口仲裁。
下文以圖4?11中,Switch的兩個Ingress端口A和B向Egress端口C發(fā)送數(shù)據(jù)報文為例,簡要說明端口仲裁和VC仲裁的使用方法,其過程如圖4?12所示。
基于VC的仲裁是指發(fā)向同一個端口的數(shù)據(jù)報文,根據(jù)使用的VC而進(jìn)行仲裁的方式。如上圖所示,當(dāng)來自端口B和端口A數(shù)據(jù)報文(分別使用VC0和VC1通路)在到達(dá)端口C之前,需要首先進(jìn)行端口仲裁后,才能進(jìn)行VC仲裁。PCIe總線規(guī)定了3種VC仲裁方式, 分別為Strict Priority,RR(Round Robin)和WRR(Weighted Round Robin)算法。
當(dāng)使用Strict Priority仲裁方式時,發(fā)向VC7的數(shù)據(jù)報文具有最高的優(yōu)先級,而發(fā)向VC0的數(shù)據(jù)報文優(yōu)先級最低。PCIe總線允許對Switch或者RC的部分VC采用Strict Priority方式進(jìn)行仲裁,而對其他VC采用RR和WRR算法,如VC7~4采用Strict Priority方式,而采用其他方式處理VC3~0。
使用RR方式時,所有VC具有相同的優(yōu)先級,所有VC輪流使用PCIe鏈路。WRR方式與RR算法類似,但是可以對每一個VC進(jìn)行加權(quán)處理,采用這種方式可以適當(dāng)提高VC7的優(yōu)先權(quán),而將VC0的優(yōu)先權(quán)適當(dāng)降低。
我們假定Ingress端口A和Ingress B向Egress端口C進(jìn)行數(shù)據(jù)傳遞時,使用兩個VC通路,分別是VC0和VC1。其中標(biāo)簽為TC0~3的數(shù)據(jù)報文使用VC0傳送,而標(biāo)簽為TC4~7數(shù)據(jù)報文使用VC1傳送。
而數(shù)據(jù)報文在離開Egress端口C時,需要首先進(jìn)行端口仲裁,之后再通過VC仲裁,決定哪個報文優(yōu)先傳送。數(shù)據(jù)報文從Ingress A/B端口發(fā)送到Egress C端口時,將按照以下步驟進(jìn)行處理。
(1) 首先到達(dá)Ingress A/B端口的數(shù)據(jù)報文,將根據(jù)該端口的TC/VC映射表[8]決定使用該端口的哪個VC通道。如圖4?12所示,假設(shè)發(fā)向端口A的數(shù)據(jù)報文使用TC0~TC3,而發(fā)向端口B的數(shù)據(jù)報文使用TC0~TC7,這些數(shù)據(jù)報文在端口A中僅使用了VC0通道,而在端口B中使用了VC0和VC1兩個通道。
(2) 數(shù)據(jù)報文在端口中傳遞時,將通過路由部件(Routing Logic),將報文發(fā)送到合適的端口。如圖4?12所示,端口C可以接收來自端口A或者B的數(shù)據(jù)報文。
(3) 當(dāng)數(shù)據(jù)報文到達(dá)端口C時,首先需要經(jīng)過TC/VC映射表,確定在端口C中使用哪個VC通路接收不同類型的數(shù)據(jù)報文。
(4) 對于端口C,其VC0通道可能會被來自端口A的數(shù)據(jù)報文使用,也可能會被來自端口B的數(shù)據(jù)報文使用。因此在PCIe的Switch中必須設(shè)置一個端口仲裁器,決定來自不同數(shù)據(jù)端口的數(shù)據(jù)報文如何使用VC通路。
(5) 數(shù)據(jù)報文通過端口仲裁后,獲得VC通路的使用權(quán)之后,還需要經(jīng)過Switch中的VC仲裁器,將數(shù)據(jù)報文發(fā)送到實際的物理鏈路中。
PCIe總線規(guī)定,系統(tǒng)設(shè)計者可以使用以下三種方式進(jìn)行端口仲裁。
(1) Hardware-fixed仲裁策略。如在系統(tǒng)設(shè)計時,采用固化的RR仲裁方法。這種方法的硬件實現(xiàn)原理較為簡單,此時系統(tǒng)軟件不能對端口仲裁器進(jìn)行配置。
(2) WRR仲裁策略,即加權(quán)的RR仲裁策略。
(3) Time-Based WRR仲裁策略,基于時間片的WRR仲裁策略,PCIe總線可以將一個時間段分為若干個時間片(Phase),每個端口占用其中的一個時間片,并根據(jù)端口使用這些時間片的多少對端口進(jìn)行加權(quán)的一種方法。使用WRR和Time-Based WRR仲裁策略,可以在某種程度上提高PCIe總線的QoS。
PCIe設(shè)備的Capability寄存器規(guī)定了端口仲裁使用的算法。有些PCIe設(shè)備并沒有提供多種端口仲裁算法,可能也并不含有Capability寄存器。此時該PCIe設(shè)備使用Hardware-fixed仲裁策略。
4.2.5 PCIe-to-PCI/PCI-X橋片
本篇將PCIe-to-PCI/PCI-X橋片簡稱為PCIe橋片。該橋片有兩個作用。
- 將PCIe總線轉(zhuǎn)換為PCI總線,以連接PCI設(shè)備。在一個沒有提供PCI總線接口的處理器中,需要使用這類橋片連接PCI總線的外設(shè)。許多PowerPC處理器在提供PCIe總線的同時,也提供了PCI總線,因此PCIe-to-PCI橋片對基于PowerPC處理器系統(tǒng)并不是必須的。
- 將PCI總線轉(zhuǎn)換為PCIe總線(這也被稱為Reverse Bridge),連接PCIe設(shè)備。一些低端的處理器并沒有提供PCIe總線,此時需要使用PCIe橋?qū)CI總線轉(zhuǎn)換為PCIe總線,才能與其他PCIe設(shè)備互連。這種用法初看比較奇怪,但是在實際應(yīng)用中,確實有使用這一功能的可能。本節(jié)主要講解PCIe橋的第一個作用。
PCIe橋的一端與PCIe總線相連,而另一端可以與一條或者多條PCI總線連接。其中可以連接多個PCI總線的PCIe橋也被稱為多端口PCIe橋。
PCIe總線規(guī)范提供了兩種多端口PCIe橋片的擴展方法。多端口PCIe橋片指具有一個上游端口和多個下游端口的橋片。其中上游端口連接PCIe鏈路,而下游端口推出PCI總線,連接PCI設(shè)備。
目前雖然PCIe總線非常普及,但是仍然有許多基于PCI總線的設(shè)計,這些基于PCI總線的設(shè)計可以通過PCIe橋,方便地接入到PCIe體系結(jié)構(gòu)中。目前有多家半導(dǎo)體廠商可以提供PCIe橋片,如PLX、NXP、Tundra和Intel。就功能的完善和性能而言,Intel的PCIe橋無疑是最佳選擇,而PLX和Tundra的PCIe橋在嵌入式系統(tǒng)中得到了廣泛的應(yīng)用。
[1]?OCeaN是一個基于交叉矩陣的總線結(jié)構(gòu),連接在OCeaN中的外部設(shè)備可以直接通信,而不相互干擾。
[2]?這種方式也可以被認(rèn)為是SoC平臺總線從共享總線結(jié)構(gòu)升級到Switch結(jié)構(gòu)。
[3]?SRIO為串型RapidIO。
[4]?PCIe端口之間的直接通信過程也被稱為Peer-to-Peer傳送方式。
[5]?PCIe總線中的Switch與網(wǎng)絡(luò)應(yīng)用的Switch的功能并不相同,而與網(wǎng)絡(luò)應(yīng)用中的Route功能接近。
[6]?在PCIe體系結(jié)構(gòu)中,RC和EP也需要處理QoS。
[7]?有關(guān)多通路VC的詳細(xì)說明見第9章。
[8]?該表存在于PCI Express. Extended Capabilities結(jié)構(gòu)中。
轉(zhuǎn)載于:https://www.cnblogs.com/huty/p/8518661.html
總結(jié)
以上是生活随笔為你收集整理的【VS开发】PCIe体系结构的组成部件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android—资源文件(res)的引用
- 下一篇: [每天一道A+B]签到检测程序