PCI Express 體系結(jié)構(gòu)導(dǎo)讀
定 價(jià):55 元
當(dāng)前圖書(shū)已被 4 所學(xué)校薦購(gòu)過(guò)!
查看明細(xì)
- 作者:王齊 著
- 出版時(shí)間:2010/3/1
- ISBN:9787111298229
- 出 版 社:機(jī)械工業(yè)出版社
- 中圖法分類:TP336
- 頁(yè)碼:443
- 紙張:膠版紙
- 版次:1
- 開(kāi)本:16開(kāi)
《PCI Express 體系結(jié)構(gòu)導(dǎo)讀》講述了與PCI及PCI Express總線相關(guān)的最為基礎(chǔ)的內(nèi)容,并介紹了一些必要的、與PCI總線相關(guān)的處理器體系結(jié)構(gòu)知識(shí),這也是《PCI Express 體系結(jié)構(gòu)導(dǎo)讀》的重點(diǎn)所在。深入理解處理器體系結(jié)構(gòu)是理解PCI與PCI Express總線的重要基礎(chǔ)。
讀者通過(guò)對(duì)《PCI Express 體系結(jié)構(gòu)導(dǎo)讀》的學(xué)習(xí),可超越PCI與PCI Express總線自身的內(nèi)容,理解在一個(gè)通用處理器系統(tǒng)中局部總線的設(shè)計(jì)思路與實(shí)現(xiàn)方法,從而理解其他處理器系統(tǒng)使用的局部總線!禤CI Express 體系結(jié)構(gòu)導(dǎo)讀》適用于希望多了解一些硬件的軟件工程師,以及希望多了解一些軟件的硬件工程師,也可供電子工程和計(jì)算機(jī)類的研究生自學(xué)參考。
PCI Express總線是新一代的I/O局部總線標(biāo)準(zhǔn),是取代PCI總線的革命性總線架構(gòu)。PCI總線曾經(jīng)是PC體系結(jié)構(gòu)發(fā)展史上的一個(gè)里程碑,但是隨著技術(shù)的不斷發(fā)展,新涌現(xiàn)出的一些外部設(shè)備對(duì)傳輸速度和帶寬有更高的要求,如千兆和萬(wàn)兆以太網(wǎng)、4Gb/8Gb的Fiber Channel和高速顯示設(shè)備等。同時(shí)有些外部設(shè)備對(duì)總線的服務(wù)質(zhì)量還有更嚴(yán)格的要求。PCI總線在設(shè)計(jì)之初并沒(méi)有考慮這些因素,因此并不能完全滿足這些外部設(shè)備的需要。
PCI Express總線正是在這種背景下應(yīng)運(yùn)而生的。在2001年的春季英特爾開(kāi)發(fā)者論壇上,英特爾公布了取代PCI總線的第三代I/O技術(shù),當(dāng)時(shí)被稱為“3GIO”。經(jīng)PCI-SIG審核,于2002年7月正式公布了第一版規(guī)范,并更名為PCI Express。從2004年開(kāi)始,PCI Express總線逐漸全面取代PCI和AGP總線,成為新的局部總線工業(yè)標(biāo)準(zhǔn)。
與PCI總線的共享并行架構(gòu)不同,PCI Express總線使用高速串行傳送方式,能夠支持更高的頻率,連接的設(shè)備不再像PCI總線那樣共享總線帶寬。除此之外PCI Express總線還引人了一些新特性,如流量控制機(jī)制、服務(wù)質(zhì)量管理、熱插拔支持、數(shù)據(jù)完整性和新型錯(cuò)誤處理機(jī)制等。而且PCI Express總線在系統(tǒng)軟件級(jí)與PCI總線保持兼容,最大程度上降低了系統(tǒng)軟件從原有的PCI總線體系結(jié)構(gòu)移植到PCI Express總線體系結(jié)構(gòu)的難度。
目前關(guān)于PCI Express總線規(guī)范的文獻(xiàn)和書(shū)籍已有多種,但多集中在介紹規(guī)范本身。對(duì)于廣大的開(kāi)發(fā)者來(lái)說(shuō),能夠從處理器系統(tǒng)的角度了解PCI Express總線功能,無(wú)疑更有實(shí)用價(jià)值。無(wú)論是系統(tǒng)外部設(shè)備的開(kāi)發(fā)、驅(qū)動(dòng)程序的編寫(xiě),還是其他系統(tǒng)軟件的開(kāi)發(fā),處理器系統(tǒng)始終處于核心位置。
本書(shū)正是從處理器系統(tǒng)的視角來(lái)講述PCI Express總線的體系結(jié)構(gòu),較為細(xì)致地介紹了如何使用FPGA實(shí)現(xiàn)一個(gè)基于PCIe總線的外部設(shè)備,以及基于Linux系統(tǒng)的PCI/PCI Express總線驅(qū)動(dòng)程序和設(shè)備驅(qū)動(dòng)程序。本書(shū)對(duì)于PCI Express總線相關(guān)的軟硬件開(kāi)發(fā)人員具有很高的參考價(jià)值。
PCI Express總線規(guī)范仍在不斷發(fā)展?偟膩(lái)說(shuō),PCI Express總線規(guī)范提出的最新技術(shù)概念往往在英特爾的x86處理器系統(tǒng)和外部設(shè)備中最先出現(xiàn)。本書(shū)的作者王齊先生,目前工作于英特爾開(kāi)源技術(shù)研究中心,對(duì)處理器體系結(jié)構(gòu)和Linux系統(tǒng)核心技術(shù)均有深入研究,相信本書(shū)的讀者能夠從他的經(jīng)驗(yàn)分享中獲益。
序
前言
第Ⅰ篇 PCI體系結(jié)構(gòu)概述
第1章 PCI總線的基本知識(shí)
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總線的信號(hào)定義
1.2.1 地址和數(shù)據(jù)信號(hào)
1.2.2 接口控制信號(hào)
1.2.3 仲裁信號(hào)
1.2.4 中斷請(qǐng)求等其他信號(hào)
1.3 PCI總線的存儲(chǔ)器讀寫(xiě)總線事務(wù)
1.3.1 PCI總線事務(wù)的時(shí)序
1.3.2 Posted和NonPosted傳送方式
1.3.3 HOST處理器訪問(wèn)PCI設(shè)備
1.3.4 PCI設(shè)備讀寫(xiě)主存儲(chǔ)器
1.3.5 Delayed傳送方式
1.4 PCI總線的中斷機(jī)制
1.4.1 中斷信號(hào)與中斷控制器的連接關(guān)系
1.4.2 中斷信號(hào)與PCI總線的連接關(guān)系
1.4.3 中斷請(qǐng)求的同步
1.5 PCIX總線簡(jiǎn)介
1.5.1 Split總線事務(wù)
1.5.2 總線傳送協(xié)議
1.5.3 基于數(shù)據(jù)塊的突發(fā)傳送
1.6 小結(jié)
第2章 PCI總線的橋與配置
2.1 存儲(chǔ)器域與PCI總線域
2.1.1 CPU域、DRAM域與存儲(chǔ)器域
2.1.2 PCI總線域
2.1.3 處理器域
2.2 HOST主橋
2.2.1 PCI設(shè)備配置空間的訪問(wèn)機(jī)制
2.2.2 存儲(chǔ)器域地址空間到PCI總線域地址空間的轉(zhuǎn)換
2.2.3 PCI總線域地址空間到存儲(chǔ)器域地址空間的轉(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配置請(qǐng)求
2.4.2 PCI總線配置請(qǐng)求的轉(zhuǎn)換原則
2.4.3 PCI總線樹(shù)Bus號(hào)的初始化
2.4.4 PCI總線Device號(hào)的分配
2.5 非透明PCI橋
2.5.1 Intel 21555中的配置寄存器
2.5.2 通過(guò)非透明橋片進(jìn)行數(shù)據(jù)傳遞
2.6 小結(jié)
第3章 PCI總線的數(shù)據(jù)交換
3.1 PCI設(shè)備BAR空間的初始化
3.1.1 存儲(chǔ)器地址與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è)備對(duì)不可Cache的存儲(chǔ)器空間進(jìn)行DMA讀寫(xiě)
3.3.3 PCI設(shè)備對(duì)可Cache的存儲(chǔ)器空間進(jìn)行DMA讀寫(xiě)
3.3.4 PCI設(shè)備進(jìn)行DMA寫(xiě)時(shí)發(fā)生Cache命中
3.3.5 DMA寫(xiě)時(shí)發(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ǔ)知識(shí)
4.1.1 端到端的數(shù)據(jù)傳遞
4.1.2 PCIe總線使用的信號(hào)
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平臺(tái)的存儲(chǔ)器空間的組成結(jié)構(gòu)
5.2.1 Legacy地址空間
5.2.2 DRAM域
5.2.3 存儲(chǔ)器域
5.3 存儲(chǔ)器域的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 存儲(chǔ)器、I/O和配置讀寫(xiě)請(qǐng)求TLP
6.3.1 存儲(chǔ)器讀寫(xiě)請(qǐng)求TLP
6.3.2 完成報(bào)文
6.3.3 配置讀寫(xiě)請(qǐng)求TLP
6.3.4 消息請(qǐng)求報(bào)文
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ā)送報(bào)文的順序
7.3 物理層簡(jiǎn)介
7.3.1 PCIe鏈路的差分信號(hào)
7.3.2 物理層的組成結(jié)構(gòu)
7.3.3 8/10b編碼與解碼
7.4 小結(jié)
第8章 PCIe總線的鏈路訓(xùn)練與電源管理
8.1 PCIe鏈路訓(xùn)練簡(jiǎn)介
8.1.1 鏈路訓(xùn)練使用的字符序列
8.1.2 Electrical Idle狀態(tài)
8.1.3 Receivel Detect識(shí)別邏輯
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é)點(diǎn)的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中斷請(qǐng)求
10.2.1 I中斷機(jī)制使用的寄存器
10.2.2 系統(tǒng)軟件如何初始化PCIe設(shè)備的MSI Capability結(jié)構(gòu)
10.3 x86處理器如何處理MSI-X中斷請(qǐng)求
10.3.1 Message Address字段和Message Data字段的格式
10.3.2 FSB Interrupt Message總線事務(wù)
10.4 小結(jié)
第11章 PCI/PCIe總線的序
11.1 生產(chǎn)/消費(fèi)者模型
11.1.1 生產(chǎn)/消費(fèi)者的工作原理
11.1.2 生產(chǎn)/消費(fèi)者模型在PCI/PCIe總線中的實(shí)現(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ù)通過(guò)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報(bào)文的序
11.5 小結(jié)
第12章 PCIe總線的應(yīng)用
12.1 Capric卡的工作原理
12.1.1 BAR空間
12.1.2 Capric卡的初始化
12.1.3 DMA寫(xiě)
12.1.4 DMA讀
12.1.5 中斷請(qǐng)求
12.2 Capric卡的數(shù)據(jù)傳遞
12.2.1 DMA寫(xiě)使用的TLP
12.2.2 DMA讀使用的TLP
12.2.3 Capric卡的中斷請(qǐng)求
12.3 基于PCIe總線的設(shè)備驅(qū)動(dòng)
12.3.1 Caprie卡驅(qū)動(dòng)程序的加載與卸載
12.3.2 Caprie卡的初始化與關(guān)閉
12.3.3 Capric卡的DMA讀寫(xiě)操作
12.3.4 Capric卡的中斷處理
12.3.5 存儲(chǔ)器地址到PCI總線地址的轉(zhuǎn)換
12.3.6 存儲(chǔ)器與Cache的同步
12.4 Capric卡的延時(shí)與帶寬
12.4.1 TLP的傳送開(kāi)銷
12.4.2 PCIe設(shè)備的DMA讀寫(xiě)延時(shí)
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)換請(qǐng)求
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的初始化過(guò)程
14.1 Linuxx86對(duì)PCI總線的初始化
14.1.1 pcibus_class_init與pci_driver_init
……
第15章 LinuxPCI的中斷處理
參考文獻(xiàn)
在處理器系統(tǒng)中,含有PCI總線和PCI總線樹(shù)這兩個(gè)概念。這兩個(gè)概念并不相同,在一棵PCI總線樹(shù)中可能具有多條PCI總線,而具有血緣關(guān)系的PCI總線組成一棵PCI總線樹(shù)。如在圖1-1所示的處理器系統(tǒng)中,PCI總線x樹(shù)具有兩條PCI:總線,分別為PCI總線如和PCI總線x1。而PCI總線y樹(shù)中僅有一條。PCI總線。
PCI總線由HOST主橋或者:PCI橋管理,用來(lái)連接各類設(shè)備,如聲卡、網(wǎng)卡和IDE接口卡等。在一個(gè)處理器系統(tǒng)中,可以通過(guò)PCI橋擴(kuò)展PCI總線,并形成具有血緣關(guān)系的多級(jí)PCI總線,從而形成PCI總線樹(shù)型結(jié)構(gòu)。在處理器系統(tǒng)中有幾個(gè)HOST。主橋,就有幾棵這樣的PCI總線樹(shù),而每一棵PCI總線樹(shù)都與一個(gè)PCI總線域?qū)?yīng)。
與HOST主橋直接連接的PCI總線通常被命名為PCI總線0考慮到在一個(gè)處理器系統(tǒng)中可能有多個(gè)主橋,圖1-1將HOST主橋X推出的PCI總線命名為X0總線,而將PCI橋x1擴(kuò)展出的PCI總線稱為X1總線,將HOST主橋y推出的PCI總線稱為y0~yn。分屬不同PCI總線樹(shù)的設(shè)備,其使用的PCI總線地址空間分屬不同的PCI總線域空間。
3 PCI設(shè)備
在PCI總線中有三類設(shè)備:PCI主設(shè)備、PCI從設(shè)備和橋設(shè)備。其中PCI從設(shè)備只能被動(dòng)地接收來(lái)自HOST主橋或者其他PCI設(shè)備的讀寫(xiě)請(qǐng)求;而PCI主設(shè)備可以通過(guò)總線仲裁獲得PCI總線的使用權(quán),主動(dòng)地向其他PCI設(shè)備或者主存儲(chǔ)器發(fā)起存儲(chǔ)器讀寫(xiě)請(qǐng)求。而橋設(shè)備的主要作用是管理下游的PCI總線,并轉(zhuǎn)發(fā)上下游總線之間的總線事務(wù)。
一個(gè)PCI設(shè)備可以既是主設(shè)備也是從設(shè)備,但是在同一個(gè)時(shí)刻,這個(gè):PCI設(shè)備或者為主設(shè)備或者為從設(shè)備。:PCI總線規(guī)范將PCI主從設(shè)備統(tǒng)稱為PCI Agent設(shè)備。在處理器系統(tǒng)中常見(jiàn)的PCI網(wǎng)卡、顯卡、聲卡等設(shè)備都屬于PCI Agent設(shè)備。
在:PCI,總線中,HOST主橋是一個(gè)特殊的PCI設(shè)備,該設(shè)備可以獲取PCI總線的控制權(quán)訪問(wèn)PCI設(shè)備,也可以被PCI設(shè)備訪問(wèn)。但是HOST主橋并不是PCI設(shè)備。PCI規(guī)范也沒(méi)有規(guī)定如何設(shè)計(jì)HOST主橋。
在PCI總線中,還有一類特殊的設(shè)備,即橋設(shè)備。它包括PCI:橋、PCI-to-(E)ISA橋和PCI-to-Cardbus橋。本書(shū)重點(diǎn)介紹PCI橋,而不介紹其他橋設(shè)備的實(shí)現(xiàn)原理。PCI橋的存在使PCI總線極具擴(kuò)展性,處理器系統(tǒng)可以使用PCI橋進(jìn)一步擴(kuò)展PCI總線。
PCI橋的出現(xiàn)使得采用PCI總線進(jìn)行大規(guī)模系統(tǒng)互連成為可能。但是在目前已經(jīng)實(shí)現(xiàn)的大規(guī)模處理器系統(tǒng)中,并沒(méi)有使用PCI總線進(jìn)行處理器系統(tǒng)與處理器系統(tǒng)之間的大規(guī);ミB。因?yàn)镻CI總線是一個(gè)以HOST主橋?yàn)楦臉?shù)型結(jié)構(gòu),使用主從架構(gòu),因而不易實(shí)現(xiàn)多處理器系統(tǒng)間的對(duì)等互連。
即便如此PCI橋仍然是PCI總線規(guī)范的精華所在,掌握PCI橋是深入理解PCI體系結(jié)構(gòu)的基礎(chǔ)。PCI橋可以連接兩條PCI總線,上游PCI總線和下游PCI總線,這兩個(gè)PCI總線屬于同一個(gè)PCI總線域,使用PCI橋擴(kuò)展的所有PCI總線都同屬于一個(gè)PCI總線域。