1. 概述
1)PCIe(Peripheral Component Interconnect Express)是繼ISA和PCI總線之后的第三代I/O總線。一般翻譯為周邊設備高速連接標準。
2)PCIe協議是一種端對端的互連協議,提供了高速傳輸帶寬的解決方案。目前PCIe已經發展到第四代PCIe4.0, 每一代的發展,最明顯的特征就是速率翻倍。
3)是Intel公司1991年推出的。批準組織:PCI SIG (PCI興趣小組)
4)一個x16插槽可以運行x1、x2、x4、x8、x16的卡
2. PCIe 布線規則
從金手指邊緣到PCIe芯片管腳的走線長度應限制在4英寸(約100MM)以內。
PCIe的PERP/N,PETP/N,PECKP/N是三個差分對線,注意保護(差分對之間的距離、差分對和所有非PCIe信號的距離是20MIL,以減少有害串擾的影響和電磁干擾(EMI)的影響。芯片及PCIe信號線反面避免高頻信號線,最好全GND)。
差分對中2條走線的長度差最多5MIL。2條走線的每一部分都要求長度匹配。差分線的線寬7MIL,差分對中2條走線的間距是7MIL。
當PCIe信號對走線換層時,應在靠近信號對過孔處放置地信號過孔,每對信號建議置1到3個地信號過孔。PCIE差分對采用25/14的過孔,并且兩個過孔必須放置的相互對稱。
PCIe需要在發射端和接收端之間交流耦合,差分對的兩個交流耦合電容必須有相同的封裝尺寸,位置要對稱且要擺放在靠近金手指這邊,電容值推薦為0.1uF。
SCL等信號線不能穿越PCIe主芯片。
3. PCIe 分類、速度
按lane( 車道 --》 通道 )的個數分有 x1 x2 x4 x8 x16 (最大可支持32個通道)
按代來分 有 gen1 gen2 gen3 gen4 gen5
速度:
PCIe 與 PCI 之間的區別
速度上
PCI的工作頻率分為33MHz和66MHz,最大吞吐率 266MB/s
PCIe如3中描述,PCIe 1.0 x1 的吞吐率就達到了250MB/s
傳輸方式上
PCI 是并行數據傳輸,一次傳輸4字節/8字節,半雙工
PCIe是串行數據傳輸,全雙工
硬件上
傳輸PCI信號的是普通電平
傳輸PCIe信號的是差分電平
鏈路上
PCI是總線的連接方式
PCIe是點對點的連接方式
點對點拓撲是什么樣的?
PCIe的物理連接方式:
5. 編碼方式介紹
PCIe gen1 和 PCIe gen2 采用的編解碼方式是 8b/10b,PCIe gen3 和 之后的 采用的是 128b/130b 的編碼方式。
8b/10b 意思是說,當我們要傳輸8b的數據時,實際在通道上傳輸的是10b的數據,解碼的時候,我們希望得到的是8b的有效數據。這樣,相當于有效的帶寬是實際帶寬的 80%。
同理128b/130b,是傳輸128bit數據實際線路中傳輸的是130bit數據。
速率圖中的單位間的關系:
傳輸速率單位 GT/s,表示 千兆傳輸/秒,是實際每秒傳輸的位數,他不包括額外吞吐量的開銷位。
兩個例子:
PCIe gen1 x1 傳輸速率 2.5GT/s = 2500MT/s = ( 2500 / 10 ) MB/s
PCIe gen3 x1 傳輸速率 8GT/s = 8000MT/s = ( 8000 / 130 ) x ( 128/8 ) MB/s= 984.6153.。. MB/s
6. inbound 和 outbound
在PCIe設備和系統內存互相訪問時,outbound是指CPU到設備方向;inbound指Device--》 RC(CPU端)方向。從這個概念上說,設備(device)都是外部的,沒有內部設備之說。CPU讀寫RC 端的寄存器時,還是屬于片上系統的范圍,所以既不是inbound 也不是outbound。
7. PCI 配置空間
PCI設備擁有256B的配置空間,PCIe還提供另外4KB的擴展,這256B的配置空間中前64B是規范了的,其他的字節是各個廠商自己定義的。
7.1 PCI 設備的地址組成
① 總線號 --- 廠家ID
② 設備號 --- 設備ID
③ 功能號 --- 設備類
查看PCI設備的工具是 lspci
使用工具 lspci 查找 ①②③
》lspci
上邊輸出的每行開頭邏輯地址(XX:YY.Z)分別表示①②③,
其中一個PCI域能容納 256 個總線,
每個總線可以支持 32 個PCI設備,
每個PCI設備可容納 8 個PCI功能
》 lspci -t (以樹狀結構顯示)
》 lspci -x (打印出配置空間前64字節的內容)
》 lspci -s (指定哪個)
挑選一個 VGA compatible controller,如下
》 lspci -s 01:00.0 -vxx
字節序是小端格式,
[ 0 - 1 ] 表示的是廠家 ID,上圖的是 0x10de
[ 2 - 3 ] 表示的是設備 ID,上圖的是 0x0659
[ 9 - 11 ] 表示的是設備類型代碼,上圖的是 0x030000
[14]表示的是設備類型,00表示普通端點設備;01表示Bridge設備;02表示CardBus bridges
使用命令查詢PCI設備的廠商號和設備號
》 lspci -n -s 01:00.0
列出格式 【設備類型:廠商ID:設備ID】
設備類型介紹:
設備類型可以在 http://pci-ids.ucw.cz/read/PD 網站進行查詢,包括 classes、subclasses、Program interfaces 三部分,上圖中的設備類型是 030000依次對應下圖,03是 Device classes,00是Device subclasses,00是Program interfaces
7.2 基地址/BAR
BAR0: 0XF6000000
BAR1: 0XC000000C
。..。
BAR5:0X0000E001
有6個BAR空間,每個BAR記錄了該設備映射的一段地址空間,為了區分 IO空間和 IO內存,分開描述如下:
當BAR的最后一位為0,如下圖,表示這是映射的IO內存,1-2位表示內存的類型,00=任意32位地址,01=少于1M,10=任意64位地址,11保留。bit1為1表示區間大小超過1M,為0表示不超過1M。bit3表示是否支持可預取。
如上例子中,BAR0是 映射的IO內存,32位地址,不超過1M,不支持預取。
BAR1(最后幾位0110)也是映射的IO內存,64位地址,區間大小超過1M,不支持預取。
當BAR的最后一位為1,如下圖,表示這是映射的IO地址空間。上邊例子中的BAR5(最后一位是1)是映射的是IO地址空間,基地址是 0x0000e
中斷
由配置空間的IRQ Pin決定是否支持中斷,1表示支持,0表示不支持,加入支持,IRQ Line是中斷號。
上邊的例子中支持中斷號,中斷號是0x0b
訪問PCI
PCI設備包含3個尋址空間:配置空間、I/O端口 和 設備內存。
驅動中操作 PCI 的配置區(上邊討論的64B的空間)
pci_read_config_[byte|word|dword](struct pci_dev *pdev, int offset, int *value);
pci_write_config_[byte|word|dword](struct pci_dev *pdev, int offset, int value);
offset, 想訪問的配置空間中字節位置
value, 對read函數來說,用于存放讀回來的數據
對write函數來說,是要寫進去的值(這個int.。..。)
驅動中操作 I/O和內存
I/O區域包含寄存器,內存區域存放數據。
驅動中操作 PCI 的I/O和內存
unsigned long pci_resource = pci_resource_[start|len|end|flags] (struct pci_dev *pdev, int bar);
start, 區域的基地址
bar, 取值 0 - 5
8. PCIe 的配置空間
PCI的配置空間是256字節,即 0x00~0xFF,而PCIe的配置空間是4k字節,即 0x00~0xFFF。
PCIe 一共支持 256條bus,32個dev,8個fun。同PCI是一樣的。共需要內存大小= 4k * 256 *32*8 = 256K Bytes = 256M,這個256M的內存空間是為PCIe設備準備的空間系統不可用。
PCIe設備發展向前兼容PCI,每個設備的配置空間的前256個Byte是PCI空間,后(4k-256)個Byte的空間是PCIe擴展空間
Root和Switch的每一個端口中都包含一個P2P橋,橋的配置空間是Type1型
每個Type1型的Header中都包含最后一級總線號(Subordinate Bus Number)、下一級總線號(Secondary Bus Number)和上一級總線號(Primary Bus Number)等信息。當配置請求進行BDF路由的時候,正是依靠這些信息來確定要找的設備的。
9. PCIe 屬性
服務質量(Qos)
決斷振幅和帶寬
10. FAQ
TLP 和 DLLP 是什么?
TCP 是 事務層包的簡寫,結構下圖
Capability是什么?
Capability是device通過在4k Byte的Configuration Space里告訴host它支持哪些特性的,而Capability又大致分為基本的Capability與之后擴展的Capability,在使用4K的配置空間時兩者大同小異,都是采用鏈表形式來自定義Capability的位置的,唯一的區別是后者種類多,且不同廠商所支持的Capability有很大區別。如下圖為Configuration Space的基本架構——0-3Fh(PCI Head域),40h-FFh(基本Capability區域),100-FFF(擴展Capability區域)。
基本的Capability
Capability point是在0-3Fh(PCI Head域),偏移為34h,用于存放第一個Capability的偏移量,偏移量的范圍是40h-FFh(基本Capability區域),這段區間可任意讓你分配各種基本Capability。
擴展的Capability
第一個擴展Capability默認就從100h的偏移位置開始放置,而不是像基本的Capability那樣從34h通過指針指過來。
PCI總線空間與處理器空間隔離
PCI設備具有獨立的地址空間,即PCI總線地址空間,該空間與存儲器地址空間通過HOST主橋隔離。處理器需要通過HOST主橋才能訪問PCI設備,而PCI設備需要通過HOST主橋才能訪問主存儲器。
處理器訪問PCI設備時,必須通過HOST主橋進行地址轉換,反過來也是。HOST主橋的一個重要作用就是將處理器訪問的存儲器地址轉換成PCI總線地址。
原文標題:FPGA學習-PCIe基礎知識
文章出處:【微信公眾號:FPGA設計論壇】歡迎添加關注!文章轉載請注明出處。
-
芯片
+關注
關注
447文章
47788瀏覽量
409108 -
數據傳輸
+關注
關注
9文章
1526瀏覽量
63562 -
PCI
+關注
關注
4文章
608瀏覽量
129588 -
PCIe
+關注
關注
13文章
1083瀏覽量
80835
原文標題:FPGA學習-PCIe基礎知識
文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設計論壇】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論