谈谈PCIe VID、DID、SSID、SSVID背后的智慧
PCIe Vendor ID
想了半天还是觉得从“ID是什么”这个问题开始比较好。那么ID是什么?ID就是身份。那身份又是什么?身份就是一个合理存在,用于区分不同个体。为什么叫“合理存在”呢?如果国家不给你发身份证,你就是黑户,很多事你都干不了。这意味着什么呢?你合理存在大家才敢认识你,了解你,跟你一起玩,一起做很多很多美好的事。这就是身份的现实意义,PCIe的Vendor ID其实也是这个思想。
你想做PCIe产品?必须得从PCI-SIG申请一个身份,也就是Vendor ID(即VID),用它来标记你的公司。有了这个东西,PCI-SIG的大家庭才带你一起做很多很多事,这里可以列举几个事情的例子供大家一起理解。
-
比如你是个网卡或者显卡芯片的开发者,有了Vendor ID你的卡才能合理的接入主机。
-
比如你要买别家的PCIe IP用来做SOC芯片,有了Vendor ID人家才会跟你谈买卖,谈技术支持。
-
比如你发现协议哪里定义的有问题,有了Vendor ID才可以提出你的修改意见。
-
比如你要从PCI-SIG买测试夹具,有了Vendor ID人家才卖给你。
还有很多很多事情,没有“身份”是做不了的。那没有身份行不行呢?这个问题就属于社会学问题了,需要大家自己去悟。
我们回头继续思考第一个问题。为什么说有了Vendor ID你的网卡或者显卡才能合理的接入主机呢?这是因为在工程上你做完设备之后还要为你的设备做驱动,你的驱动要合入操作系统才能工作,而操作系统就是根据Vendor ID来选择加载谁家的驱动。想想看为什么你的电脑插上NVIDIA的卡或者AMD的卡都能正常工作,为什么换一张不同厂家的网卡,机器也照常运转。这背后的逻辑就是用一个简单的Vendor ID来实现的。注意这么讲是有一些不准确的,这么讲的目的是为了强调Vendor ID的重要性,我们之后会逐步完善其中道理。
当然事情并没有那么简单,Vendor ID只是开了个头,驱动开发还是有蛮多事情要做的。
协议中的定义
在开始剩下的话题之前我把协议中定义这些ID的地方贴出来,这样我们理解起来就有一个直观的感受。
下图是Type 0 Configuration Space Header中的定义。

下图是Type 1 Configuration Space Header中的定义。

我们都知道Type 0类型设备是EP,而Type 1类型设备是RC或者Switch。Type 1设备没有Subsystem Vendor ID和Subsystem ID吗?其实不是,PCI-SIG专门定义了一个Subsystem ID and Sybsystem Vendor ID Capability 来为Type 1设备定义Subsystem Vendor ID和Subsystem ID,如下图。

这就是PCIe强大扩展能力的一个表现,如果你想扩展一个功能,就增加一个Capability。想想看,如果16-bit的Vendor ID和Device ID不够用了,PCI-SIG会怎么办?
从另一个侧面,为什么PCI-SIG从一开始就不为Type 1设备在Type 1 Configuration Space Header中定义好Subsystem Vendor ID和Subsystem ID呢?增加一个DW不行吗?当时的背景我不知道哈,反正从现在来看,我觉得用一个Capability来扩展的方式增加了协议的理解难度,不太好。
PCIe DID、SSID、SSVID
理解了Vendor ID的核心思想,再来理解DID、SID、SVID就舒服多了,他们都是“身份”,只不过应用场景变了。
DID即Device ID。虽然PCI-SIG定义了Device ID的字段,但这个字段的值确实由Vendor自行定义的,它的目的是用来定义Vendor实现的不同类别的产品。NVIDIA每年都会发布一些产品,每发布一个新的产品,它的驱动都要随着变化。用Device ID来赋予每个产品不同的身份,就可以为不同的产品加载对应的驱动。
SSVID即Subsystem Vendor ID,协议上简写为SSVID,实际上还有叫SVID的简称,虽然我们以协议为准,但是这个事情还是要知道的。PCI-SIG定义这个字段的目的是为了把板卡制造商管理起来。如果做芯片的和做板卡的不是同一家公司,那么定义这个值就有意义了,因为你同一型号的芯片可以卖给多个板卡厂商去做,而不同的板卡厂商因为设计上的差异性会引入驱动上的差异性。而用SSVID就可以解决这个问题。
SSID即Subsystem ID,同样也还有SID的叫法。借助对DID的理解,大家可能已经能知道这个字段的意义了,有些PCB厂家可能会用同一个芯片做不同的板卡,所以用这个字段来解决这个问题。
顺便再聊一下配置空间中的Revision ID(RID)。玩家们都知道,厂家在发布驱动的时候并不是一次就能发布最好的驱动,厂家可能会因为修改BUG、优化性能等原因而修改驱动,厂家管这个过程叫驱动升级。驱动每升级一次,就要相应的改变一次Revision ID。当然驱动回退也是用这个字段实现的。
最后附一下Linux和Windows操作系统中查看这些ID的方法。大家直观感受一下。
Windows:
设备管理器中右击PCI相关硬件 → 属性 → 详细信息 → 硬件ID:

Linux:
使用lspci命令

做个总结
还记得我们前面聊Vendor ID时说过的描述不准确的问题吗?PCI-SIG其实是通过VID、DID、SSVID、SSID和RID把整个PCIe设备开发过程中可能发生变化的地方都涵盖进去,从而让操作系统总是能加载到正确的驱动的,单一个Vendor ID是不够的。
不得不说PCI-SIG定义的ID思想真的是大智慧。这种思想其实现在已经渗透到了很多技术开发领域,在我们的芯片开发过程中,我们会定义CHIP ID来标识芯片的唯一性,我们也会定义Foundary ID来标识芯片是由谁生产的,定义TestVendor ID来标识芯片是由谁测试的。甚至在SOC芯片的设计过程中,我们也会使用ID的概念来标识各个组件,这使得我们在各组件的访问关系上可以做很多的事情,比如访问保护等等。
好了,这次就写到这里,如果有不同见解,还是请不吝赐教。
相关文章:
谈谈PCIe VID、DID、SSID、SSVID背后的智慧
PCIe Vendor ID 想了半天还是觉得从“ID是什么”这个问题开始比较好。那么ID是什么?ID就是身份。那身份又是什么?身份就是一个合理存在,用于区分不同个体。为什么叫“合理存在”呢?如果国家不给你发身份证,你就是黑户…...
9月11日
使用绘制事件完成钟表的绘制 头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include<QTcpSocket> #include<QMessageBox>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpub…...
昇腾310内存拷贝测试
目的 从服务器将数据拷贝到昇腾310 ai卡 结论 数据进入到服务器后的内存不能直接用昇腾acl接口拷贝到AI卡。 需要 1)先用acl接口申请内存; 2) 将数据拷贝到acl申请的内存 3)用acl接口将数据拷贝到AI卡 makefile # Copyri…...
‘$store‘ is not defined.
vueX不知道是否发挥作用?this.$store获取不到store/index.js中的数据 原因:版本问题 vuex版本不对,获取不到store 默认版本说明vuevue3vueXvue4vuex4只能在vue3中使用 vue默认vue3版本,vuex默认vuex4版本,vuex4只能…...
如何利用Linux提升工作效率和安全性?
Linux,作为一款自由和开放源代码的操作系统,已经在全球范围内得到了广泛的应用。无论是服务器、云计算、物联网,还是超级计算机,Linux都扮演着重要的角色。本文将深入探讨Linux的应用场景,以及如何利用Linux提升工作效…...
初始Linux 和 各种常见指令
目录 Linux背景 1. 发展史 Linux发展历史 1.历史 2. 开源 Linux下基本指令 01. ls 指令 02. pwd命令 03. cd 指令 04. touch指令 05.mkdir指令(重要): 06.rmdir指令 && rm 指令(重要): …...
【稀疏矩阵】使用torch.sparse模块
文章目录 稀疏矩阵的格式coocsrcsc Construction of Sparse COO tensorsConstruction of CSR tensorsLinear Algebra operations(稀疏与稠密之间混合运算)Tensor methods and sparse(与稀疏有关的tensor成员函数)coo张量可用的ten…...
如何增加谷歌网站曝光率?
增加谷歌网站曝光率其实就是让更多的人在搜索相关内容时,能看到你的网站。首先你就要搞清楚用户在搜索什么,这样才能把正确的内容呈现在他们面前。首先,你得站在用户的角度思考,想想他们在搜索与你网站相关的信息时,可…...
虚幻中的c++(持续更新)
文章目录 虚幻中的cUPROPERTY参数 UFUNCTION参数 虚幻中的c UPROPERTY 是虚幻中用于声明属性的宏,它用于标记某个属性是一个虚幻托管的属性,并且可以在编辑器中进行访问和操作。其提供了一系列参数,用于定义属性的各种行为,例如是…...
83-MySQL 索引有几种
MySQL中的索引主要有以下几种: 普通索引:最基本的索引类型,没有唯一性的限制,可以通过多个字段创建复合索引。 唯一索引:与普通索引类似,但区别在于唯一索引的每一个索引值只对应唯一的数据记录。 主键索…...
文献解读-The trans-omics landscape of COVID-19
关键词:流行病学;基因测序;变异检测; 文献简介 标题(英文):The trans-omics landscape of COVID-19 标题(中文):COVID-19的跨组学全景 发表期刊:…...
Unity核心实践小项目
要源码包的私信我。 简介 衔接Unity核心学习后的实操小项目 需求分析 准备工作 面板基类 为了能够控制一画布整体的透明度,所以需要给每个面板都添加一个 CanvasGroup组件 UI管理器 UGUI方面的参数设置 开始场景 场景搭建 直接用资源包搭建好的场景:…...
Avaloia 实现国产麒麟系统中文显示界面
最近在搞一个国产麒麟系统的接口对接,因为,接口内含复杂的签名验证,而且还是离线环境,所以,postman不是很好用。 就想着哪个方式好一些,主要是有选择图片的操作,所以,在Electron和A…...
pytest 生成allure测试报告
allure的安装 github地址 allure资产列表 windows下载.zip,解压并配置环境变量PATH;linux下载tar.gz,解压配置; allure作为pytest插件 # 安装 pip install allure-pytest# 执行单元测试,生成allure测试数据&…...
查询GPU版本以及PyTorch中使用单GPU和多GPU
文章目录 多GPU介绍GPU可用性及版本检查使用单个GPU使用多个GPU多GPU介绍 多GPU是指使用多个显卡来同时进行计算,以加速深度学习模型的训练和推断。每个GPU都有自己的内存和计算能力,通过同时利用多个GPU可以并行地执行模型的计算,从而提高整体的计算效率。 GPU可用性及版…...
基于SpringBoot+Vue的线上考试系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的线上考试…...
动手学深度学习(pytorch土堆)-02TensorBoard的使用
1.可视化 代码使用了 torch.utils.tensorboard 将数据记录到 TensorBoard 以便可视化。具体来说,它将标量数据记录到目录 logs 中,使用的是 SummaryWriter 类。 代码分解如下: SummaryWriter("logs"):初始化一个 Ten…...
STM3学习记录
一、串口 1.串口定义,将串口相关寄存器的首地址强制转化为串口结构体,方便通过结果体访问串口的寄存器 #define __IO volatile /*!< Defines read / write permissions */ typedef struct {__IO uint32_t SR; /*!< US…...
【网络】应用层协议-http协议
应用层协议-http协议 文章目录 1.Http协议1.1什么是http协议1.2认识URL1.3urlencode和urldecode1.4HTTP请求协议格式1.5HTTP响应协议格式1.6HTTP常见的Header1.7HTTP常见状态码1.8HTTP的方法1.8根据url调取对应的服务 2.cookie和session2.1cookie2.2session 3.HTTPS协议3.1对称…...
【python】OpenCV—Mask RCNN for Object Detection and Instance Segmentation
文章目录 1、任务描述2、MASR RCNN 网络结构3、方法实现4、结果展示5、涉及到的库getPerfProfile 6、参考 1、任务描述 利用 mask rcnn 网络,进行图片和视频的目标检测和实例分割 2、MASR RCNN 网络结构 3、方法实现 # Copyright (C) 2018-2019, BigVision LLC (L…...
未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...
Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...
【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...
以光量子为例,详解量子获取方式
光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...
论文笔记——相干体技术在裂缝预测中的应用研究
目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...
windows系统MySQL安装文档
概览:本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容,为学习者提供全面的操作指导。关键要点包括: 解压 :下载完成后解压压缩包,得到MySQL 8.…...
tomcat指定使用的jdk版本
说明 有时候需要对tomcat配置指定的jdk版本号,此时,我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...

