91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

深入剖析PCIe配置空間中Type 0 Header的核心成員

FPGA技術(shù)江湖 ? 來源:FPGA技術(shù)江湖 ? 2026-02-26 16:44 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

以下文章來源于AdriftCoreFPGA芯研社,作者CNL中子

前言

如果把整個(gè) PCIe 系統(tǒng)比作一個(gè)龐大的社會(huì),那么每一個(gè) EP 設(shè)備都需要在入職時(shí)向系統(tǒng)提交一份詳細(xì)的個(gè)人檔案。這份檔案不僅記錄了它是誰(Vendor/Device ID)、由誰代工(Subsystem ID),還聲明了它的職業(yè)能力(Class Code)以及它需要占用的辦公資源(BAR 空間)。我們將深入剖析 PCIe 配置空間中Type 0 Header的核心成員,探討這些寄存器背后的意義。

配置空間

在 PCIe 協(xié)議中,Endpoint (EP)具有獨(dú)立的配置空間。其中,EP 的配置空間首部(Header)被定義為Type 0,主要用于存放 EP 設(shè)備的各種配置寄存器(例如上一章提到的 BAR 寄存器),軟件通過修改這些寄存器的值來完成對(duì)設(shè)備的初始化。與之對(duì)應(yīng),Type 1主要用于Root Complex (RC)以及Switch的配置空間首部。

15a6ff46-0d26-11f1-90a1-92fbcf53809c.png

image

16066ada-0d26-11f1-90a1-92fbcf53809c.png

image

在整個(gè)配置空間結(jié)構(gòu)中,前64 DW (256B)是 PCI 與 PCIe 共同擁有的標(biāo)準(zhǔn)配置空間,而后續(xù)的960 DW (3840B)則是 PCIe 特有的擴(kuò)展配置空間(Extended Capability)。

16682ba8-0d26-11f1-90a1-92fbcf53809c.png

image

ID

在 PCIe 配置空間(Configuration Space)的頭部(Header)中,Vendor ID(廠商標(biāo)識(shí))和Device ID(設(shè)備標(biāo)識(shí))是兩個(gè)最基礎(chǔ)、最重要的只讀寄存器。

它們位于配置空間的起始位置(Offset 00h ~ 03h),相當(dāng)于 PCIe 設(shè)備的身份證。操作系統(tǒng)和 BIOS 正是通過這兩個(gè) ID 來識(shí)別設(shè)備,并為其加載正確的驅(qū)動(dòng)程序。

Vendor ID (廠商 ID)

定義:代表生產(chǎn)該 PCIe 芯片的廠商。

分配權(quán):由PCI-SIG統(tǒng)一分配,不能隨意填寫。

典型值:

?0x8086:Intel (因 x86 架構(gòu)得名)

?0x10DE:NVIDIA

?0x1002:AMD (ATI)

?0x10EE:AMD (XILINX)

注意:如果 CPU 讀取某個(gè)設(shè)備的 Vendor ID 返回0xFFFF,通常表示該位置不存在設(shè)備(Device Not Present),或者鏈路訓(xùn)練失敗導(dǎo)致無法讀取。

Device ID (設(shè)備 ID)

定義:代表廠商生產(chǎn)的具體某一款芯片或產(chǎn)品。

分配權(quán):由廠商自己定義。只要保證在該 Vendor ID 下唯一即可。

作用:用于區(qū)分同一廠商的不同產(chǎn)品。例如 NVIDIA 的不同顯卡芯片(RTX 3060 vs RTX 4090)會(huì)有相同的 Vendor ID,但 Device ID 不同。

Sub ID

在 PC 產(chǎn)業(yè)中,芯片廠商(如 NVIDIA, Intel, Realtek)通常只賣芯片,而板卡廠商(如 華碩, 戴爾, 聯(lián)想)會(huì)將這些芯片買回去,做成顯卡、網(wǎng)卡或集成在主板上。

如果說 Vendor ID/Device ID 識(shí)別的是這顆PCIe芯片是誰造的、是什么型號(hào),那么 Subsystem Vendor ID/Subsystem ID 識(shí)別的就是這塊板卡(或成品設(shè)備)是誰造的、是什么型號(hào)。

例如顯卡,NVIDIA生產(chǎn)了RTX 3070芯片。華碩 (ASUS)和微星 (MSI)都買了這款芯片,分別做成了華碩 RTX 3070猛禽和微星 RTX 3070魔龍 。

對(duì)于操作系統(tǒng)來說,這兩張卡的核心芯片是一模一樣的(Vendor ID 都是 NVIDIA,Device ID 都是 3070)。如果沒有 Subsystem ID,系統(tǒng)就無法區(qū)分這兩張卡。

這就導(dǎo)致了兩個(gè)問題:

1. 華碩可能有專門的 RGB 燈光控制軟件或風(fēng)扇策略,不能用在微星的卡上。 2. OEM 廠商(如聯(lián)想)可能希望系統(tǒng)里顯示Lenovo Graphics而不是公版的NVIDIA Graphics。

Subsystem Vendor ID (SVID, 子系統(tǒng)廠商 ID)

定義:代表板卡制造廠商(Add-in Card Manufacturer)或系統(tǒng)集成商。

分配:由PCI-SIG組織分配。通常,華碩、戴爾、惠普都有自己獨(dú)立的 PCI-SIG 廠商代碼。

?0x1043:ASUS (華碩)

?0x1028:Dell (戴爾)

?0x10EE:XILINX

Subsystem ID (SID, 子系統(tǒng) ID)

含義:代表該廠商生產(chǎn)的具體板卡型號(hào)。

分配:由SVID 的持有者(即板卡廠商自己)定義。

FPGA ID

對(duì)于FPGA來說電腦會(huì)認(rèn)為插了一個(gè)Xilinx 的設(shè)備。你可以直接使用 Xilinx 提供的官方驅(qū)動(dòng)(如 XDMA 驅(qū)動(dòng)或 QDMA 驅(qū)動(dòng)),因?yàn)檫@些驅(qū)動(dòng)默認(rèn)識(shí)別

Vendor ID 保持默認(rèn)的0x10EE(Xilinx 的 ID)。Device ID 保持默認(rèn)取決于具體的 FPGA 型號(hào),或者改成你為了區(qū)分不同工程而自定義的數(shù)字(比如0x7020)。Subsystem ID 通常不關(guān)心,保持默認(rèn)。

如果你要把這個(gè) FPGA 板卡作為一個(gè)獨(dú)立產(chǎn)品出售(比如做了一個(gè) FPGA 加速卡),有兩種方法

正式途徑

你的公司向 PCI-SIG 組織交錢(年費(fèi)約 4000 美元),申請(qǐng)一個(gè)屬于你們公司的Vendor ID(比如0xABCD)。

在 Vivado 里,把 Vendor ID 改成0xABCD。優(yōu)點(diǎn)是顯得非常專業(yè),擁有獨(dú)立的驅(qū)動(dòng)簽名。缺點(diǎn)是費(fèi)錢。

常規(guī)做法

Vendor ID 繼續(xù)填0x10EE(Xilinx)。Device ID 填一個(gè)你自定義的數(shù)(例如0x8888)。Subsystem Vendor ID 填 Xilinx 的 ID。Subsystem ID 填你定義的產(chǎn)品型號(hào)。這種情況下,你需要在你的驅(qū)動(dòng)程序(Driver)的.inf文件里添加這個(gè)特定的 Device ID,否則系統(tǒng)不知道這個(gè) Xilinx 設(shè)備該用什么驅(qū)動(dòng)。

Class Code

Class Code(類代碼)是 PCIe 配置空間中一個(gè)非常巧妙且關(guān)鍵的字段。

如果說 Vendor ID 和 Device ID 是設(shè)備的品牌和型號(hào)例如:我是 NVIDIA 生產(chǎn)的 RTX 3080;那么 Class Code 就是設(shè)備的職業(yè)資格證例如:我是做圖形顯示的,或者是做網(wǎng)絡(luò)通信的。

它位于配置空間頭部的Offset 08h位置,總共占用24 bits (3 字節(jié))。

它由三個(gè)獨(dú)立的 8-bit 寄存器組成,層級(jí)非常分明,從左到右(高位到低位)依次是:

字節(jié)位置 名稱 含義 (Role) 舉例
高字節(jié) (Offset 0Bh) Base Class (主類) 大行業(yè) 這設(shè)備屬于哪個(gè)大類 存儲(chǔ)控制器 (01h)、網(wǎng)絡(luò)控制器 (02h)、顯示控制器 (03h)
中字節(jié) (Offset 0Ah) Sub-Class (子類) 具體工種 在大類里具體干啥 存儲(chǔ)里的 Flash (08h)、網(wǎng)絡(luò)里的 Ethernet (00h)
低字節(jié) (Offset 09h) Prog IF (編程接口) 工作語言 用什么標(biāo)準(zhǔn)協(xié)議溝通 符合 NVMe 標(biāo)準(zhǔn) (02h)、符合 AHCI 標(biāo)準(zhǔn) (01h)

對(duì)于FPGA的意義

對(duì)于FPGA來說Class Code的意義主要是實(shí)現(xiàn)免驅(qū)。

所謂的免驅(qū)(Driver-free),并不是說操作系統(tǒng)不需要驅(qū)動(dòng)程序,而是指直接使用操作系統(tǒng)內(nèi)置的通用驅(qū)動(dòng)程序(In-box Driver),用戶不需要手動(dòng)下載安裝特定的.exe或編譯內(nèi)核模塊。

例如,操作系統(tǒng)(Windows 10/11, Linux, macOS)都內(nèi)置了NVMe 驅(qū)動(dòng)。如果你的 FPGA 宣稱自己是一個(gè) NVMe SSD,系統(tǒng)就會(huì)自動(dòng)加載內(nèi)置的stornvme(Windows) 或nvme(Linux) 驅(qū)動(dòng)。但是你不能只改Class Code為NVMe設(shè)備,如果你的 FPGA 被識(shí)別為 NVMe,操作系統(tǒng)會(huì)立刻發(fā)出一堆標(biāo)準(zhǔn)的 NVMe 命令(如Identify Controller,Create IO Queue)。你的 FPGA 邏輯必須能夠嚴(yán)格遵循 NVMe 協(xié)議來響應(yīng)這些命令。又或者我們更改Class code將 FPGA 偽裝成一個(gè) PCI 串口卡。Windows 會(huì)自動(dòng)將其識(shí)別為 COM 口。但同樣,你的 FPGA 必須在 BAR 空間里模擬 16550 UART 的寄存器行為。

寫在最后

Type 0 Header 看似只是一些靜態(tài)寄存器的集合,但它決定了操作系統(tǒng)如何看待你:你是誰、你從哪來、你能干什么、以及系統(tǒng)該用什么方式與你對(duì)話。
無論是做 ASIC 還是 FPGA,理解這些字段背后的規(guī)則,才能避免“設(shè)備能枚舉卻用不了”“驅(qū)動(dòng)始終加載不上”這類看似玄學(xué)、實(shí)則配置層就已埋雷的問題。

當(dāng)你真正把 Vendor / Device / Subsystem / Class Code 這些信息設(shè)計(jì)清楚,PCIe 設(shè)備才算完成了從能被看到到能被正確使用的關(guān)鍵一步。后面的 BAR、Capability、MSI/MSI-X,才有發(fā)揮空間。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5608

    瀏覽量

    129940
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    7401

    瀏覽量

    129270
  • PCIe
    +關(guān)注

    關(guān)注

    16

    文章

    1459

    瀏覽量

    88376

原文標(biāo)題:漫談PCIe——如何通過配置空間定義一個(gè)硬件的職業(yè)與身份

文章出處:【微信號(hào):HXSLH1010101010,微信公眾號(hào):FPGA技術(shù)江湖】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    簡談PCIe的軟件配置方式

    章節(jié)已經(jīng)提過,PCIe與其完全兼容。這里主要描述PCIE高級(jí)配置機(jī)制。 PCIe配置空間
    的頭像 發(fā)表于 07-29 09:26 ?8604次閱讀
    簡談<b class='flag-5'>PCIe</b>的軟件<b class='flag-5'>配置</b>方式

    nvme IP開發(fā)之PCIe

    配置空間 管理PCIe總線。PCI配置空間頭分為Type0
    發(fā)表于 05-18 00:48

    NVMe高速傳輸之?dāng)[脫XDMA設(shè)計(jì)之八:PCIe初始化狀態(tài)機(jī)設(shè)計(jì)

    ID。如果獲取的供應(yīng)商ID號(hào)為0xFFFF,表示為無效的供應(yīng)商ID,跳轉(zhuǎn)到INC_DEV狀態(tài),否則進(jìn)入GET_HEADER_TYPE狀態(tài)。 GET_HEADER_TYPE:獲取配置
    發(fā)表于 07-05 22:00

    深入最經(jīng)典的電容剖析

    本帖最后由 eehome 于 2013-1-5 10:07 編輯 最深入最經(jīng)典的電容剖析
    發(fā)表于 08-02 21:52

    深入最經(jīng)典的電容剖析

    `最深入最經(jīng)典的電容剖析PCB打樣找華強(qiáng) http://www.hqpcb.com/3 樣板2天出貨`
    發(fā)表于 10-17 10:50

    從哪個(gè)文檔中我能夠理解PCI配置空間中每個(gè)寄存器的含義

    找到類型0 PCI配置空間標(biāo)頭的任何詳細(xì)說明。我想知道從哪個(gè)文檔中我能夠理解PCI配置空間中每個(gè)寄存器的含義。感謝致敬,Juhi(知識(shí)產(chǎn)權(quán)局
    發(fā)表于 05-27 11:12

    PCIE基本概念與拓?fù)浼軜?gòu)圖

    1 PCIE基本概念1.1 PCIE拓?fù)浼軜?gòu)圖1.2 PCIE Switch內(nèi)部結(jié)構(gòu)圖1.3 PCIE協(xié)議結(jié)構(gòu)圖2 PCIE枚舉原理2.1
    發(fā)表于 02-16 06:08

    CCIX 1.1設(shè)備必須支持PCIe 5.0 PHY或CCIX EDR PHY這兩種物理層嗎

    PCIHeader,可以分為Type0Type1兩種類型。配置空間中,除了PCIHeader,還存在很多描述PCIe相關(guān)能力的寄存器,這些
    發(fā)表于 08-16 15:45

    體驗(yàn)紫光PCIE之DMA讀寫/PIO內(nèi)存讀寫TLP解析

    類型[Fmt,Type]=0x00(表明為3DW Mrd),字節(jié)使能[last DW BE,first DW BE]=0x0f,其他信息對(duì)座入號(hào)就行了,深入了解可讀
    發(fā)表于 11-17 15:08

    PCI總線配置周期產(chǎn)生和配置寄存器

    前面介紹過,每一個(gè)PCI功能(Function)都包含256個(gè)字節(jié)的配置空間(Configuration Space),其中前64個(gè)字節(jié)被稱為Header,剩余的192個(gè)字節(jié)用于一些可選的功能
    的頭像 發(fā)表于 04-13 09:31 ?4993次閱讀
    PCI總線<b class='flag-5'>配置</b>周期產(chǎn)生和<b class='flag-5'>配置</b>寄存器

    BDF與配置空間

    前面的關(guān)于PCI總線的文章介紹過PCI總線的配置空間PCIe總線為了兼容這些PCI設(shè)備,幾乎完整的保留了PCI總線的配置空間。并將
    的頭像 發(fā)表于 05-03 09:06 ?1.1w次閱讀
    BDF與<b class='flag-5'>配置</b><b class='flag-5'>空間</b>

    簡談PCIe的軟件配置方式

    的register。? ? ? ?? ? ? ?上圖是PCIE總線高級(jí)配置結(jié)構(gòu)圖,很明顯可以看出是PCIE配置空間映射的memory
    的頭像 發(fā)表于 07-27 19:16 ?4160次閱讀
    簡談<b class='flag-5'>PCIe</b>的軟件<b class='flag-5'>配置</b>方式

    瑞薩電子宣布成為AVCC聯(lián)盟核心成員,共同助力自動(dòng)駕駛汽車發(fā)展

    瑞薩電子今日宣布加入AVCC聯(lián)盟(Autonomous Vehicle Computing Consortium,自動(dòng)駕駛汽車計(jì)算聯(lián)盟),成為其核心成員。
    發(fā)表于 10-31 16:17 ?2426次閱讀

    圖解PCIE原理(從軟件角度)

    1 PCIE基本概念1.1 PCIE拓?fù)浼軜?gòu)圖1.2 PCIE Switch內(nèi)部結(jié)構(gòu)圖1.3 PCIE協(xié)議結(jié)構(gòu)圖2 PCIE枚舉原理2.1
    發(fā)表于 12-17 18:29 ?29次下載
    圖解<b class='flag-5'>PCIE</b>原理(從軟件角度)

    萬里紅成為可信數(shù)據(jù)空間發(fā)展聯(lián)盟核心成員單位

    近日,北京萬里紅科技有限公司(以下簡稱:萬里紅)憑借在可信數(shù)據(jù)空間領(lǐng)域長期的探索研究和實(shí)踐積累,通過可信數(shù)據(jù)空間發(fā)展聯(lián)盟理事會(huì)審核,正式成為該聯(lián)盟核心成員單位,充分彰顯公司在行業(yè)內(nèi)的領(lǐng)先影響力與持續(xù)創(chuàng)新能力。
    的頭像 發(fā)表于 02-09 17:38 ?1098次閱讀