1.12 PCIe配置
1.12.1 配置概述
系統首次啓動時,配置軟件還沒有掃描過PCIe結構,因而不知道機器的拓撲結構。配置軟件唯一知道的是在根聯合體內存在着主機/PCI橋,總線0直連到該橋的下游。由於還沒有掃描過總線0,因此係統不知道在根聯合體上存在着多少個PCIe端口。掃描PCIe結構以找出其拓撲的進程稱爲枚舉(enumeration)。
1.12.2 每種功能實現一組配置寄存器
當處理器執行軟件命令時,根聯合體會發起配置事務來讀或寫某種功能的配置寄存器。通過訪問這些寄存器可以發現某種功能是否存在,以及對它進行配置,以便進行正常的操作。處了內存、IO和消息空間外,PCIe還定義了一塊專用的配置空間,該配置空間要分配給每一種功能,以便實現它的配置寄存器。
PCI兼容空間佔據4KB功能配置空間的前256個字節(即64個雙字),它包含着該功能的PCI兼容配置寄存器。該區域可用如下兩種機制訪問:PCI配置訪問機制;PCIe增強配置機制。
PCI兼容空間的前16個雙字構成了它的頭,而後48個雙字保留給具有專用功能的配置寄存器及PCI新功能(PCI New Capability)寄存器。強制要求每個PCIe功能都必須在該區域內實現PCIe功能結構。
功能配置空間中的後3840個字節(960個雙字)是PCIe擴展配置空間,它用於實現可選的PCIe擴展功能(PCIe Extended Capability)寄存器。包括高級錯誤報告功能(Advanced Error Reporting Capability)寄存器組;虛擬信道功能(Virtual Channel Capability)寄存器組;設備序列號功能(Device Serial Number Capability)寄存器組;功率預算功能(Power Budgeting Capability)寄存器組。
1.12.3 PCIe枚舉
枚舉軟件依次讀取每臺設備中功能0的廠商ID,當返回一個不爲全F的值時表明設備存在,然後讀取頭(Header)寄存器中的頭類型(Head Type)字段,確定是橋或端點設備或其它類型,以及單功能/多功能設備。
1.12.4 PCI兼容配置寄存器
以下只針對Type0的非橋設備進行說明。
1.12.4.1 概述
下圖展示了功能頭區域的格式,標位黑色的寄存器必須實現,這種格式被定義爲頭類型0。頭中的這些寄存器常用於以某種通用的方式識別設備、控制其功能和判斷其狀況等。在該空間中,餘下的48個雙字專門用作設備專用寄存器。
1.12.4.2 兼容PCI的頭類型0寄存器
在PCI和PCIe中,實現和用法完全相同的頭類型0 PCI配置寄存器有:
廠商ID寄存器(Vecdor ID register);
設備ID寄存器(Device ID register);
修訂版ID寄存器(Revision ID register);
類代碼寄存器(Class Code register);
子系統廠商ID寄存器(Subsystem Vendor ID register);
子系統ID寄存器(Subsystem ID register);
頭類型寄存器(Header Type register);
BIST寄存器;
功能指針寄存器(Capabilities Pointer register);
CardBus CIS指針寄存器(CardBus CIS Pointer register);
擴展ROM機制寄存器(Expansion ROM Base Address register)。
1.12.4.3 與PCI不兼容的頭類型0寄存器
非橋PCIe功能中,定義在該功能的PCI兼容配置空間之中的下述配置寄存器,不同於PCI規範所定義的相應寄存器:
命令寄存器(Command Register);
狀況寄存器(Status Register);
緩存行大小寄存器(Cache Line Size Register);
主延遲定時器寄存器(Master Latency Timer Register);
中斷線寄存器(Interrupt Line Register);
中斷引腳寄存器(Interrupt Pin Register);
基址寄存器(Base Address Register);
Min_Gnt/Max_Lat寄存器。
1.12.4.4 用於識別設備驅動程序的寄存器
操作系統綜合利用下列強制寄存器來確定爲設備加載何種驅動:
廠商ID;
設備ID;
修訂版ID;
類代碼;
系統廠商ID;
子系統ID。
① 廠商ID寄存器
這個寄存器屬於PCI兼容寄存器,必須強制實現。16bit的寄存器用於識別該功能的製造商是誰。硬連線在這個只讀寄存器中的值由一個控制號碼發行的中心機構(PCI-SIG)授予。值FFFFh被保留,當試圖從一個不存在功能的配置寄存器中執行配置讀操作時,主機/PCI橋必須返回該值。在PCI和PCI-X中,這種讀取嘗試會導致主異常中斷(Master Abort),而在PCIe中會返回UR(不受支持的請求)完成狀況。不論哪種情況,橋都必須返回一個值爲FFFFh的廠商ID。
②設備ID寄存器
這個寄存器屬於PCI兼容寄存器,要求強制實現。它的值(16bits)由功能製造商指定,用於確定功能的類型。在與廠商ID或者修訂版ID聯合使用時,設備ID用於確定該功能的功能專用驅動程序。
③修訂版ID寄存器
這個寄存器屬於PCI兼容寄存器,要求強制實現。它的值(8bits)由功能製造商指定,用於確定該功能的修訂版本號。如果製造商提供了修訂版專用驅動程序,就很容易保證操作系統加載正確的驅動程序。
④類代碼寄存器
這個寄存器屬於PCI兼容寄存器,要求強制實現。如下圖,它是個24bits的只讀存儲器,分爲3個區域:基類、子類和編程接口。用於確定該功能的基本功能和功能更爲明確的子類,以及在某些情況下的寄存器專用編程接口。
高字節用於定義該功能的基類;
中間字節用於定義基類中的子類;
低字節用於定義編程接口。
下表列出了當前新定義的基類代碼,對虛度基類/子類而言,編程解釦子解被硬連線成返回0(無意義)。但對某些類而言是有意義的。
類 |
說明 |
00h |
在定義類代碼前建立的功能(PCI2.0前) |
01h |
海量存儲控制器 |
02h |
網絡控制器 |
03h |
顯示控制器 |
04h |
多媒體設備 |
05h |
存儲器控制器 |
06h |
橋設備 |
07h |
簡單的通信控制器 |
08h |
基本的系統外圍設備 |
09h |
輸入設備 |
0ah |
塢站 |
0bh |
處理器 |
0ch |
串行總線控制器 |
0dh |
無限控制器 |
0eh |
智能IO控制器 |
0fh |
衛星通信控制器 |
10h |
加密/解密控制器 |
11h |
數據獲取和信號處理控制器 |
12h~feh |
保留 |
ffh |
不捨和任何定義類代碼的設備 |
當操作系統試圖與類驅動程序一起工作的功能時,類代碼寄存器很有用。操作系統能找出一個具有基類代碼和子類代碼的功能,驅動程序就能與該功能一起工作。類驅動程序比製造商提供的僅與某個特定功能一起工作的驅動程序更具靈活性。
編程接口字節:爲準確識別寄存器組的佈局提供了最終的尺度。
⑤子系統廠商ID寄存器和子系統ID寄存器
這個寄存器屬於PCI兼容寄存器,要求強制實現。除帶子類00h~04h的基類06h(橋),或者帶子類00h~03h的基類08h之外,這兩個寄存器都是強制實現的。
子系統廠商ID由SIG授予,子系統ID由廠商自己提供。如果兩個寄存器中的值爲0,則說明沒有與該功能相關的子系統廠商ID和子系統ID。
該寄存器解決的問題:一種功能極可能停駐在一個卡里,也可能停駐在一個嵌入式設備裏。圍繞相同的PCI/PCI-X或PCIe核心邏輯設計的功能可能有相同的廠商ID和設備ID。這樣的情況下,操作系統在識別功能的驅動程序並將其載入存儲器時,就存在着問題。這兩個強制性的寄存器專用來識別該功能所在的附加卡或子系統,使用這兩個寄存器,對由不同廠商製造、但又圍繞相同的核心邏輯設計的卡或子系統,操作系統完全可以區分出。這就使得具有即插即用功能的操作系統能將正確的驅動程序裝載到存儲器中。
⑥頭類型寄存器
這個寄存器屬於PCI兼容寄存器,要求強制實現。下圖展示了頭類型寄存器的故事。這個寄存器的比特[6:0]定義該功能配置頭中雙字4~15的格式。比特7定義該設備是單功能設備(bit7=0),還是多功能設備(bit7=1)。在配置期間,通過檢測bit7的狀態,就能確定在需要配置的這個設備中是否有其他任何功能。
⑦BIST寄存器
PCI兼容寄存器,可選。既可以銅鼓請求者功能也可以通過完成者功能實現。如果某功能實現了內部自檢(Built-In Self-Test, BIST)機制,必須實現下圖的寄存器。下表描述了每個比特的作用。如果該功能不支持BIST,在讀取時者個寄存器必須返回0。比特6設置爲1,則會調用該功能的BIST機制。BIST完成後,該功能將復位bit6。如果該功能未能在2s的事件內復位bit6,配置軟件必須放棄執行該功能。在BIST結束後,測試結果會立即反映在該寄存器的低端4比特中。如果結果值爲0,則表示已成功完成BIST;若爲非零值,則表示這是一個功能專用錯誤代碼。
比特 |
功能 |
3:0 |
完成代碼,爲0表示成功完成;非0表示發生了與特定功能有關的錯誤 |
5:4 |
保留 |
6 |
開始BIST(Start BIST),向該比特寫入1,表示開始該功能的BIST。完成後,該功能將自動復位該比特。如果BIST不能在2s內完成,軟件將不能執行該功能。 |
7 |
具有BIST功能,如果功能有BIST,將返回1,否則返回0。 |
⑧功能指針寄存器
PCI兼容寄存器,對PCI功能而言是可選的,對PCI-X或PCIe是強制的。
PCI規範2.1版將功能的PCI兼容配置空間的前16個雙字定義爲其配置頭空間。初衷時將該功能所有的配置寄存器都配置在這個區域,並且將所有的功能專用配置寄存器都配置在PCI兼容配置空間的後48個雙字中。PCI規範2.2版定義新的配置寄存器時,空間已經不夠用了。因此允許將其定義的部分寄存器配置在功能的PCI兼容配置空間的後48個雙字中。
如果狀況寄存器中的功能列表(Capabilities List)比特設置爲1,該功能就會在PCI兼容配置空間雙字13的0字節實現一個功能指針寄存器。該指針包含PCI兼容配置空間後48個雙字之中功能列表的起始地址。規則是:最低的兩個有效比特必須硬連線爲0,且在讀這個寄存器時,軟件必須忽略它們;高端的6比特表示在PCI兼容配置空間後48個雙字中新增寄存器8比特起始地址的高6比特,兩個最低有效比特假設爲0。
功能指針寄存器所指的配置位置是配置寄存器組鏈表的第一個條目,其中每一個寄存器組都支持某一項特徵。每個條目都具有下圖所示的一般格式,其中第一個字節成爲功能ID(Capability ID,由PCI-SIG分配),用於識別與這個寄存器組相關的特徵,而第二個字節或者指向具有另一特徵的寄存器組,或者用於表示再也沒有其它的寄存器組與這個功能相關(指針值爲0)。各自特徵的寄存器組總是緊跟在該條目前兩個字節的後面,並且其長度和格式由特徵本身的類型決定。
PCI規範2.3定義的功能ID如下表:
ID |
說明 |
00h |
保留 |
01h |
PCI電源管理接口 |
02h |
AGP |
03h |
VPD |
04h |
插槽識別 |
05h |
消息傳送中斷 |
06h |
緊湊型PCI熱交換 |
07h |
PCI-X設備 |
08h |
保留給AMD |
09h |
廠商專用功能寄存器組 |
0ah |
調試端口 |
0bh |
緊湊型PCI中央資源控制 |
0ch |
PCi熱插拔 |
0dh~0fh |
保留 |
10h |
PCIe功能寄存器組 |
11h~ffh |
保留 |
⑨CardBus CSI指針寄存器
屬於PCI兼容寄存器,是可選的。它由共享CardBus和PCI或PCIe功能間芯片的功能實現,並指向Cardbus卡上的卡信息結構。這個寄存器是隻讀的,用以表明可從下述地址空間中所指明的偏移地址來訪問CIS:
從該功能所屬的功能專用PCI兼容配置空間之中的偏移地址來訪問;
從該功能在其中一個存儲器機制寄存器所指明的、相對於起始地址的偏移地址來訪問;
從擴展ROM之中的某個代碼映像的偏移地址來訪問。
⑩擴展ROM基址寄存器
PCI兼容寄存器,如果功能中嵌入了設備ROM,它就是必須的。許多PCI功能都潛入了設備ROM,而這個設備ROM包含了該功能的設備驅動程序。擴展ROM的起始存儲器地址及其大小均在擴展ROM基址寄存器中定義,而擴展ROM基址寄存器位於配置頭區域的雙字12之中。
擴展ROM基址寄存器的格式如下圖所示:
擴展ROM基址寄存器的格式如下:
比特0爲1,表示啓用該功能的ROM地址解碼器;
比特[10:1]保留;
比特[31:11]用於指定ROM的起始地址。
⑪命令寄存器
屬於強制性寄存器,格式如下圖。下表描述了非橋功能所屬命令寄存器的每個比特。
比特 |
屬性 |
說明 |
0 |
RW |
IO地址空間解碼器允許: 0-禁用IO解碼器,不認識針對這個設備的IO事務; 1-啓動IO解碼器,接受針對這個設備的IO事務 |
1 |
RW |
存儲器地址空間解碼器允許: 0-禁用存儲器解碼器,不認識針對這個設備的存儲器事務; 1-啓動存儲器解碼器,接受針對本設備的存儲器事務 |
2 |
RW |
總線主控器允許: 0-禁用端點功能發佈存儲器或IO請求,同時也禁止生成MSI消息;
|
3 |
RO |
專用循環允許,PCIe爲0 |
4 |
RO |
存儲器寫和無效,PCIe爲0 |
5 |
RO |
VGA調色板,PCIe爲0 |
6 |
RW |
奇偶錯誤響應,在狀況寄存器中,如果設置了奇偶錯誤響應比特,且有下列條件之一發生,請求者將設置主控器數據奇偶比特: 如果請求者受到一個有錯誤的完成; 如果請求者寫請求中毒。 如果清除了奇偶錯誤比特,則不會設置主控器數據奇偶錯誤比特。 默認值爲0 |
7 |
RO |
IDSEL步長/等待循環控制,PCIe必須是0 |
8 |
RW |
SERR允許,設置該比特時,允許功能將它所發現的非致命錯誤和致命性錯誤報告給根聯合體。通過設置該比特或者設備控寄存器中的PCIe的專用比特,允許功能將這類錯誤報告給根聯合體。 默認值爲0 |
9 |
RO |
快速背靠背功能允許,PCIe必須爲0 |
10 |
RW |
中斷禁用,控制PCIe功能產生INTx中斷消息的能力: 0-允許功能產生INTx中斷消息; 1-禁止功能產生INTx中斷消息。 如果該功能已經傳送了Assert_INTx仿真中斷消息,並在隨後的操作中又設置了該比特,它必須爲先前傳送的每一個確定消息發送一個相應的Deassert_INTx消息。 |
⑫狀況寄存器
屬於強制性寄存器。下表描述了狀況寄存器的每個比特。具有RWIC屬性的比特字段具有如下特徵:
讀取時返回寄存器相應比特的狀況,並可以通過向它寫入1清除狀況比特。向RWIC比特寫0,則不起作用。
比特 |
屬性 |
說明 |
3 |
RO |
中斷狀況:表示該功能有一個未完成的中斷請求(該功能以前發送了一箇中短消息,正在等待服務),默認值爲0,僅與INTx消息有關 |
4 |
RO |
功能列表,表示在功能的PCI兼容配置空間前48個雙字中存在一個或多個擴展功能寄存器組。PCIe功能都要求實現PCie功能結構,所以該比特必須設置爲1 |
5 |
RO |
支持66MHz,PCIe爲0 |
7 |
RO |
支持快速背靠背,PCIe爲0 |
8 |
RW1C |
主控器數據奇偶錯誤,如果在命令寄存器設置了奇偶錯誤允許比特,且滿足如下條件之一,請求者就設置主控器數據奇偶錯誤比特: 如果請求者收到一個有錯誤的完成; 如果請求者寫請求中毒。 如果清除了奇偶錯誤比特,則不會設置主控器數據奇偶錯誤比特。默認值爲0 |
10:9 |
RO |
DEVSEL計時,PCIe爲0 |
11 |
RW1C |
已發送目標異常中斷,當充當完成者的功能通過發送完成者異常中斷完成狀況到請求者要求終止請求時,設置該比特。默認值爲0 |
12 |
RW1C |
已接收目標異常中斷,當請求者收到一個待完成者異常中斷完成狀況的完成時,設置該比特,默認值爲0 |
13 |
RW1C |
已接收主控器異常中斷,當請求者收到一個帶未受支持的請求完成狀況的完成時,設置該比特,默認值爲0 |
14 |
RW1C |
已發信號系統錯誤,當功能發送ERR_FATAL或ERR_NONFATAL消息,並且命令寄存器中的SERR允許比特設爲1時,設置該比特,默認值爲0 |
15 |
RW1C |
已發現奇偶錯誤,不論功能的命令寄存器中奇偶錯誤啓動比特狀態如何,只要收到一箇中毒的TLP,就設置該比特。默認值爲0 |
⑬緩存行大小寄存器
可選寄存器。該字段由PCIe設備作爲讀寫來實現,目的是爲了兼容傳統的功能,但對PCIe設備的功能無影響。
⑭主控器延時定時器寄存器
可選寄存器。不能用於PCIe,必須硬連線位0。
⑮中斷線寄存器
可選寄存器。
在PCI功能中,如果PCI功能通過INTx引腳生成中斷請求,則是必須的。PCI規範允許功能利用中斷引腳或MSI功能(MSI-capability)生成中斷。這個可讀/可寫中斷寄存器可用於識別PCI中斷請求引腳需要路由到中斷請求控制器的哪些輸入上。在PC環境中,這個寄存器從00h到0fh的值對應中斷控制器從IRQ0到IRQ15的輸入。值ffh表示不知道或無連接,10h~feh保留。OS或設備驅動程序通過檢查設備的中斷線寄存器,可以確定該設備要使用哪些系統中斷請求線來發布服務請求。
在PCIe功能中,PCIe功能可以用傳統的PCI/PCI-X方式生成中斷。
⑯中斷引腳寄存器
可選寄存器。
如果PCI功能通過INTx引腳生成中斷請求,則是必須的。這個只讀寄存器定義了INTA#到INTD#這4箇中斷請求引腳中PCI功能所要連接的那個引腳。01h到04h值對應着PCI中斷請求引腳INTA#到INTD#。返回值若是0,則表明該設備沒有生成中斷。所有其他值保留。
在PCIe功能中,這個只讀寄存器用於識別由功能發送到上有生成中斷的傳統INTx中斷消息,值01h到04h分別對應傳統中斷消息INTA#到INTD#。若返回值爲0,表明該設備不會利用老方法生成中斷。其他所有值保留。
⑰基址寄存器
位於功能配置頭空間的基址寄存器,常用於實現功能可編程的存儲器和/或IO解碼器。每個寄存器32bits寬(如果存儲器解碼器及其有關存儲器塊所在的地址邊界超過4GB,則寄存器寬爲64bits)。下圖給出了3種可能的基址寄存器格式,其中bit0是隻讀的,用於表明是一個存儲器或IO解碼器:
bit0=0,該寄存器爲一個存儲器地址解碼器;
bit0=1,該寄存器爲一個IO地址解碼器。
在存儲器基址寄存器中,bit[2:1]定義解碼器是32bits還是64bits的:
00b=32bits寄存器。配置軟件寫一個32bits的起始存儲器地址到該寄存器中,在第一個4GB存儲器地址空間中指定一個起始地址。
10b=64bits寄存器。配置軟件寫一個64bits的起始存儲器地址到該寄存器中,在264存儲器地址空間中指定一個起始地址。這個基址寄存器佔據配置頭空間兩個連續的雙字。第一個雙字用於設定起始地址的低端32bits,第二個雙字用於指定起始地址的高端32bits。
可預取屬性比特:bit3定義存儲器塊是否是可預取的。配置軟件通過檢查存儲器目標基址寄存器中的可預取比特,可確定存儲器目標是否是可預取的。在PCIe端點功能中,可預取比特設置爲1的所有存儲器BAR必須作爲64bits存儲器BAR實現,而可預取比特未設置爲1的存儲器BAR可作爲32bits的BAR實現。
基址字段:對32bits的存儲器解碼器,該字段位於bit[31:7];對於64bits的存儲器解碼器,則位於[63:7],用於:
確定與這個解碼器有關的存儲器大小;
分配起始地址給解碼器。
存儲器示例:向位於配置雙字04d的基址寄存器寫FFFFFFFFh,返回值爲FFF00000h。
bit0=0:說明這是一個存儲器地址解碼器;
bit[1:1]=00b:說明是一個32bits存儲器地址的解碼器;
bit3=0:存儲器不可預取;
bit20時基址字段中第一個值爲1的比特,二進制權值爲1048576,說明這是一個存儲器爲1MB的地址解碼器。
⑱Min_Gnt/Max_Lat寄存器
可選寄存器,PCIe不適用,硬連線爲0。
1.12.5 PCIe專用配置寄存器
每個PCIe功能都有一塊大小爲4KB的專用存儲器地址區,其配置寄存器就在該地址中實現。每種PCIe功能必須在PCI兼容寄存器空間前64箇中的後48個雙字的某處有一組PCIe功能寄存器。該功能該可以有選擇地實現任何PCIe擴展功能寄存器組。
除PCIe功能結構外,其他PCIe功能寄存器組對每種功能而言都是強制實現的,作爲PCI兼容寄存器區域低端48個雙字中功能寄存器組鏈表的一部分。這個寄存器組中有一部分是可選的。
寄存器實現要求:
每種Express功能必須在雙字0到雙字4中實現寄存器;
與每個根端口有關的橋必須在雙字7和雙字8中實現寄存器;
與連接到插槽的根端口或下游交換器端口有關的每個橋必須在雙字5和雙字6中實現寄存器。
以下爲PCIe功能寄存器組中必須實現的每個寄存器:
PCIe功能ID寄存器(PCI Express Capability ID Register);
下一個功能指針寄存器(Next Capability Pointer Register);
PCIe功能寄存器(PCI Express Capabilities Register);
設備功能寄存器(Device Capabilities Register);
設備控制寄存器(Device Control Register);
設備狀況寄存器(Device Status Register);
鏈路功能寄存器(Link Capabilities Register);
鏈路控制寄存器(Link Control Register);
鏈路狀況寄存器(Link Status Register)。
1.12.5.1 PCIe功能ID寄存器
只讀存儲器,包含的值爲10h,表示這是PCIe功能寄存器組的起始位置。
1.12.5.2下一個功能指針寄存器
這是一個只讀寄存器,其值可爲下述二者之一:
指向PCI兼容配置空間低端48個雙字中下一組功能寄存器的非零偏移地址;
如果PCIe功能寄存器組是PCI兼容配置空間中功能寄存器鏈表的最後一組寄存器,其值爲00h。
1.12.5.3 PCIe功能寄存器
比特 |
類型 |
說明 |
3:0 |
RO |
功能版本,由SIG定義的PCIe功能結構的版本號(必須是1h) |
7:4 |
RO |
設備/端口類型,Express邏輯設備的類型: 0000b:PCIe端點; 0001b:傳統PCIe端點。即運行期間要求通過BAR分配IO空間的功能。如果是在傳統PCIe端點設備上實現,軟件可能忽略擴展配置空間功能; 0100b:根聯合體的根端口; 0101b:交換器上游端口; 0110b:交換器下游端口; 0111b:Express到PCI/PCI-X橋; 1000b:PCI/PCI-X到Express橋。 其它保留 |
8 |
HwInit |
插槽實現,設置時表示該根端口或交換器下游端口將連接到附加卡插槽上。 |
13:9 |
RO |
中斷消息數目,如果該功能被分配了多個MSI中斷消息值,當設置了該功能的插槽狀況寄存器或根狀況寄存器的任何狀況比特時,該寄存器將包含寫到MSI目標地址的MSI數據值。如果系統軟件改變了分配給該功能的消息數據值的數目,則該功能的硬件也必須更新該字段,以反映這種變化。 |
1.12.5.4 設備功能寄存器
下圖和下表描述了該寄存器的每一比特字段,這個寄存器定義了全局範圍內都適用該設備的運行特徵。
比特 |
說明 |
2:0 |
最大有效載荷支持(Max Payload Size Supported),該功能所支持的TLP最大有效載荷爲: 000b=最大128字節; 001b=最大256字節; 010b=最大512字節; 011b=最大1KB字節; 100b=最大2KB字節; 101b=最大4KB字節; 110b=保留;111b=保留。 |
4:3 |
仿真功能支持 |
5 |
擴展標記字段支持,表示該功能作爲請求者時標記字段所支持的最大數目。 0=所支持的標記字段爲5bits(每個請求者最多有32個未完成請求); 1=所支持的標記字段爲8bits(每個請求者最多有256個未完成請求)。 如果支持和使用8bits的標記,只要設定了設備控制寄存器中的擴展標記字段允許比特爲1,就可以啓用該特徵。 |
8:6 |
端點L0可接受延遲,表明一個端點從L0s狀態轉換到L0狀態所能接受的總延遲。該值間接地表明瞭端點內部緩存的數量。電源管理軟件利用該值比較這個端點到它的父根端口之間所有組件所報告的L0退出延遲,以確定是否能在不損失性能的情況下使用ASPM L0條目。 000b=小於64ns; 001b=不小於64ns,不大於128ns; 010b=不小於128ns,不大於256ns; 011b=不小於256ns,不大於512ns; 100b=不小於512ns,不大於1us; 101b=不小於1us,不大於2us; 110b=2us~4us; 110b=大於4us |
11:9 |
端點L1可接受延遲,表明一個端點從L1狀態轉換到L0狀態所能接受的總延遲。該值間接地表明瞭端點內部緩存的數量。電源管理軟件利用該值比較這個端點到它的父根端口之間所有組件所報告的L1退出延遲,以確定是否能在不損失性能的情況下使用ASPM L1條目。 000b=小於1us; 001b=不小於1us,不大於2us; 010b=不小於2us,不大於4us; 011b=不小於4us,不大於8us; 100b=不小於8us,不大於16us; 101b=不小於16us,不大於32us; 110b=32us~64us; 110b=大於64us |
12 |
警告按鈕存在,設置爲1時,表示該卡或者模塊上有一個警告按鈕 |
13 |
警搞指示器存在,設爲1時,表示該卡或者模塊上有一個警告指示器 |
14 |
電源指示器存在,設爲1時,表示該卡或者模塊上有一個電源指示器 |
25:18 |
捕獲的插槽功率極限值,與插槽功率極限因子一起使用,指定插槽所供應的功率上限。 |
27:26 |
捕獲的插槽功率極限因子,指定功率極限計算所用的因子 00b=1.0x;01b=0.1x;10b=0.01x;11b=0.001x |
1.12.5.5 設備控制寄存器
比特 |
說明 |
0 |
可修正錯誤報告啓用,對於多功能設備,該比特控制所有功能的錯誤報告。對根聯合體,報告根聯合體內部發生了可修正錯誤。不產生外部ERR_COR消息。默認值爲0。 |
1 |
非致命錯誤報告啓用,該比特控制非致命錯誤的報告。對於多功能設備,它控制所有功能的錯誤報告。對根端口,報告根聯合體內部發生的非致命錯誤,不產生外部ERR_NONFATAL消息,默認值爲0。 |
2 |
致命錯誤報告啓用,該比特控制致命錯誤的報告。對於多功能設備,它控制設備內所有功能的錯誤報告。對根聯合體,報告根聯合體內部發生的致命錯誤。不產生外部ERR_NONFATAL消息,默認值爲0。 |
3 |
未受支持請求報告啓用。當設定爲1時,它對未受支持的請求予以報告。對於多功能設備,它控制所有功能的UR報告。是否報告根端口收到的錯誤消息完全由根控制寄存器控制。 |
4 |
啓用靈活的順序,設定爲1時,表示對於發起寫順序要求不嚴格的請求,允許設備設置其屬性字段中靈活的順序比特。默認值爲1。 |
7:5 |
最大有效載荷(Max Payload Size),設置設備TLP數據的最大有效載荷。作爲接收者,該設備處理的TLP必須同設置值一樣大;作爲發送者,該設備產生的TLP不能超過該設置值。其許可值由設備功能寄存器中的最大有效載荷支持字段控制,並可通過程序修改。 000b=128B;001b=256B;010b=512B;011b=1024B;100b=2048B;101=4096B;110b、111b保留 |
8 |
擴展標記字段允許,設置爲1時,表示設備可以將一個8bits的標記字段用作請求者。如果清0,則設備限定到一個5bits的標記字段。默認值爲0 |
9 |
仿真功能允許,默認值爲0 |
10 |
輔助電源PM允許,設爲1時,表示設備可啓用與PME Aux電源無關的Aux電源。 |
11 |
啓用無偵測 |
14:12 |
最大讀請求的大小(Max_Read_Request_Size),表示設備作爲請求者時最大的讀請求大小。 000b=128B;001b=256B;010b=512B;011b=1024B;100b=2048B;101=4096B;110b、111b保留 |
1.12.5.6 設備狀況寄存器
比特 |
類型 |
說明 |
0 |
RW1C |
可修正錯誤檢測,若爲1,表示自軟件上次清除該比特之後,又發現了一個或多個可修正錯誤,不管是否啓用了設備控制寄存器中的錯誤報告機制,該比特均反映了可修正錯誤的發生。在多功能設備中,每種功能都利用該比特表示是否檢測到可修正錯誤。默認值爲0 |
1 |
RW1C |
非致命錯誤檢測,若爲1,表示自軟件上次清除該比特之後,又發現了一個或多個非致命錯誤。不管是否啓用了設備控制寄存器中的錯誤報告機制,該比特均反映了非致命錯誤的發生。在多功能設備中,每種功能都利用該比特表示是否檢測到了非致命錯誤。默認值爲0 |
2 |
RW1C |
致命錯誤檢測,若爲1,表示自軟件上次清除該比特之後,又發現了一個或多個致命錯誤。不管是否啓用了設備控制寄存器中的錯誤報告機制,該比特均反映了致命錯誤的發生。在多功能設備中,每種功能都利用該比特表示是否檢測到了致命錯誤。默認值爲0 |
3 |
RW1C |
未受支持請求檢測,當設置爲1時,表示該功能接收到未受支持的請求。不管是否啓用了設備控制寄存器中的錯誤報告機制,該比特均反映了錯誤的發生,在多功能設備中,每種功能都利用該比特表示是否檢測到了UR錯誤。默認值爲0 |
4 |
RO |
輔助電源檢測,需要輔助電源的設備如果檢測到輔助電源,就將該比特設置爲1 |
5 |
RO |
事務待決,設置爲1時,表示該功能發佈了一個尚未處理完成的非報告請求數據包。僅當所有未完成的非報告請求處理完畢或被完成超時機制終止後,功能才報告該比特已清除。 |
1.12.5.7 鏈路寄存器
共有3個與鏈路有關的寄存器:鏈路功能寄存器、鏈路控制寄存器、鏈路狀況寄存器。
鏈路功能寄存器:
比特 |
類型 |
說明 |
3:0 |
RO |
最大鏈路速度 |
9:4 |
RO |
最大鏈路寬度: 000000b=保留;000001b=x1;000010b=x2;000100b=x4; 001000b=x8;001100b=x12;010000b=x16;100000b=x32; 其他保留 |
11:10 |
RO |
活動狀態電源管理(ASPM),表示這條鏈路所支持的ASPM級別: 00b=保留;01b=支持L0;10b=保留;11b=支持L0和L1 |
14:12 |
RO |
L0s退出延遲,表示鏈路的L0s退出延遲 |
17:15 |
RO |
L1退出延遲,表示該鏈路的L1退出延遲 |
31:24 |
HWIint |
端口號,表示與這條鏈路有關的端口號 |
鏈路控制寄存器:
比特 |
類型 |
說明 |
1:0 |
RW |
活動狀態電源(ASPM)管理控制,它控制鏈路所支持的ASPM水平: 00b=禁用;01b=L0s進入啓用,表示支持發送器進入L0s,但是當該字段被禁用時,接收器必須能進入L0s; 10b=L1進入啓用;11b=L0s和L1進入啓用 |
3 |
對根端口和交換器端口爲RO;對端點爲RW |
讀完成邊界(RCB) 根端口:硬連線,表示根端口的RCB值,只讀:0b=64B;1b=128B 端點:由配置軟件設定,表示端點上游根端口的RCB值。沒有實現該特徵的設備必須硬連線爲0:0b=64B;1b=128B 交換器端口:保留,硬連線爲0 |
4 |
RW |
鏈路禁用,1=禁用該鏈路。端點設備和交換器上游端口的該字段均保留。在鏈路的狀態實際改變之前,可立即讀取寫入該字段的值,默認值爲0b |
5 |
RW |
鏈路重新定向:1=通過將物理層LTSSM改變到恢復狀態來重新定向鏈路;讀該比特返回的總是0b;端點設備和交換器上游端口的該比特均保留 |
6 |
RW |
公共始終配置:1表示這個組件和本鏈路另一端的組件正在共用一個公共參考時鐘;0表示這個和本鏈路另一端的組件分別使用不同的參考時鐘。組件將該比特引用的參考時鐘與鏈路功能寄存器所報告的L0s和L1退出延遲相乘;只要鏈路兩端的組件中有一個改變了該比特,軟件就必須將該寄存器中的鏈路重新定向比特設置爲1,從而重新定向該鏈路,默認值爲0 |
7 |
RW |
擴展同步。該比特若設置爲1,則:在L0s狀態期間,必須傳輸4096個FTS有序集;進入L0狀態前必須緊隨一個SKP有序集;進入恢復狀態前,在L1狀態期間必須傳輸1024個TS1有序集。默認值爲0 |
鏈路狀況寄存器:
比特 |
類型 |
說明 |
3:0 |
RO |
鏈路速度,表示協商後的鏈路速度 0001b=2.5Gb/s;其它保留 |
9:4 |
RO |
協商鏈路帶寬,表示協商後的鏈路帶寬 000001b=x1;000010b=x2;000100b=x4;0010000=x8; 010000b=x16;100000b=x32;其它保留 |
10 |
RO |
定向錯誤,1表示發生鏈路定向錯誤 端點設備和交換器上游端口上的該比特均保留。在成功定向鏈路到L0鏈路狀態後,軟件將該比特清除 |
11 |
RO |
鏈路定性,爲1時表示鏈路定向正在進行之中,或表示鏈路重新定向比特已設爲1,但鏈路定向該沒有開始。鏈路一旦定向,硬件便將該比特清除;端點設備和交換器上游端口的該比特不可用,均保留 |
12 |
HWInit |
插槽始終配置,該比特表示連接器上的組件使用平臺所提供的同一物理參考時鐘。如果設備使用的始終與連接器上的參考始終無關,則該比特必須清零 |
更多內容歡迎關注公衆號:FPGA訓練營。