第1章 PCI總線的基本知識_第1頁
第1章 PCI總線的基本知識_第2頁
第1章 PCI總線的基本知識_第3頁
第1章 PCI總線的基本知識_第4頁
第1章 PCI總線的基本知識_第5頁
已閱讀5頁,還剩16頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、PCI(Peripheral Component Interconnect)總線的誕生與PC(Personal Computer)的蓬勃發展密切相關。在處理器體系結構中,PCI總線屬于局部總線(Local Bus)。局部總線作為系統總線的延伸,主要功能是為了連接外部設備。處理器主頻的不斷提升,要求速度更快,帶寬更高的局部總線。起初PC使用8位的XT總線作為局部總線,并很快升級到16位的ISA(Industry Standard Architecture)總線,逐步發展到32位的EISA(Extended Industry Standard Architecture)、VESA(Video El

2、ectronics Standards Association)和MCA(Micro Channel Architecture)總線。PCI總線規范在上世紀九十年代提出。這條總線推出之后,很快得到了各大主流半導體廠商的認同,迅速統一了當時并存的各類局部總線。EISA、VESA等其他32位總線很快就被PCI總線淘汰了。從那時起,PCI總線一直在處理器體系結構中占有重要地位。在此后相當長的一段時間里,PC處理器系統的大多數外部設備都是直接或者間接地與PCI總線相連。即使目前PCI Express總線逐步取代了PCI總線成為PC局部總線的主流,也不能掩蓋PCI總線的光芒。從軟件層面上看,PCI Ex

3、press總線與PCI總線基本兼容;從硬件層面上看,PCI Express總線在很大程度上繼承了PCI總線的設計思路。因此PCI總線依然是軟硬件工程師在進行處理器系統的開發與設計時,必須要掌握的一條局部總線。PCI總線V1.0規范僅針對在一個PCB(Printed Circuit Board)環境內的,器件之間的互連,而1993年4月30日發布的V2.0規范增加了對PCI插槽的支持。1995年6月1日,PCI V2.1總線規范發布,這個規范具有里程碑意義。正是這個規范使得PCI總線大規模普及,至此PCI總線完成了對(E)ISA和MCA總線的替換。至1996年,VESA總線也逐漸離開了人們的視線

4、,當然PCI總線并不能完全提供顯卡所需要的帶寬,真正替代VESA總線的是AGP總線。隨后PCISIG(PCI Special Interest Group)陸續發布了PCI總線V2.2,V2.3規范,并最終將PCI總線規范定格在V3.0。除了PCI總線規范外,PCISIG還定義了一些與PCI總線相關的規范,如PCMCIA(Personal Computer Memory Card International Association)規范和MiniPCI規范。其中PCMCIA規范主要針對Laptop應用,后來PCMCIA升級為PC Card(Cardbus)規范,而PC Card又升級為Expr

5、essCard規范。PC Card規范基于32位,33MHz的PCI總線;而ExpressCard規范基于PCI Express和USB 2.0。這兩個規范都在Laptop領域中獲得了成功。除了PCMCIA規范外,Mini PCI總線也非常流行,與標準PCI插槽相比,Mini PCI插槽占用面積較小,適用于一些對尺寸有要求的應用。除了以上規范之外,PCISIG還推出了一系列和PCI總線直接相關的規范。如PCI-to-PCI橋規范、PCI電源管理規范、PCI熱插拔規范和CompactPCI總線規范。其中PCI-to-PCI橋規范最為重要,理解PCI-to-PCI橋是理解PCI體系結構的基礎;而C

6、ompactPCI總線規范多用于具有背板結構的大型系統,并支持熱拔插。PCISIG在PCI總線規范的基礎上,進一步提出PCI-X規范。與PCI總線相比,PCI-X總線規范可以支持133MHz、266MHz和533MHz的總線頻率,并在傳送規則上做了一些改動。雖然PCI-X總線還沒有得到大規模普及就被PCI Express總線替代,但是在PCI-X總線中提出的許多設計思想仍然被PCI Express總線繼承。PCI總線規范是Intel對PC領域做出的一個巨大貢獻。Intel也在PCI總線規范留下了深深的印記,PCI總線規范的許多內容都與基于IA (Intel Architecture)架構的x8

7、6處理器密切相關。但是這并不妨礙其他處理器系統使用PCI總線,事實上PCI總線在非x86處理器系統上也取得了巨大的成功。目前絕大多數處理器系統都使用PCI/PCI Express總線連接外部設備,特別是一些通用外設。隨著時間的推移,PCI和PCI-X總線逐步遇到瓶頸。PCI和PCI-X總線使用單端并行信號進行數據傳遞,由于單端信號容易被外部系統干擾,其總線頻率很難進一步提高。目前,為了獲得更高的總線頻率以提高總線帶寬,高速串行總線逐步替代了并行總線。PCI Express總線也逐漸替代PCI總線成為主流。但是從系統軟件的角度上看,PCI Express總線仍然基于PCI總線。理解PCI Exp

8、ress總線的一個基礎是深入理解PCI總線,同時PCI Express總線也繼承了PCI總線的許多概念。本篇將詳細介紹與處理器體系結構相關的,一些必備的PCI總線知識。為簡化起見,本篇主要介紹PCI總線的32位地址模式。在實際應用中,使用64位地址模式的PCI設備非常少。而且在PCI Express總線逐漸取代PCI總線的大趨勢之下,將來也很難會有更多的,使用64位地址的PCI設備。如果讀者需要掌握PCI總線的64位地址模式,請自行閱讀PCI總線的相關規范。實際上,如果讀者真正掌握了PCI總線的32位地址模式之后,理解64位地址模式并不困難。為節省篇幅,下文將PCI Express總線簡稱為P

9、CIe總線,PCI-to-PCI橋簡稱為PCI橋,PCI Express-to-PCI橋簡稱為PCIe橋,Host-to-PCI主橋簡稱為HOST主橋。值得注意的是許多書籍將HOST主橋稱為PCI主橋或者PCI總線控制器。、第1章 PCI總線的基本知識 (2011-04-21 13:23:35)轉載標簽: 雜談分類: 淺談PCIe體系結構PCI總線作為處理器系統的局部總線,主要目的是為了連接外部設備,而不是作為處理器的系統總線連接Cache和主存儲器。但是PCI總線、系統總線和處理器體系結構之間依然存在著緊密的聯系。PCI總線作為系統總線的延伸,其設計考

10、慮了許多與處理器相關的內容,如處理器的Cache共享一致性和數據完整性,以及如何與處理器進行數據交換等一系列內容。其中Cache共享一致性和數據完整性是現代處理器局部總線的設計的重點和難點,也是本書將重點講述的主題之一。獨立地研究PCI總線并不可取,因為PCI總線僅是處理器系統的一個組成部分。深入理解PCI總線需要了解一些與處理器體系結構相關的知識。這些知識是本書所側重描述的,同時也是PCI總線規范所忽略的內容。脫離實際的處理器系統,不容易也不可能深入理解PCI總線規范。對于今天的讀者來說,PCI總線提出的許多概念略顯過時,也有許多不足之處。但是在當年,PCI總線與之前的存在其他并行局部總線如

11、ISA、EISA和MCA總線相比,具有許多突出的優點,是一個全新的設計。(1)      PCI總線空間與處理器空間隔離PCI設備具有獨立的地址空間,即PCI總線地址空間,該空間與存儲器地址空間通過HOST主橋隔離。處理器需要通過HOST主橋才能訪問PCI設備,而PCI設備需要通過HOST主橋才能主存儲器。在HOST主橋中含有許多緩沖,這些緩沖使得處理器總線與PCI總線工作在各自的時鐘頻率中,彼此互不干擾。HOST主橋的存在也使得PCI設備和處理器可以方便地共享主存儲器資源。處理器訪問PCI設備時,必須通過HOST主橋進行地址轉換;而

12、PCI設備訪問主存儲器時,也需要通過HOST主橋進行地址轉換。HOST主橋的一個重要作用就是將處理器訪問的存儲器地址轉換為PCI總線地址。PCI設備使用的地址空間是屬于PCI總線域的,而與存儲器地址空間不同。x86處理器對PCI總線域與存儲器域的劃分并不明晰,這也使得許多程序員并沒有準確地區分PCI總線域地址空間與存儲器域地址空間。而本書將反復強調存儲器地址和PCI總線地址的區別,因為這是理解PCI體系結構的重要內容。PCI規范并沒有對HOST主橋的設計進行約束。每一個處理器廠商使用的HOST主橋,其設計都不盡相同。HOST主橋是聯系PCI總線與處理器的核心部件,掌握HOST主橋的實現機制是深

13、入理解PCI體系結構的前提。本書將以Freescale的PowerPC處理器和Intel的x86處理器為例,說明各自HOST主橋的實現方式,值得注意的是本書涉及的PowerPC處理器僅針對Freescale的PowerPC處理器,而不包含IBM和AMCC的Power和PowerPC處理器。而且如果沒有特別說明,本書中涉及的x86處理器特指Intel的處理器,而不是其他廠商的x86處理器。(2)      可擴展性PCI總線具有很強的擴展性。在PCI總線中,HOST主橋可以直接推出一條PCI總線,這條總線也是該HOST主橋的所管理的第一

14、條PCI總線,該總線還可以通過PCI橋擴展出一系列PCI總線,并以HOST主橋為根節點,形成1顆PCI總線樹。這些PCI總線都可以連接PCI設備,但是在1顆PCI總線樹上,最多只能掛接256個PCI設備(包括PCI橋)。在同一條PCI總線上的設備間可以直接通信,并不會影響其他PCI總線上設備間的數據通信。隸屬于同一顆PCI總線樹上的PCI設備,也可以直接通信,但是需要通過PCI橋進行數據轉發。PCI橋是PCI總線的一個重要組成部件,該部件的存在使得PCI總線極具擴展性。PCI橋也是有別于其他局部總線的一個重要部件。在“以HOST主橋為根節點”的PCI總線樹中,每一個PCI橋下也可以連接一個PC

15、I總線子樹,PCI橋下的PCI總線仍然可以使用PCI橋繼續進行總線擴展。PCI橋可以管理這個PCI總線子樹,PCI橋的配置空間含有一系列管理PCI總線子樹的配置寄存器。在PCI橋的兩端,分別連接了兩條總線,分別是上游總線(Primary Bus)和下游總線(Secondary Bus)。其中與處理器距離較近的總線被稱為上游總線,另一條被稱為下游總線。這兩條總線間的通信需要通過PCI橋進行。PCI橋中的許多概念被PCIe總線采納,理解PCI橋也是理解PCIe體系結構的基礎。(3)      動態配置機制PCI設備使用的地址可以根據需要由

16、系統軟件動態分配。PCI總線使用這種方式合理地解決了設備間的地址沖突,從而實現了“即插即用”功能。從而PCI總線不需要使用ISA或者EISA接口卡為解決地址沖突而使用的硬件跳線。每一個PCI設備都有獨立的配置空間,在配置空間中含有該設備在PCI總線中使用的基地址,系統軟件可以動態配置這個基地址,從而保證每一個PCI設備使用的物理地址并不相同。PCI橋的配置空間中含有其下PCI子樹所能使用的地址范圍。(4)      總線帶寬PCI總線與之前的局部總線相比,極大提高了數據傳送帶寬,32位/33MHz的PCI總線可以提供132MB/s的峰

17、值帶寬,而64位/66MHz的PCI總線可以提供的峰值帶寬為532MB/s。雖然PCI總線所能提供的峰值帶寬遠不能和PCIe總線相比,但是與之前的局部總線ISA、EISA和MCA總線相比,仍然具有較大的優勢。ISA總線的最高主頻為8MHz,位寬為16,其峰值帶寬為16MB/s;EISA總線的最高主頻為8.33MHz,位寬為32,其峰值帶寬為33MB/s;而MCA總線的最高主頻為10MHz,最高位寬為32,其峰值帶寬為40MB/s。PCI總線提供的峰值帶寬遠高于這些總線。(5)      共享總線機制PCI設備通過仲裁獲得PCI總線的使

18、用權后,才能進行數據傳送,在PCI總線上進行數據傳送,并不需要處理器進行干預。PCI總線仲裁器不在PCI總線規范定義的范圍內,也不一定是HOST主橋和PCI橋的一部分。雖然絕大多數HOST主橋和PCI橋都包含PCI總線仲裁器,但是在某些處理器系統的設計中也可以使用獨立的PCI總線仲裁器。如在PowerPC處理器的HOST主橋中含有PCI總線仲裁器,但是用戶可以關閉這個總線仲裁器,而使用獨立的PCI總線仲裁器。PCI設備使用共享總線方式進行數據傳遞,在同一條總線上,所有PCI設備共享同一總線帶寬,這將極大地影響PCI總線的利用率。這種機制顯然不如PCIe總線采用的交換結構,但是在PCI總線盛行的

19、年代,半導體的工藝、設計能力和制作成本決定了采用共享總線方式是當時的最優選擇。(6)      中斷機制PCI總線上的設備可以通過四根中斷請求信號INTAD#向處理器提交中斷請求。與ISA總線上的設備不同,PCI總線上的設備可以共享這些中斷請求信號,不同的PCI設備可以將這些中斷請求信號“線與”后,與中斷控制器的中斷請求引腳連接。PCI設備的配置空間記錄了該設備使用這四根中斷請求信號的信息。PCIe總線進一步提出了MSI(Message Signal Interrupt)機制,該機制使用存儲器寫總線事務傳遞中斷請求,并可以使用x86處

20、理器FSB(Front Side Bus)總線提供的Interrupt Message總線事務,從而提高了PCI設備的中斷請求效率。雖然從現代總線技術的角度上看,PCI總線仍有許多不足之處,但也不能否認PCI總線已經獲得了巨大的成功,不僅x86處理器將PCI總線作為標準的局部總線連接各類外部設備,PowerPC、MIPS和ARM1處理器也將PCI總線作為標準局部總線。除此之外,基于PCI總線的外部設備,如以太網控制器、聲卡、硬盤控制器等,也已經成為主流。1 在ARM處理器中,使用SoC平臺總線,即AMBA總線,連接片內設備。但是某些ARM生產廠商,依然使用AMBA-to-PCI橋推出

21、PCI總線,以連接PCI設備。1.1 PCI總線的組成結構  (2011-04-21 14:10:14)轉載標簽: 雜談分類: 淺談PCIe體系結構如上文所述,PCI總線作為處理器系統的局部總線,是處理器系統的一個組成部件,講述PCI總線的組成結構不能離開處理器系統這個大環境。在一個處理器系統中,與PCI總線相關的模塊如圖11所示。 如圖11所示在一個處理器系統中,與PCI總線相關的模塊包括,HOST主橋、PCI總線、PCI橋和PCI設備。PCI總線由HOST主橋和PCI橋推出,HOST主橋與主存儲器控制器在同一級總線上,PCI設備可以方便地通

22、過HOST主橋訪問主存儲器,即進行DMA操作。值得注意的是,PCI設備的DMA操作需要與處理器系統的Cache進行一致性操作,當PCI設備通過HOST主橋訪問主存儲器時,Cache一致性模塊將進行地址監聽,并根據監聽的結果改變Cache的狀態。在一些簡單的處理器系統中,可能不含有PCI橋,此時所有PCI設備都是連接在HOST主橋推出的PCI總線上,此外在一些處理器系統中可能含有多個HOST主橋,如在圖11所示的處理器系統中含有HOST主橋x和HOST主橋Y。1.1.1 HOST主橋HOST主橋是一個很特別的橋片,其主要功能是隔離處理器系統的存儲器域與處理器系統的PCI總線域,管理PC

23、I總線域,并完成處理器與PCI設備間的數據交換。處理器與PCI設備間的數據交換主要由“處理器訪問PCI設備的地址空間”和“PCI設備使用DMA機制訪問主存儲器”這兩部分組成。為簡便起見,下文將處理器系統的存儲器域簡稱為存儲器域,而將處理器系統的PCI總線域稱為PCI總線域,存儲器域和PCI總線域的詳細介紹見第2.1節。值得注意的是,在一個處理器系統中,有幾個HOST主橋,就有幾個PCI總線域。HOST主橋在處理器系統中的位置并不相同,如PowerPC處理器將HOST主橋與處理器集成在一個芯片中。而有些處理器不進行這種集成,如x86處理器使用南北橋結構,處理器內核在一個芯片中,而HOST主橋在北

24、橋中。但是從處理器體系結構的角度上看,這些集成方式并不重要。PCI設備通過HOST主橋訪問主存儲器時,需要與處理器的Cache進行一致性操作,因此在設計HOST主橋時需要重點考慮Cache一致性操作。在HOST主橋中,還含有許多數據緩沖,以支持PCI總線的預讀機制。HOST主橋是聯系處理器與PCI設備的橋梁。在一個處理器系統中,每一個HOST主橋都管理了一顆PCI總線樹,在同一顆PCI總線樹上的所有PCI設備屬于同一個PCI總線域。如圖11所示,HOST主橋x之下的PCI設備屬于PCI總線x域,而HOST主橋y之下的PCI設備屬于PCI總線y域。在這顆總線樹上的所有PCI設備的配置空間都由HO

25、ST主橋通過配置讀寫總線周期訪問。如果HOST主橋支持PCI V3.0規范的Peer-to-Peer數據傳送方式,那么分屬不同PCI總線域的PCI設備可以直接進行數據交換。如圖11所示,如果HOST主橋y支持Peer-to-Peer數據傳送方式,PCI設備y01可以直接訪問PCI設備01或者PCI設備11,而不需要通過處理器的參與。但是這種跨越總線域的數據傳送方式在PC架構中并不常用,在PC架構中,重點考慮的是PCI設備與主存儲器之間的數據交換,而不是PCI設備之間的數據交換。此外在PC架構中,具有兩個HOST主橋的處理器系統也并不多見。在PowerPC處理器中,HOST主橋可以通過設置Inb

26、ound寄存器,使得分屬于不同PCI總線域的設備可以直接通信。許多PowerPC處理器都具有多個HOST主橋,有關PowerPC處理器使用的HOST主橋詳見第2.2節。1.1.2 PCI總線在處理器系統中,含有PCI總線和PCI總線樹這兩個概念。這兩個概念并不相同,在一顆PCI總線樹中可能具有多條PCI總線,而具有血緣關系的PCI總線組成一顆PCI總線樹。如在圖11所示的處理器系統中,PCI總線x樹具有兩條PCI總線,分別為PCI總線x0和PCI總線x1。而PCI總線y樹中僅有一條PCI總線。PCI總線由HOST主橋或者PCI橋管理,用來連接各類設備,如聲卡、網卡和IDE接口卡等。在

27、一個處理器系統中,可以通過PCI橋擴展PCI總線,并形成具有血緣關系的多級PCI總線,從而形成PCI總線樹型結構。在處理器系統中有幾個HOST主橋,就有幾顆這樣的PCI總線樹,而每一顆PCI總線樹都與一個PCI總線域對應。與HOST主橋直接連接的PCI總線通常被命名為PCI總線0。考慮到在一個處理器系統中可能有多個主橋,圖11將HOST主橋x推出的PCI總線命名為x0總線,而將PCI橋x1擴展出的PCI總線稱之為x1總線;而將HOST主橋y推出的PCI總線稱為y0yn。分屬不同PCI總線樹的設備,其使用的PCI總線地址空間分屬于不同的PCI總線域空間。1.1.3 PCI設備在PCI總

28、線中有三類設備,PCI主設備、PCI從設備和橋設備。其中PCI從設備只能被動地接收來自HOST主橋,或者其他PCI設備的讀寫請求;而PCI主設備可以通過總線仲裁獲得PCI總線的使用權,主動地向其他PCI設備或者主存儲器發起存儲器讀寫請求。而橋設備的主要作用是管理下游的PCI總線,并轉發上下游總線之間的總線事務。一個PCI設備可以即是主設備也是從設備,但是在同一個時刻,這個PCI設備或者為主設備或者為從設備。PCI總線規范將PCI主從設備統稱為PCI Agent設備。在處理器系統中常見的PCI網卡、顯卡、聲卡等設備都屬于PCI Agent設備。在PCI總線中,HOST主橋是一個特殊的PCI設備,

29、該設備可以獲取PCI總線的控制權訪問PCI設備,也可以被PCI設備訪問。但是HOST主橋并不是PCI設備。PCI規范也沒有規定如何設計HOST主橋。在PCI總線中,還有一類特殊的設備,即橋設備。橋設備包括PCI橋、PCI-to-(E)ISA橋和PCI-to-Cardbus橋。本篇重點介紹PCI橋,而不關心其他橋設備的實現原理。PCI橋的存在使PCI總線極具擴展性,處理器系統可以使用PCI橋進一步擴展PCI總線。PCI橋的出現使得采用PCI總線進行大規模系統互連成為可能。但是在目前已經實現的大規模處理器系統中,并沒有使用PCI總線進行處理器系統與處理器系統之間的大規模互連。因為PCI總線是一個以

30、HOST主橋為根的樹型結構,使用主從架構,因而不易實現多處理器系統間的對等互連。即便如此PCI橋仍然是PCI總線規范的精華所在,掌握PCI橋是深入理解PCI體系結構的基礎。PCI橋可以連接兩條PCI總線,上游PCI總線和下游PCI總線,這兩個PCI總線屬于同一個PCI總線域,使用PCI橋擴展的所有PCI總線都同屬于一個PCI總線域。其中對PCI設備配置空間的訪問可以從上游總線轉發到下游總線,而數據傳送可以雙方向進行。在PCI總線中,還存在一種非透明PCI橋,該橋片不是PCI總線規范定義的標準橋片,但是適用于某些特殊應用,本篇將在第2.5節中詳細介紹這種橋片。在本書中,如不特別強調,PCI橋是指

31、透明橋,透明橋也是PCI總線規范定義的標準橋片。PCI-to-(E)ISA橋和PCI-to-Cardbus橋的主要作用是通過PCI總線擴展(E)ISA和Cardbus總線。在PCI總線推出之后,(E)ISA總線并沒有在處理器系統中立即消失,此時需要使用PCI-(E)ISA橋擴展(E)ISA總線,而使用PCI-to-Cardbus橋用來擴展Cardbus總線,本篇并不關心(E)ISA和Cardbus總線的設計與實現。1.1.4 HOST處理器PCI總線規定在同一時刻內,在一顆PCI總線樹上有且只有一個HOST處理器。這個HOST處理器可以通過HOST主橋,發起PCI總線的配置請求總線事

32、務,并對PCI總線上的設備和橋片進行配置。在PCI總線中,HOST處理器是一個較為模糊的概念。在SMP(symmetric multiprocessing)處理器系統中,所有CPU都可以通過HOST主橋訪問其下的PCI總線樹,這些CPU都可以作為HOST處理器。但是值得注意的是,HOST主橋才是PCI總線樹的實際管理者,而不是HOST處理器。在HOST主橋中,設置了許多寄存器,HOST處理器通過操作這些寄存器管理這些PCI設備。如在x86處理器的HOST主橋中設置了0xCF8和0xCFC這兩個I/O端口訪問PCI設備的配置空間,而PowerPC處理器的HOST主橋設置了CFG_ADDR和CFG

33、_DATA寄存器訪問PCI設備的配置空間。值得注意的是,在PowerPC處理器中并沒有I/O端口,因此使用存儲器映像尋址方式訪問外部設備的寄存器空間。1.1.5 PCI總線的負載PCI總線的所能掛接的負載與總線頻率相關,其中總線頻率越高,所能掛接的負載越少。下文以 PCI總線和PCI-X總線為例說明總線頻率、峰值帶寬和負載能力之間的關系,如表11所示。 表11 PCI總線頻率、帶寬與負載之間的關系總線類型總線頻率峰值帶寬負載能力PCI33MHz133MB/s4-5個插槽66MHz266MB/s1-2個插槽PCI-X66MHz266MB/s4個插槽133M

34、Hz533MB/s2個插槽266MHz1066MB/s1個插槽533MHz2131MB/s1個插槽 由表11所示,PCI總線頻率越高,所能掛接的負載越少,但是整條總線所能提供的帶寬越大。值得注意的是,PCI-X總線與PCI總線的傳送協議略有不同,因此66MHz的PCI-X總線的負載數較大,PCI-X總線的詳細說明見第1.5節。當PCI-X總線頻率為266MHz和533MHz時,該總線只能掛接一個PCI-X插槽。在PCI總線中,一個插槽相當于兩個負載,接插件和插卡各算為一個負載,在表11中,33MHz的PCI總線可以掛接45個插槽,相當于直接掛接810個負載。1.2 PCI總

35、線的信號定義  (2011-04-22 17:57:04)轉載標簽: 雜談分類: 淺談PCIe體系結構PCI總線是一條共享總線,在一條PCI總線上可以掛接多個PCI設備。這些PCI設備通過一系列信號與PCI總線相連,這些信號由地址/數據信號、控制信號、仲裁信號、中斷信號等多種信號組成。PCI總線是一個同步總線,每一個設備都具有一個CLK信號,其發送設備與接收設備使用這個CLK信號進行同步數據傳遞。PCI總線可以使用33MHz或者66MHz的時鐘頻率,而PCI-X總線可以使用133MHz、266MHz或者533MHz的時鐘頻率。除了RST#、INTAD#、PME#和

36、CLKRUN#等信號之外,PCI設備使用的絕大多數信號需要與CLK信號同步。其中RST#是復位信號,PCI設備使用INTAD#信號進行中斷請求。本篇并不關心PME#和CLKRUN#信號。1.2.1 地址和數據信號在PCI總線中,與地址和數據相關的信號如下所示。(1)      AD31:0信號PCI總線復用地址與數據信號。PCI總線事務在啟動后的第一個時鐘周期傳送地址,這個地址是PCI總線域的存儲器地址或者I/O地址;而在下一個時鐘周期傳送數據1。傳送地址的時鐘周期也被稱為地址周期,而傳送數據的時鐘周期也被稱為數據周期。PC

37、I總線支持突發傳送,即在一個地址周期之后,可以緊跟多個數據周期。(2)      PAR信號PCI總線使用奇偶校驗機制,保證地址和數據信號在進行數據傳遞時的正確性。PAR信號是AD31:0和C/BE3:0的奇偶校驗信號。PCI主設備在地址周期和數據周期中,使用該信號為地址和數據信號線提供奇偶校驗位。(3)      C/BE3:0#信號PCI總線復用命令與字節選通引腳。在地址周期中,C/BE3:0信號表示PCI總線的命令。而在數據周期,C/BE3:0引腳輸出字節選通信號,其中

38、C/BE3、C/BE2、C/BE1和C/BE0與數據的字節3、2、1和0對應。使用這組信號可以對PCI設備進行單個字節、字和雙字訪問。PCI總線通過C/BE3:0#信號定義了多個總線事務,這些總線事務如表12所示。 表12 PCI總線事務C/BE3:0#命令類型說明0000Interrupt Acknowledge中斷響應總線事務讀取當前掛接在PCI總線上的中斷控制器的中斷向量號。目前大多數處理器系統的中斷控制器都不掛接在PCI總線上,因此這種總線事務很少被使用。0001Special CycleHOST主橋可以使用Special Cycle事務在PCI總線上,進行信息廣播

39、。0010I/O ReadHOST主橋可以使用該總線事務對PCI設備的I/O地址空間進行讀操作。目前多數PCI設備都不支持I/O地址空間,而僅支持存儲器地址空間,但是仍有部分PCI設備同時包含I/O地址空間和存儲器地址空間。0011I/O Write對PCI總線的I/O地址空間進行寫操作。0100Reserved保留0101Reserved保留0110Memory ReadHOST主橋可以使用該總線事務對PCI設備的存儲器空間進行讀操作。PCI設備也可以使用該總線事務讀取處理器的存儲器空間。0111Memory WriteHOST主橋可以使用該總線事務對PCI設備的存儲器空間進行寫操作。PCI

40、設備也可以使用該總線事務向處理器的存儲器空間進行寫操作。1000Reserved保留1001Reserved保留1010Configuration ReadHOST主橋可以對PCI設備的配置空間進行讀操作。每一個PCI設備都有獨立的配置空間。在多功能PCI設備中,每一個子設備(Function)也有一個獨立的配置空間。該總線事務只能由HOST主橋發出,PCI橋可以轉發該總線事務。1011Configuration WriteHOST主橋對PCI設備的配置空間進行寫操作。1100Memory Read MultipleHOST主橋可以使用該總線事務對PCI設備的存儲器空間進行多行讀操作,這種操作

41、并不多見。該總線事務的主要用途是供PCI設備使用,讀取主存儲器。這個讀操作與Memory Read操作(C/BE3:0為0x0110時)略有不同,詳見第3.4.5節。1101Dual Address CyclePCI總線支持64位地址,處理器或者其他PCI設備訪問64位PCI總線地址時,必須使用雙地址周期產生64位的PCI總線地址。PCI設備使用DMA讀寫方式訪問64位的存儲器地址時,也可以使用該總線事務。1110Memory Read LineHOST主橋可以使用該總線事務對PCI設備的存儲器空間進行單行讀操作,這種操作并不多見。該總線事務的主要用途是供PCI設備使用,讀取主存儲器。詳見第3

42、.4.5節。1111Memory Write and Invalidate存儲器寫并無效操作,與存儲器寫不同,PCI設備可以使用該總線事務對主存儲器空間進行寫操作。該總線事務將數據寫入主存儲器的同時,將對應Cache行中的數據“使無效”,詳見第3.3.4節。1.2.2 接口控制信號在PCI總線中,接口控制信號的主要作用是保證數據的正常傳遞,并根據PCI主從設備的狀態,暫停、終止或者正常完成當前總線事務,其主要信號如下。(1)      FRAME#信號該信號指示一個PCI總線事務的開始與結束。當PCI設備獲得總線的使用權后,

43、將置該信號有效,即置為低,啟動PCI總線事務,當結束總線事務時,將置該信號無效,即置為高。PCI設備(HOST主橋)只有通過仲裁獲得當前PCI總線的使用權后,才能驅動該信號。(2)      IRDY#信號該信號由PCI主設備(包括HOST主橋)驅動,該信號有效時表示PCI主設備的數據已經準備完畢。如果當前PCI總線事務為寫事務,表示數據已經在AD31:0上有效;如果為讀事務,表示PCI目標設備已經準備好接收緩沖,目標設備可以將數據發送到AD31:0上。(3)      TR

44、DY#信號該信號由目標設備驅動,該信號有效時表示目標設備已經將數據準備完畢。如果當前PCI總線事務為寫事務,表示目標設備已經準備好接收緩沖,可以將AD31:0上的數據寫入目標設備;如果為讀事務,表示PCI設備需要的數據已經在AD31:0上有效。該信號可以和IRDY#信號聯合使用,在PCI總線事務上插入等待周期,對PCI總線的數據傳送進行控制。(4)      STOP#信號該信號有效時表示目標設備請求主設備停止當前PCI總線事務。一個PCI總線事務除了可以正常結束外,目標設備還可以使用該信號終止當前PCI總線事務。目標設備可以根據不同

45、的情況,要求主設備對當前PCI總線事務進行重試(Retry)、斷連(Disconnect),也可以向主設備報告目標設備夭折(Target Abort)。目標設備要求主設備Retry和Disconnect并不意味著當前PCI總線事務出現錯誤。當目標設備沒有將數據準備好時,可以使用Retry周期使主設備重試當前PCI總線事務。有時目標設備不能接收來自主設備較長的Burst操作時,可以使用Disconnect周期,將一個較長的Burst操作,分解為多個Burst操作。當主設備訪問的地址越界時,目標設備可以使用Disconnect周期,終止主設備的越界訪問。而Target Abort表示在數據傳送中出

46、現錯誤。處理器系統必須要對這種情況進行處理。在PCI總線中,出現Abort一般意味著當前PCI總線域出現了較為嚴重的錯誤。(5)      IDSEL信號PCI總線在進行配置讀寫總線事務時,使用該信號選擇PCI目標設備。配置讀寫總線事務與存儲器讀寫總線事務在實現上略有不同。在PCI總線中,存儲器讀寫總線事務使用地址譯碼方式訪問外部設備。而配置讀寫總線事務使用“ID譯碼方式”訪問PCI設備,即通過PCI設備的總線號、設備號和寄存器號訪問PCI設備的配置空間。IDSEL信號與PCI設備的設備號相關,相當于PCI設備配置空間的片選信號,這部

47、分內容將在第2.4.4節中詳細介紹。(6)      DEVSEL#信號該信號有效時表示PCI總線的目標設備準備好,該信號與TRDY#信號不同之處在于該信號有效僅表示目標設備已經完成了地址譯碼。目標設備使用該信號通知PCI主設備,其訪問對象在當前PCI總線上,但是并不表示目標設備可以與主設備進行數據交換。而TRDY#信號表示數據有效,PCI主設備可以向目標設備寫入或者從目標設備讀取數據。PCI總線規范根據設備進行譯碼速度的快慢,將PCI設備分為快速、中速和慢速三種設備。在PCI總線上還有一種特殊的設備,即負向譯碼設備,在一條PCI總線

48、上當快速、中速和慢速三種設備都不能響應PCI總線事務的地址時,負向譯碼設備將被動地接收這個PCI總線事務。如果在PCI主設備訪問的PCI總線上,沒有任何設備可以置DEVSEL#信號為有效,主設備將使用Master Abort周期結束當前總線事務。(7)      LOCK#信號PCI主設備可以使用該信號,將目標設備的某個存儲器或者I/O資源鎖定,以禁止其他PCI主設備訪問此資源,直到鎖定這個資源的主設備將其釋放。PCI總線使用LOCK#信號實現LOCK總線事務,只有HOST主橋、PCI橋或者其他橋片可以使用LOCK#信號。在PCI總線

49、的早期版本中,PCI Agent設備也可以使用LOCK#信號,而目前PCI總線使用LOCK#信號僅是為防止死鎖和向前兼容。LOCK總線事務將嚴重影響PCI總線的傳送效率,在實際應用中,設計者應當盡量避免使用該總線事務。1.2.3 仲裁信號PCI設備使用該組信號進行總線仲裁,并獲得PCI總線的使用權。只有PCI主設備需要使用該組信號,而PCI從設備可以不使用總線仲裁信號。這組信號由REQ#和GNT#組成。其中PCI主設備的REQ#和GNT#信號與PCI總線的仲裁器直接相連。PCI主設備的總線仲裁信號與PCI總線仲裁器的連接關系如圖12所示。值得注意的是,每一個PCI主設備都具有獨立的總

50、線仲裁信號,并與PCI總線仲裁器一一相連。而總線仲裁器需要保證在同一個時間段內,只有一個PCI設備可以使用當前總線。 在一個處理器系統中,一條PCI總線可以掛接PCI主設備的數目,除了與負載能力相關之外,還與PCI總線仲裁器能夠提供的仲裁信號數目直接相關。在一顆PCI總線樹中,每一條PCI總線上都有一個總線仲裁器。一個處理器系統可以使用PCI橋擴展出一條新的PCI總線,這條新的PCI總線也需要一個總線仲裁器,通常在PCI橋中集成了這個總線仲裁器。多數HOST主橋也集成了一個PCI總線仲裁器,但是PCI總線也可以使用獨立的PCI總線仲裁器。PCI主設備使用PCI總線進行數據傳遞時,需要

51、首先置REQ#信號有效,向PCI總線仲裁器發出總線申請,當PCI總線仲裁器允許PCI主設備獲得PCI總線的使用權后,將置GNT#信號為有效,并將其發送給指定的PCI主設備。而PCI主設備在獲得總線使用權之后,將可以置FRAME#信號有效,與PCI從設備進行數據通信。1.2.4 中斷請求等其他信號PCI總線提供了INTA#、INTB#、INTC#和INTD#四個中斷請求信號,PCI設備借助這些中斷請求信號,使用電平觸發方式向處理器提交中斷請求。當這些中斷請求信號為低時,PCI設備將向處理器提交中斷請求;當處理器執行中斷服務程序清除PCI設備的中斷請求后,PCI設備將該信號置高2,結束當

52、前中斷請求。PCI總線規定單功能設備只能使用INTA#信號,而多功能設備才能使用INTB#/C#/D#信號。PCI設備的這些中斷請求信號可以通過某種規則進行線與,之后與中斷控制器的中斷請求信號線相連。而處理器系統需要預先知道這個規則,以便正確處理來自不同PCI設備的中斷請求,這個規則也被稱為中斷路由表,有關中斷路由表的詳細描述見第1.4.2節。PCI總線在進行數據傳遞過程時,難免會出現各種各樣的錯誤,因此PCI總線提供了一些錯誤信號,如PERR#和SERR#信號。其中當PERR#信號有效時,表示數據傳送過程中出現奇偶校驗錯(Special Cycle周期除外);而當SERR#信號有效時,表示當

53、前處理器系統出現了三種錯誤可能,分別為地址奇偶校驗錯,在Special Cycle周期中出現數據奇偶校驗錯,或者系統出現其他嚴重錯誤。如果PCI總線支持64位模式,還需要提供AD63:32、C/BE7:4、REQ64、ACK64和PAR64這些信號。此外PCI總線還有一些與JTAG、SMBCLK以及66MHz使能等信號,本章并不關心這些信號。1 雙地址周期在第一、二個時鐘周期,都傳送地址。2 INTx#這組信號為開漏輸出,當所有的驅動源不驅動該信號時,該信號由上拉電阻驅動為高。1.4 PCI總線的中斷機制  (2011-04-25 12:18:06)轉載

54、標簽: 雜談分類: 淺談PCIe體系結構PCI總線使用INTA#、INTB#、INTC#和INTD#信號向處理器發出中斷請求。這些中斷請求信號為低電平有效,并與處理器的中斷控制器連接。在PCI體系結構中,這些中斷信號屬于邊帶信號(Sideband Signals),PCI總線規范并沒有明確規定在一個處理器系統中如何使用這些信號,因為這些信號對于PCI總線是可選信號。PCI設備還可以使用MSI機制向處理器提交中斷請求,而不使用這組中斷信號。有關MSI機制的詳細說明見第8章。1.4.1 中斷信號與中斷控制器的連接關系不同的處理器使用的中斷控制器不同,如x86處理器使用

55、APIC(Advanced Programmable Interrupt Controller)中斷控制器,而PowerPC處理器使用MPIC(Multiprocessor Interrupt Controller)中斷控制器。這些中斷控制器都提供了一些外部中斷請求引腳IRQ_PINx#。外部設備,包括PCI設備可以使用這些引腳向處理器提交中斷請求。但是PCI總線規范沒有規定PCI設備的INTx信號如何與中斷控制器的IRQ_PINx#信號相連,這為系統軟件的設計帶來了一定的困難,為此系統軟件使用中斷路由表存放PCI設備的INTx信號與中斷控制器的連接關系。在x86處理器系統中,BIOS可以提供

56、這個中斷路由表,而在PowerPC處理器中Firmware也可以提供這個中斷路由表。在一些簡單的嵌入式處理器系統中,Firmware并沒有提供中斷路由表,此時系統軟件開發者需要事先了解PCI設備的INTx信號與中斷控制器的連接關系。此時外部設備與中斷控制器的連接關系由硬件設計人員指定。我們假設在一個處理器系統中,共有3個PCI插槽(分別為PCI插槽A、B和C),這些PCI插槽與中斷控制器的IRQ_PINx引腳(分別為IRQW#、IRQX#、IRQY#和IRQZ#)可以按照圖15所示的拓撲結構進行連接。     采用圖15所示的拓撲結構時,PCI

57、插槽A、B、C的INTA#、INTB#和INTC#信號將分散連接到中斷控制器的IRQW#、IRQX#和IRQY#信號,而所有INTD#信號將共享一個IRQZ#信號。采用這種連接方式時,整個處理器系統使用的中斷請求信號,其負載較為均衡。而且這種連接方式保證了每一個插槽的INTA#信號都與一根獨立的IRQx#信號對應,從而提高了PCI插槽中斷請求的效率。在一個處理器系統中,多數PCI設備僅使用INTA#信號,很少使用INTB#和INTC#信號,而INTD#信號更是極少使用。在PCI總線中,PCI設備配置空間的Interrupt Pin寄存器記錄該設備究竟使用哪個INTx信號,該寄存器的詳細介紹見第

58、2.3.2節。1.4.2 中斷信號與PCI總線的連接關系在PCI總線中,INTx信號屬于邊帶信號。所謂邊帶信號是指這些信號在PCI總線中是可選信號,而且只能在一個處理器系統的內部使用,并不能離開這個處理器環境。PCI橋也不會處理這些邊帶信號。這給PCI設備將中斷請求發向處理器帶來了一些困難,特別是給掛接在PCI橋之下的PCI設備進行中斷請求帶來了一些麻煩。在一些嵌入式處理器系統中,這個問題較易解決。因為嵌入式處理器系統很清楚在當前系統中存在多少個PCI設備,這些PCI設備使用了哪些中斷資源。在多數嵌入式處理器系統中,PCI設備的數量小于中斷控制器提供的外部中斷請求引腳數,而且在嵌入式

59、系統中,多數PCI設備僅使用INTA#信號提交中斷請求。在這類處理器系統中,可能并不含有PCI橋,因而PCI設備的中斷請求信號與中斷控制器的連接關系較易確定。而在這類處理器系統中,即便存在PCI橋,來自PCI橋之下的PCI設備的中斷請求也較易處理。在多數情況下,嵌入式處理器系統使用的PCI設備僅使用INTA#信號進行中斷請求,所以只要將這些INTA#信號掛接到中斷控制器的獨立IRQ_PIN#引腳上即可。這樣每一個PCI設備都可以獨占一個單獨的中斷引腳。而在x86處理器系統中,這個問題需要BIOS參與來解決。在x86處理器系統中,有許多PCI插槽,處理器系統并不知道在這些插槽上將要掛接哪些PCI設備,而且也并不知道這些PCI設備到底需不需要使用所有的INTx#信號線。因此x86處理器系統必須要對各種情況進行處理。x86處理器系統還經常使用PCI橋進行PCI總線擴展,擴展出來的PCI總線還可能掛接一些PCI插槽,這些插槽上INTx#信號仍然需要處理。PCI橋規范并沒有要求橋片傳遞其下PCI設備的中斷請求。事實上多數PCI橋也沒有為下游PCI總線提供中斷引腳INTx#,管理其下游總線的PCI設備。但是PCI橋規范推薦使用表13建立下游PCI設備的INTx信號與上游PCI總線INTx信號之間的映射關系。 表13 PCI設備INTx#信號與PC

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論