谈谈PCIe VID、DID、SSID、SSVID背后的智慧

                                             PCIe Vendor ID
 

         你想做PCIe产品?必须得从PCI-SIG申请一个身份,也就是Vendor ID(即VID),用它来标记你的公司。有了这个东西,PCI-SIG的大家庭才带你一起做很多很多事,这里可以列举几个事情的例子供大家一起理解。比如你是个网卡或者显卡芯片的开发者,有了Vendor ID你的卡才能合理的接入主机。比如你要买别家的PCIe IP用来做SOC芯片,有了Vendor ID人家才会跟你谈买卖,谈技术支持。比如你发现协议哪里定义的有问题,有了Vendor ID才可以提出你的修改意见。比如你要从PCI-SIG买测试夹具,有了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的概念来标识各个组件,这使得我们在各组件的访问关系上可以做很多的事情,比如访问保护等等。

                        
原文链接:https://blog.csdn.net/bcs_01/article/details/142148983

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值