文章目录
- 总线
- PCIE
- PCIE对应版本速率
- pcie拓扑
- linux查看pcie设备
- PCIE配置空间
- BAR(基地址寄存器)
总线
什么是总线
总线就是电脑内部交互的通道。
最开始CPU连接声卡或者网卡用的是不同接口,比如你声卡坏了,换一个声卡,接口不一样了,就无法连接到cpu使用。
为了解决这个问题,IBM和intel就定义了一个标准,统一cpu连接外设接口,这样就可以随意替换了。
总线标准的演进:ISA总线 -> pci总线(并行) -> pcie
并行总线需要照顾同批数据的传输,所以速率并不比串行总线快
串行总线频率很高,当前都换成串行总线了
比喻可以对比散弹枪和机关枪
PCIE
PCIE是总线标准,CPU和外设连接的总线,他已成为计算机的标准总线,主要用于连接外设(声卡,网卡,显卡)。
PCIE点对点,cpu和endpoint都一条独立链路连接。
pcie速率很快,pcie接口一般插显卡,也可以插无线网卡,固态硬盘,等其他硬件,以及转换成USB接口。
PCI总线是一种地址和数据复用的总线,即地址和数据占用同一组信号线AD
PCIE对应版本速率
pcie拓扑
CPU+RC,对外可提供多个PCIE接口;这个PCIE接口,可以接EP设备、PCI桥、Switch设备;
RC:root complex, 根桥作为cpu和pcie的媒介,是用于将一个PCIE接口拓展成多个PCIE接口,区别是RC集成在芯片内部,并且还会连接内存;
Switch: 用于拓展PCIE接口,PCIE是串行接口,所以一个PCIE接口只能接一个PCIE设备,想要多接几个PCIE设备就需要用到Switch设备,起到数据转发的作用;可以理解为usb的扩展坞,连接其他PCIE
EP就是终端设备,没有转发数据的功能,比如说GPU
linux查看pcie设备
PCIE配置空间
每一个PCIe设备可以只有一个功能(Function),即Fun0。也可以拥有最多8个功能,即多功能设备(Multi-Fun)。
每个设备必须要有功能0(Fun0),其他的7个功能(Fun1~Fun7)都是可选的。不管这个PCIe设备拥有多少个功能,其每一个功能都有一个唯一独立的配置空间(Configuration Space)与之对应。
PCIe总线中的每一个功能(Function)都有一个唯一的标识符与之对应。这个标识符就是BDF(Bus,Device,Function)在BDF中,Bus Number占用8位,Device Number占用5位,Function Number占用3位。
BAR(基地址寄存器)
Bar空间 是 PCIe总线中的一部分,它是 PCIe 设备与主板之间进行通信的关键组件。
BAR空间是个“虚拟空间”!bar地址本身是没有对应物理存储器的!只是用来做映射(包括寻址、路由操作)的中间量!只有在pcie内才能看到或者说有意义!实际访问需要一个地址转换模块,控制透传位数后拼凑出实际的物理内存地址!
BAR寄存器中的数据是表示PCI设备在PCI地址空间中的基地址(用于TLP路由),不是表示PCIE设备内存在CPU内存中的映射地址。PCI地址空间需要在初始化时就映射为存储器域的存储器地址空间,方便处理器访问。