PCI Express 體系結(jié)構(gòu)導(dǎo)讀
定 價:55 元
- 作者:王齊 著
- 出版時間:2010/3/1
- ISBN:9787111298229
- 出 版 社:機(jī)械工業(yè)出版社
- 中圖法分類:TP336
- 頁碼:443
- 紙張:膠版紙
- 版次:1
- 開本:16開
《PCI Express 體系結(jié)構(gòu)導(dǎo)讀》講述了與PCI及PCI Express總線相關(guān)的最為基礎(chǔ)的內(nèi)容,并介紹了一些必要的、與PCI總線相關(guān)的處理器體系結(jié)構(gòu)知識,這也是《PCI Express 體系結(jié)構(gòu)導(dǎo)讀》的重點所在。深入理解處理器體系結(jié)構(gòu)是理解PCI與PCI Express總線的重要基礎(chǔ)。
讀者通過對《PCI Express 體系結(jié)構(gòu)導(dǎo)讀》的學(xué)習(xí),可超越PCI與PCI Express總線自身的內(nèi)容,理解在一個通用處理器系統(tǒng)中局部總線的設(shè)計思路與實現(xiàn)方法,從而理解其他處理器系統(tǒng)使用的局部總線!禤CI Express 體系結(jié)構(gòu)導(dǎo)讀》適用于希望多了解一些硬件的軟件工程師,以及希望多了解一些軟件的硬件工程師,也可供電子工程和計算機(jī)類的研究生自學(xué)參考。
PCI Express總線是新一代的I/O局部總線標(biāo)準(zhǔn),是取代PCI總線的革命性總線架構(gòu)。PCI總線曾經(jīng)是PC體系結(jié)構(gòu)發(fā)展史上的一個里程碑,但是隨著技術(shù)的不斷發(fā)展,新涌現(xiàn)出的一些外部設(shè)備對傳輸速度和帶寬有更高的要求,如千兆和萬兆以太網(wǎng)、4Gb/8Gb的Fiber Channel和高速顯示設(shè)備等。同時有些外部設(shè)備對總線的服務(wù)質(zhì)量還有更嚴(yán)格的要求。PCI總線在設(shè)計之初并沒有考慮這些因素,因此并不能完全滿足這些外部設(shè)備的需要。
PCI Express總線正是在這種背景下應(yīng)運而生的。在2001年的春季英特爾開發(fā)者論壇上,英特爾公布了取代PCI總線的第三代I/O技術(shù),當(dāng)時被稱為“3GIO”。經(jīng)PCI-SIG審核,于2002年7月正式公布了第一版規(guī)范,并更名為PCI Express。從2004年開始,PCI Express總線逐漸全面取代PCI和AGP總線,成為新的局部總線工業(yè)標(biāo)準(zhǔn)。
與PCI總線的共享并行架構(gòu)不同,PCI Express總線使用高速串行傳送方式,能夠支持更高的頻率,連接的設(shè)備不再像PCI總線那樣共享總線帶寬。除此之外PCI Express總線還引人了一些新特性,如流量控制機(jī)制、服務(wù)質(zhì)量管理、熱插拔支持、數(shù)據(jù)完整性和新型錯誤處理機(jī)制等。而且PCI Express總線在系統(tǒng)軟件級與PCI總線保持兼容,最大程度上降低了系統(tǒng)軟件從原有的PCI總線體系結(jié)構(gòu)移植到PCI Express總線體系結(jié)構(gòu)的難度。
目前關(guān)于PCI Express總線規(guī)范的文獻(xiàn)和書籍已有多種,但多集中在介紹規(guī)范本身。對于廣大的開發(fā)者來說,能夠從處理器系統(tǒng)的角度了解PCI Express總線功能,無疑更有實用價值。無論是系統(tǒng)外部設(shè)備的開發(fā)、驅(qū)動程序的編寫,還是其他系統(tǒng)軟件的開發(fā),處理器系統(tǒng)始終處于核心位置。
本書正是從處理器系統(tǒng)的視角來講述PCI Express總線的體系結(jié)構(gòu),較為細(xì)致地介紹了如何使用FPGA實現(xiàn)一個基于PCIe總線的外部設(shè)備,以及基于Linux系統(tǒng)的PCI/PCI Express總線驅(qū)動程序和設(shè)備驅(qū)動程序。本書對于PCI Express總線相關(guān)的軟硬件開發(fā)人員具有很高的參考價值。
PCI Express總線規(guī)范仍在不斷發(fā)展?偟膩碚f,PCI Express總線規(guī)范提出的最新技術(shù)概念往往在英特爾的x86處理器系統(tǒng)和外部設(shè)備中最先出現(xiàn)。本書的作者王齊先生,目前工作于英特爾開源技術(shù)研究中心,對處理器體系結(jié)構(gòu)和Linux系統(tǒng)核心技術(shù)均有深入研究,相信本書的讀者能夠從他的經(jīng)驗分享中獲益。
序
前言
第Ⅰ篇 PCI體系結(jié)構(gòu)概述
第1章 PCI總線的基本知識
1.1 PCI總線的組成結(jié)構(gòu)
1.1.1 HOST主橋
1.1.2 PCI總線
1.1.3 PCI設(shè)備
1.1.4 HOST處理器
1.1.5 PCI總線的負(fù)載
1.2 PCI總線的信號定義
1.2.1 地址和數(shù)據(jù)信號
1.2.2 接口控制信號
1.2.3 仲裁信號
1.2.4 中斷請求等其他信號
1.3 PCI總線的存儲器讀寫總線事務(wù)
1.3.1 PCI總線事務(wù)的時序
1.3.2 Posted和NonPosted傳送方式
1.3.3 HOST處理器訪問PCI設(shè)備
1.3.4 PCI設(shè)備讀寫主存儲器
1.3.5 Delayed傳送方式
1.4 PCI總線的中斷機(jī)制
1.4.1 中斷信號與中斷控制器的連接關(guān)系
1.4.2 中斷信號與PCI總線的連接關(guān)系
1.4.3 中斷請求的同步
1.5 PCIX總線簡介
1.5.1 Split總線事務(wù)
1.5.2 總線傳送協(xié)議
1.5.3 基于數(shù)據(jù)塊的突發(fā)傳送
1.6 小結(jié)
第2章 PCI總線的橋與配置
2.1 存儲器域與PCI總線域
2.1.1 CPU域、DRAM域與存儲器域
2.1.2 PCI總線域
2.1.3 處理器域
2.2 HOST主橋
2.2.1 PCI設(shè)備配置空間的訪問機(jī)制
2.2.2 存儲器域地址空間到PCI總線域地址空間的轉(zhuǎn)換
2.2.3 PCI總線域地址空間到存儲器域地址空間的轉(zhuǎn)換
2.2.4 x86處理器的HOST主橋
2.3 PCI橋與PCI設(shè)備的配置空間
2.3.1 PCI橋
2.3.2 PCIAgent設(shè)備的配置空間
2.3.3 PCI橋的配置空間
2.4 PCI總線的配置
2.4.1 Type01h和Type00h配置請求
2.4.2 PCI總線配置請求的轉(zhuǎn)換原則
2.4.3 PCI總線樹Bus號的初始化
2.4.4 PCI總線Device號的分配
2.5 非透明PCI橋
2.5.1 Intel 21555中的配置寄存器
2.5.2 通過非透明橋片進(jìn)行數(shù)據(jù)傳遞
2.6 小結(jié)
第3章 PCI總線的數(shù)據(jù)交換
3.1 PCI設(shè)備BAR空間的初始化
3.1.1 存儲器地址與PCI總線地址的轉(zhuǎn)換
3.1.2 PCI設(shè)備BAR寄存器和PCI橋Base、Limit寄存器的初始化
3.2 PCI設(shè)備的數(shù)據(jù)傳遞
3.2.1 PCI設(shè)備的正向譯碼與負(fù)向譯碼
3.2.2 處理器到PCI設(shè)備的數(shù)據(jù)傳送
3.2.3 PCI設(shè)備的DMA操作
3.2.4 PCI橋的Combining、Merging和Collapsing
3.3 與Cache相關(guān)的PCI總線事務(wù)
3.3.1 Cache一致性的基本概念
3.3.2 PCI設(shè)備對不可Cache的存儲器空間進(jìn)行DMA讀寫
3.3.3 PCI設(shè)備對可Cache的存儲器空間進(jìn)行DMA讀寫
3.3.4 PCI設(shè)備進(jìn)行DMA寫時發(fā)生Cache命中
3.3.5 DMA寫時發(fā)生Cache命中的優(yōu)化
3.4 預(yù)讀機(jī)制
3.4.1 指令預(yù)讀
3.4.2 數(shù)據(jù)預(yù)讀
3.4.3 軟件預(yù)讀
3.4.4 硬件預(yù)讀
3.4.5 PCI總線的預(yù)讀機(jī)制
3.5 小結(jié)
第Ⅱ篇 PCIE xpress體系結(jié)構(gòu)概述
第4章 PCIe總線概述
4.1 PCIe總線的基礎(chǔ)知識
4.1.1 端到端的數(shù)據(jù)傳遞
4.1.2 PCIe總線使用的信號
4.1.3 PCIe總線的層次結(jié)構(gòu)
4.1.4 PCIe鏈路的擴(kuò)展
4.1.5 PCIe設(shè)備的初始化
4.2 PCIe體系結(jié)構(gòu)的組成部件
4.2.1 基于PCIe架構(gòu)的處理器系統(tǒng)
4.2.2 RC的組成結(jié)構(gòu)
4.2.3 Switch
4.2.4 VC和端口仲裁
4.2.5 PCIe_t0.PCI/PCI.x橋片
4.3 PCIe設(shè)備的擴(kuò)展配置空間
4.3.1 Power Management Capability結(jié)構(gòu)
4.3.2 PCI Express CapaJbility結(jié)構(gòu)
4.3.3 PCI Express Extended Capabilities結(jié)構(gòu)
4.4 小結(jié)
第5章 Montevilna的MCH和ICH
5.1 PCI總線0的Device0設(shè)備
5.1.1 EPBAR寄存器
5.1.2 MCHBAR寄存器
5.1.3 其他寄存器
5.2 Montevina平臺的存儲器空間的組成結(jié)構(gòu)
5.2.1 Legacy地址空間
5.2.2 DRAM域
5.2.3 存儲器域
5.3 存儲器域的PCI總線地址空間
5.3.1 PCI設(shè)備使用的地址空間
5.3.2 PCIe總線的配置空間
5.4 小結(jié)
第6章 PCIe總線的事務(wù)層
6.1 TLP的格式
6.1.1 通用TLP頭的Fmt字段和Type字段
6.1.2 TC字段
6.1.3 Attr字段
6.1.4 通用TLP頭中的其他字段
6.2 FLP的路由
6.2.1 基于地址的路由
6.2.2 基于ID的路由
6.2.3 隱式路由
6.3 存儲器、I/O和配置讀寫請求TLP
6.3.1 存儲器讀寫請求TLP
6.3.2 完成報文
6.3.3 配置讀寫請求TLP
6.3.4 消息請求報文
6.3.5 PCIe總線的原子操作
6.3.6 TLP Processing Hint
6.4 TLP中與數(shù)據(jù)負(fù)載相關(guān)的參數(shù)
6.4.1 Max-Payload-Size參數(shù)
6.4.2 Max-Read-Request-Size參數(shù)
6.4.3 RCB參數(shù)
6.5 小結(jié)
第7章 PCIe總線的數(shù)據(jù)鏈路層與物理層
7.1 數(shù)據(jù)鏈路層的組成結(jié)構(gòu)
7.1.1 數(shù)據(jù)鏈路層的狀態(tài)
7.1.2 事務(wù)層如何處理DL_Down和DL_Up狀態(tài)
7.1.3 DLLP的格式
7.2 ACK/NAK協(xié)議
7.2.1 發(fā)送端如何使用ACK/NAK協(xié)議
7.2.2 接收端如何使用ACK/NAK協(xié)議
7.2.3 數(shù)據(jù)鏈路層發(fā)送報文的順序
7.3 物理層簡介
7.3.1 PCIe鏈路的差分信號
7.3.2 物理層的組成結(jié)構(gòu)
7.3.3 8/10b編碼與解碼
7.4 小結(jié)
第8章 PCIe總線的鏈路訓(xùn)練與電源管理
8.1 PCIe鏈路訓(xùn)練簡介
8.1.1 鏈路訓(xùn)練使用的字符序列
8.1.2 Electrical Idle狀態(tài)
8.1.3 Receivel Detect識別邏輯
8.2 LTSSM狀態(tài)機(jī)
8.2.1 Detect狀態(tài)
8.2.2 Polling狀態(tài)
8.2.3 Configuration狀態(tài)
8.2.4 Recovery狀態(tài)
8.2.5 LTSSM的其他狀態(tài)
8.3 PCIe總線的ASPM
8.3.1 與電源管理相關(guān)的鏈路狀態(tài)
8.3.2 IJD狀態(tài)
8.3.3 LDs狀態(tài)
8.3.4 L1狀態(tài)
8.3.5 L2狀態(tài)
8.4 PCIPM機(jī)制
8.4.1 PCIe設(shè)備的D-State
8.4.2 D-State的狀態(tài)遷移
8.5 小結(jié)
第9章 流量控制
9.1 流量控制的基本原理
9.1.1 Rate-Based流量控制
9.1.2 Credit-Based流量控制
9.2 Credit-Based機(jī)制使用的算法
9.2.1 N123算法和N123+算法
9.2.2 N23算法
9.2.3 流量控制機(jī)制的緩沖管理
9.3 PCIe總線的流量控制
9.3.1 PCIe總線流量控制的緩存管理
9.3.2 Current節(jié)點的Credit
9.3.3 VC的初始化
9.3.4 PCIe設(shè)備如何使用FCF
9.4 小結(jié)
第10章 MSI和MSI-×中斷機(jī)制
10.1 MSI/MSI-X Capability結(jié)構(gòu)
10.1.1 MSI Capability結(jié)構(gòu)
10.1.2 MSI-X Capability結(jié)構(gòu)
10.2 PowerPC處理器如何處理MSI中斷請求
10.2.1 I中斷機(jī)制使用的寄存器
10.2.2 系統(tǒng)軟件如何初始化PCIe設(shè)備的MSI Capability結(jié)構(gòu)
10.3 x86處理器如何處理MSI-X中斷請求
10.3.1 Message Address字段和Message Data字段的格式
10.3.2 FSB Interrupt Message總線事務(wù)
10.4 小結(jié)
第11章 PCI/PCIe總線的序
11.1 生產(chǎn)/消費者模型
11.1.1 生產(chǎn)/消費者的工作原理
11.1.2 生產(chǎn)/消費者模型在PCI/PCIe總線中的實現(xiàn)
11.2 PCI總線的死鎖
11.2.1 緩沖管理引發(fā)的死鎖
11.2.2 數(shù)據(jù)傳送序引發(fā)的死鎖
11.3 PCI總線的序
11.3.1 PCI總線序的通用規(guī)則
11.3.2 Delayed總線事務(wù)的傳送規(guī)則
11.3.3 PCI總線事務(wù)通過PCI橋的順序
11.3.4 LOCK,Delayed和Posted總線事務(wù)間的關(guān)系
11.4 PCIe總線的序
11.4.1 TLP傳送的序
11.4.2 ID-Base Ordering
11.4.3 MSI報文的序
11.5 小結(jié)
第12章 PCIe總線的應(yīng)用
12.1 Capric卡的工作原理
12.1.1 BAR空間
12.1.2 Capric卡的初始化
12.1.3 DMA寫
12.1.4 DMA讀
12.1.5 中斷請求
12.2 Capric卡的數(shù)據(jù)傳遞
12.2.1 DMA寫使用的TLP
12.2.2 DMA讀使用的TLP
12.2.3 Capric卡的中斷請求
12.3 基于PCIe總線的設(shè)備驅(qū)動
12.3.1 Caprie卡驅(qū)動程序的加載與卸載
12.3.2 Caprie卡的初始化與關(guān)閉
12.3.3 Capric卡的DMA讀寫操作
12.3.4 Capric卡的中斷處理
12.3.5 存儲器地址到PCI總線地址的轉(zhuǎn)換
12.3.6 存儲器與Cache的同步
12.4 Capric卡的延時與帶寬
12.4.1 TLP的傳送開銷
12.4.2 PCIe設(shè)備的DMA讀寫延時
12.4.3 Capric卡的優(yōu)化
12.5 小結(jié)
第13章 PCIe總線與虛擬化技術(shù)
13.1 I0MMU
13.1.1 IOMMU的工作原理
13.1.2 IA處理器的VT-d
13.1.3 AMD處理器的IOMMU
13.2 ATS(Address Translation Services)
13.2.1 TLP的AT字段
13.2.2 地址轉(zhuǎn)換請求
13.2.3 Invalidate ATC
13.3 SR.1 0V與MR-IOV
13.3.1 SR-IOV技術(shù)
13.3.2 MR-IOV技術(shù)
13.4 小結(jié)
第Ⅲ篇 Linux與PCI總線
第14章 Linux PCI的初始化過程
14.1 Linuxx86對PCI總線的初始化
14.1.1 pcibus_class_init與pci_driver_init
……
第15章 LinuxPCI的中斷處理
參考文獻(xiàn)
在處理器系統(tǒng)中,含有PCI總線和PCI總線樹這兩個概念。這兩個概念并不相同,在一棵PCI總線樹中可能具有多條PCI總線,而具有血緣關(guān)系的PCI總線組成一棵PCI總線樹。如在圖1-1所示的處理器系統(tǒng)中,PCI總線x樹具有兩條PCI:總線,分別為PCI總線如和PCI總線x1。而PCI總線y樹中僅有一條。PCI總線。
PCI總線由HOST主橋或者:PCI橋管理,用來連接各類設(shè)備,如聲卡、網(wǎng)卡和IDE接口卡等。在一個處理器系統(tǒng)中,可以通過PCI橋擴(kuò)展PCI總線,并形成具有血緣關(guān)系的多級PCI總線,從而形成PCI總線樹型結(jié)構(gòu)。在處理器系統(tǒng)中有幾個HOST。主橋,就有幾棵這樣的PCI總線樹,而每一棵PCI總線樹都與一個PCI總線域?qū)?yīng)。
與HOST主橋直接連接的PCI總線通常被命名為PCI總線0考慮到在一個處理器系統(tǒng)中可能有多個主橋,圖1-1將HOST主橋X推出的PCI總線命名為X0總線,而將PCI橋x1擴(kuò)展出的PCI總線稱為X1總線,將HOST主橋y推出的PCI總線稱為y0~yn。分屬不同PCI總線樹的設(shè)備,其使用的PCI總線地址空間分屬不同的PCI總線域空間。
3 PCI設(shè)備
在PCI總線中有三類設(shè)備:PCI主設(shè)備、PCI從設(shè)備和橋設(shè)備。其中PCI從設(shè)備只能被動地接收來自HOST主橋或者其他PCI設(shè)備的讀寫請求;而PCI主設(shè)備可以通過總線仲裁獲得PCI總線的使用權(quán),主動地向其他PCI設(shè)備或者主存儲器發(fā)起存儲器讀寫請求。而橋設(shè)備的主要作用是管理下游的PCI總線,并轉(zhuǎn)發(fā)上下游總線之間的總線事務(wù)。
一個PCI設(shè)備可以既是主設(shè)備也是從設(shè)備,但是在同一個時刻,這個:PCI設(shè)備或者為主設(shè)備或者為從設(shè)備。:PCI總線規(guī)范將PCI主從設(shè)備統(tǒng)稱為PCI Agent設(shè)備。在處理器系統(tǒng)中常見的PCI網(wǎng)卡、顯卡、聲卡等設(shè)備都屬于PCI Agent設(shè)備。
在:PCI,總線中,HOST主橋是一個特殊的PCI設(shè)備,該設(shè)備可以獲取PCI總線的控制權(quán)訪問PCI設(shè)備,也可以被PCI設(shè)備訪問。但是HOST主橋并不是PCI設(shè)備。PCI規(guī)范也沒有規(guī)定如何設(shè)計HOST主橋。
在PCI總線中,還有一類特殊的設(shè)備,即橋設(shè)備。它包括PCI:橋、PCI-to-(E)ISA橋和PCI-to-Cardbus橋。本書重點介紹PCI橋,而不介紹其他橋設(shè)備的實現(xiàn)原理。PCI橋的存在使PCI總線極具擴(kuò)展性,處理器系統(tǒng)可以使用PCI橋進(jìn)一步擴(kuò)展PCI總線。
PCI橋的出現(xiàn)使得采用PCI總線進(jìn)行大規(guī)模系統(tǒng)互連成為可能。但是在目前已經(jīng)實現(xiàn)的大規(guī)模處理器系統(tǒng)中,并沒有使用PCI總線進(jìn)行處理器系統(tǒng)與處理器系統(tǒng)之間的大規(guī);ミB。因為PCI總線是一個以HOST主橋為根的樹型結(jié)構(gòu),使用主從架構(gòu),因而不易實現(xiàn)多處理器系統(tǒng)間的對等互連。
即便如此PCI橋仍然是PCI總線規(guī)范的精華所在,掌握PCI橋是深入理解PCI體系結(jié)構(gòu)的基礎(chǔ)。PCI橋可以連接兩條PCI總線,上游PCI總線和下游PCI總線,這兩個PCI總線屬于同一個PCI總線域,使用PCI橋擴(kuò)展的所有PCI總線都同屬于一個PCI總線域。