Fork me on GitHub
侧边栏

随笔分类 -  PCIE

摘要:基地址寄存器(BAR)在配置空间(Configuration Space)中的位置如下图所示: 其中Type0 Header最多有6个BAR,而Type1 Header最多有两个BAR。这就意味着,对于Endpoint来说,最多可以拥有6个不同的地址空间。但是实际应用中基本上不会用到6个,通常1~3 阅读全文
posted @ 2025-01-03 16:01 yooooooo 阅读(1412) 评论(0) 推荐(0)
摘要:早期的PC中,所有的IO设备(除了存储设备之外的设备)的内部存储或者寄存器都只能通过IO地址空间进行访问。但是这种方式局限性很大,而且效率低,于是乎,软件开发者和硬件厂商都不能忍了……然后一种新的东西就出来了——MMIO。MMIO,即Memory Mapped IO,也就是说把这些IO设备中的内部存 阅读全文
posted @ 2024-12-28 22:01 yooooooo 阅读(325) 评论(0) 推荐(0)
摘要:前面的文章中介绍过有两种类型的配置空间,Type0和Type1,分别对应非桥设备(Endpoint)和桥设备(Root和Switch端口中的P2P桥)。 Type0还是Type1是由事务层包(TLP)包头中的Type Field所决定的,而读还是写则是由TLP包头中的Format Field所决定的 阅读全文
posted @ 2024-12-28 21:58 yooooooo 阅读(524) 评论(0) 推荐(0)
摘要:需要特别注意的是,PCIe的Spec中明确规定只有Root有权限发起配置请求(Originate Configuration Requests),也就是说PCIe系统里面的其他设备是不允许去配置其他设备的配置空间的,即peer-to-peer的配置请求是不允许的。并且配置请求的路由(Routing) 阅读全文
posted @ 2024-12-27 17:59 yooooooo 阅读(356) 评论(0) 推荐(0)
摘要:前面的文章中介绍过,每一个PCIe设备可以只有一个功能(Function),即Fun0。也可以拥有最多8个功能,即多功能设备(Multi-Fun)。不管这个PCIe设备拥有多少个功能,其每一个功能都有一个唯一独立的配置空间(Configuration Space)与之对应。 和PCI总线一样,PCI 阅读全文
posted @ 2024-12-25 18:25 yooooooo 阅读(844) 评论(0) 推荐(0)
摘要:前面的一系列文章简要地介绍了PCIe总线的结构、事务层、数据链路层和物理层。下面我们用一个简单地的例子来回顾并总结一下。 Requester端 如下图所示,Requester的应用层(软件层)首先向其事务层发送如下信息:32位(或者64位)的Memory地址,事务类型(Transaction Typ 阅读全文
posted @ 2024-12-25 15:01 yooooooo 阅读(489) 评论(0) 推荐(0)
摘要:前面的文章简单的介绍了一些关于PCIe总线事务层(Transaction Layer)和数据链路层(Data Link Layer)的一些基本概念。这篇文章来继续聊一聊PCIe总线的最底层——物理层(Physical Layer)。在PCIe Spec中,物理层是被分为两个部分单独介绍的,分别是物理 阅读全文
posted @ 2024-12-25 10:20 yooooooo 阅读(526) 评论(0) 推荐(0)
摘要:PCIe总线设计之初,充分考虑到了音频和视频传输等这些对时间要求特别敏感的应用。为了保证这些特殊应用的数据包能够得到优先发送,PCIe Spec中为每一个包都分配了一个优先级,通过TLP的Header中的3位(即TC,Traffic Class)。如下图所示: TC值越大,表示优先级越高,对应的包也 阅读全文
posted @ 2024-12-24 16:56 yooooooo 阅读(347) 评论(0) 推荐(0)
摘要:本节概述 传输速率与带宽对应表如下,注:此表为全双工通信速率且没考虑编码方式 详细说明 我们在接触PCIe设备时会接触到一个词,传输速率,比如8GT/s。或者有人问你设备的带宽多少?通信速率多少? Width(带宽):通常用x1、x2、x4、x8等表示,表示该链路由几条lane组成。 Speed(速 阅读全文
posted @ 2024-12-24 11:26 yooooooo 阅读(3532) 评论(0) 推荐(0)
摘要:前面的文章介绍了TLP的几种类型以及TLP的包结构。这篇文章来详细地聊一聊Non-Posted Transaction(包括Ordinary Read、Locked Read和IO/Configuration Writes)与Posted Writes(包括Memory Writes和Message 阅读全文
posted @ 2024-12-24 10:33 yooooooo 阅读(318) 评论(0) 推荐(0)
摘要:先上一张图 PCIe拓扑特征:图的顶部是一个CPU。这里要说明的一点是,CPU被认为是PCle层次结构的顶层。PCle只允许简单的树结构,这意味着不允许循环或其他复杂的拓扑结构。这样做是为了保持与PCI软件的向后兼容性,PCI软件使用一个简单的配置方案来跟踪拓扑,不支持复杂的环境。为了保持这种兼容性 阅读全文
posted @ 2024-12-23 15:40 yooooooo 阅读(736) 评论(0) 推荐(0)
摘要:在介绍事务层之前,首先简单地了解一下PCIe总线的通信机制。假设某个设备要对另一个设备进行读取数据的操作,首先这个设备(称之为Requester)需要向另一个设备发送一个Request,然后另一个设备(称之为Completer)通过Completion Packet返回数据或者错误信息。 在PCIe 阅读全文
posted @ 2024-12-23 14:29 yooooooo 阅读(502) 评论(0) 推荐(0)
摘要:和很多的串行传输协议一样,一个完整的PCIe体系结构包括应用层、事务层(Transaction Layer)、数据链路层(Data Link Layer)和物理层(Physical Layer)。 其中,应用层并不是PCIe Spec所规定的内容,完全由用户根据自己的需求进行设计,另外三层都是PCI 阅读全文
posted @ 2024-12-17 13:58 yooooooo 阅读(860) 评论(0) 推荐(0)
摘要:PCIe总线的提出可以算是代表着传统并行总线向高速串行总线发展的时代的到来。实际上,不仅是PCI总线到PCIe总线,高速串行总线取代传统并行总线是一个大的趋势。如ATA到SATA,SCSI到USB等…… 不过,为了兼容之前的PCI总线设备,虽然PCIe是一种串行总线,无法再物理层上兼容PCI总线,但 阅读全文
posted @ 2024-12-17 11:28 yooooooo 阅读(577) 评论(0) 推荐(0)
摘要:前面的文章中多次说道,PCIe总线在软件上是向前兼容PCI总线的。因此,PCIe总线完整的继承了PCI总线中的配置空间(Configuration Header)的概念。在PCIe总线中也有两种Header,Header0和Header1,分别代表非桥和桥设备,这与PCI总线是完全一致的。在PCIe 阅读全文
posted @ 2024-12-17 11:14 yooooooo 阅读(197) 评论(0) 推荐(0)
摘要:PCI-X总线在PCI总线的基础上发展而来,其在软件和硬件层面上都是兼容PCI总线的,但是却显著的提高了总线的性能。也就是说PCI-X的设备可以直接插到PCI的插槽中去,PCI的设备也可以直接插到PCI-X的插槽中去。 从硬件层面上来说,PCI-X继承了PCI总线中的Reflected-Wave S 阅读全文
posted @ 2024-12-14 17:31 yooooooo 阅读(213) 评论(0) 推荐(0)
摘要:为了能够取得更高的带宽,新版本的PCI Spec将PCI总线提高到了64-bit并将频率提高到了66MHz,最高支持533MB/s。下图描述的是一个典型的66Mhz,64-bit的PCI系统结构图。 前面的文章介绍过,PCI总线采用了Reflected-Wave Signaling技术,因此总线频率 阅读全文
posted @ 2024-12-14 17:22 yooooooo 阅读(205) 评论(0) 推荐(0)
摘要:上一篇文章中也是说到了,I/O Address Space的空间很有限(64KB),所以一般在I/O Space中都有两个寄存器,第一个指向要操作的内部地址,第二个存放读或者写的数据。因此,对于PCI的配置周期来说,包含了两个步骤: Step1:CPU先对IO Address中的0xCF8~0xCF 阅读全文
posted @ 2024-12-13 17:30 yooooooo 阅读(281) 评论(0) 推荐(0)
摘要:PCI总线具有32位数据/地址复用总线,所以其存储地址空间为2的32次方=4GB。也就是PCI上的所有设备共同映射到这4GB上,每个PCI设备占用唯一的一段PCI地址,以便于PCI总线统一寻址。每个PCI设备通过PCI寄存器中的基地址寄存器来指定映射的首地址。如下图所示: 注:需要注意的是PCI的地 阅读全文
posted @ 2024-12-12 23:44 yooooooo 阅读(904) 评论(0) 推荐(0)
摘要:PCI总线使用INTA#、INTB#、INTC#和INTD#信号向处理器发出中断请求。 这些中断请求信号为低电平有效,并与处理器的中断控制器连接。在PCI体系结构中,这些中断信号属于边带信号(Sideband Signals),PCI总线规范并没有明确规定在一个处理器系统中如何使用这些信号,因为这些 阅读全文
posted @ 2024-12-10 17:38 yooooooo 阅读(907) 评论(0) 推荐(0)