从零开始讲PCIe(1)——PCI概述

news2024/11/26 17:49:54

一、前言

        在之前的内容中,我们已经知道了PCIe是一种外设总线协议,其前身是PCI和PCI-X,虽然PCIe在硬件上有了很大的进步,但其使用的软件与PCI系统几乎保持不变。这种向后兼容性设计,目的是使从旧设计到新设计的迁移更加顺畅,通过尽可能简单、低成本的方式进行软件更改。因此,旧的PCI软件在PCIe系统中可以不做任何更改地运行,而新的软件也会继续使用相同的操作模型。虽然现在PCI和PCI-X已经基本退出市场,但是PCIe中的很多设计和机制都是源自于此,所以,理解PCI及其操作模型将有助于更好地理解PCIe的工作原理。

二、PCI总线的基本概念

        图1-1展示了基于PCI总线的旧系统架构。在该系统中,有一个北桥(North Bridge),它之所以被称为“北桥”,是因为在系统图中位于中央PCI总线的北侧。如果把图看作一张地图,北桥的位置位于图中“北边”。北桥的主要功能是作为处理器和PCI总线之间的接口。与北桥相关的总线包括处理器总线、系统内存总线、AGP图形总线和PCI总线。

        在PCI总线上,有多个设备共享这条总线,这些设备要么直接连接在总线上,要么插入到扩展卡插槽中。除此之外,南桥(South Bridge)负责将PCI连接到系统的外围设备,例如ISA总线,用于支持一些过渡时期的旧设备。南桥通常也是PCI的中央资源,负责提供系统信号,如复位、参考时钟以及错误报告。

        这种架构的设计通过北桥和南桥的分工,北桥负责高速设备(如CPU和内存)的互连,而南桥则连接低速的外围设备。随着技术的进步,这种北桥和南桥的架构逐渐被更高效的集成芯片所替代,例如现在的许多处理器中已经集成了内存控制器和I/O控制器,从而简化了系统设计并提高了性能。

        PCI总线是一种共享总线,所以需要特定的仲裁器(Arbiter)来决定当前时刻的总线的控制权。一般该仲裁器位于北桥中,而仲裁器(主机)则通过一对引脚,REQ#(request) 和GNT# (grant)来与各个从机连接。如下图所示:

        正如图1-2所示,请求(REQ#)引脚表示 initiator需要使用总线,并将请求发送给总线仲裁器,由仲裁器对所有同时发出的请求进行评估。仲裁器通常位于总线之上的桥接器中,负责接收来自总线上的所有控制器(Bus Masters)的仲裁请求。

        仲裁器根据请求情况决定哪个请求者将成为下一个总线的所有者,并向其发送授权(GNT#)信号。根据PCI协议,当前一次事务完成后,当总线处于空闲状态时,看到其GNT#信号被断言的设备将被指定为下一任总线控制器( initiator),并可以开始其事务操作。

        这种机制确保了多个设备在共享总线上能够有序地发起数据传输,避免冲突,并通过仲裁器的调度来平衡总线的使用,保证系统的高效运行。

三、一个典型的PCIe总线周期

        图1-3展示了一个典型的PCI总线周期。PCI是同步总线,这意味着所有事件都在时钟的边沿发生。此外,PCI总线是一种地址和数据复用的总线,即地址和数据占用同一组信号线AD。

        为了保持PCI的低成本设计目标,多个信号在总线上被赋予了多重含义以减少引脚数量。32位的地址和数据线是复用的,而C/BE#(命令/字节启用)信号共享了四根引脚,目的也是为了减少引脚数量。虽然减少引脚数可以降低成本,但也因此导致了PCI需要使用“转换周期”(turn-around cycles),这会增加额外的延迟。这种设计限制了同时传输地址和数据的能力,意味着在前一个事务的数据传输完成之前,无法为下一个事务发送地址信息,也因此无法实现流水线事务处理。这虽然简化了硬件设计,但带来了性能上的一些限制。

        为协调数据传输过程中的时序,PCI使用了一些握手信号,包括FRAME#、DEVSEL#、TRDY#、IRDY#和STOP#。FRAME#信号用于指示总线事务的开始和进行;DEVSEL#是设备选择信号,用于目标设备响应事务;TRDY#(目标设备就绪)和IRDY#(发起设备就绪)分别用于表示目标设备和发起设备已经准备好进行数据传输;STOP#则用于在目标设备希望终止事务时断言。这些握手信号在事务期间控制事件的时序,确保发起者和目标设备之间的同步与协调。虽然PCI通过这种设计达到了低成本的目标,但在一定程度上牺牲了传输效率和速度。

  • 时钟边沿1:FRAME#和IRDY#信号均为无效状态,表示总线处于空闲状态。同时,GNT#信号为生效状态,表明总线仲裁器已授权当前设备成为下一次总线访问的发起者(initiator),但事务尚未开始。

  • 时钟边沿2:发起者断言FRAME#信号,表示新的事务开始。同时,它发送该事务的地址和命令信息,总线上的所有设备接收并解码该地址,判断是否与自身匹配。

  • 时钟边沿3:发起者通过断言IRDY#信号表示准备好进行数据传输。由于这是读取操作,AD线进入“转换周期”(turn-around cycle),切换信号方向,以避免冲突。

  • 时钟边沿4:目标设备响应,断言DEVSEL#信号,表明它已被选中并准备参与事务。同时,目标设备通过TRDY#信号表示准备好发送数据。如果IRDY#和TRDY#信号同时生效,数据传输在该时钟周期完成,表示第一个数据阶段结束。FRAME#信号仍然为生效状态,表示事务未完成。

  • 时钟边沿5:目标设备未准备好传输下一组数据,取消了TRDY#信号,进入“等待状态”(Wait State),导致事务延迟一个时钟周期。

  • 时钟边沿6:目标设备准备好第二组数据,数据传输完成,FRAME#信号仍然为生效状态,表示还会有更多数据。

  • 时钟边沿7:发起者进入“等待状态”,暂时暂停数据传输,用以处理内部缓冲。这会延迟事务但不终止它。

  • 时钟边沿8:第三组数据传输完成,此时发起者取消FRAME#信号,目标设备知道这是最后一个数据阶段,事务结束。总线返回空闲状态,准备下一次使用。

四、PCI的反射波信号

        PCI架构理论上支持每个总线上最多32个设备,但在实际的电气限制下,这个数量远小于理论值,大约在10到12个电气负载的范围内,且这是基于33MHz的基础频率。这种限制的原因是PCI总线使用了一种称为“反射波信号传输”的技术来降低总线的功耗(详见图1-4)。在这种模型中,设备通过实现较弱的发送缓冲器来节约成本和功耗,这些缓冲器只能将信号驱动到大约一半的电压,尚不足以完全切换信号。

        信号的入射波沿着传输线传播,直到到达传输线末端。由于设计上末端没有终端电阻,波前会遇到无限阻抗并反射回去。这种反射是累加的,会使信号电压在返回发射端的过程中逐渐增加到全电压水平。当信号到达源缓冲器时,驱动器的低输出阻抗将终止信号,防止进一步反射。整个过程,从缓冲器发送信号到接收器检测到有效信号的时间,包括信号在传输线上的传播时间、反射延迟以及设置时间,必须小于时钟周期。

        随着总线上的电气负载数量增加或传输线长度加长,信号完成这一往返的时间也会增加。在33MHz频率下的PCI总线,只能满足约10到12个电气负载的信号时序要求。一个电气负载是指系统板上的一个设备,但一个插满扩展卡的插槽实际上算作两个负载。因此,33MHz的PCI总线在可靠运行时,最多只能支持4到5个扩展卡插槽。

        这种设计确保了在不增加功耗的情况下,能够实现信号的可靠传输,但也因此限制了PCI总线上的设备数量和扩展能力。

        为了在系统中连接更多的负载,需要使用PCI到PCI桥接器,如图1-5所示。当更现代化的芯片组出现时,外围设备的数量迅速增长,它们之间对共享PCI总线的访问竞争导致性能受到限制。尽管PCI仍然广泛用于外设,但其速度没有跟上发展需求,成为系统瓶颈。

        为了解决这一问题,PCI被从系统外围设备和内存之间的主路径中移出,芯片组互连被专有解决方案(如Intel的Hub Link接口)取代。PCI桥接器是拓扑结构的延伸。每个桥接器都会创建一个新的PCI总线,这条总线在电气上与其上方的总线隔离,从而允许连接另外10到12个负载。一些设备也可以是桥接器,这样就允许在系统中连接大量设备。

        PCI架构允许在单个系统中最多支持256条总线,每条总线上最多可以连接32个设备。这种设计大大扩展了系统可连接的设备数量,同时通过电气隔离解决了原始共享总线结构带来的负载限制问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2187399.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【QGis】生成规则网格/渔网(Fishnet)

【QGis】生成规则网格/渔网(Fishnet) QGis操作案例参考 QGIS下载安装及GIS4WRF插件导入可参见另一博客-【QGIS】软件下载安装及GIS4WRF插件使用。 QGis操作案例 1、加载中国省级边界,QGis界面如下: 查看坐标系: 如…

详解JVM类加载机制

❝ 前几篇文章我们分别详细描述了 JVM整体的内存结构 JVM对象内存是如何布局的以及内存分配的详细过程 但是对JVM内存结构各个模块没有深入的分析,为了熟悉JVM底层结构,接下来将把JVM运行时数据区的各个模块逐一分析,体系化的理解JVM的各个模…

【S32K3 RTD LLD篇5】K344 ADC SW+HW trigger

【S32K3 RTD LLD篇5】K344 ADC SWHW trigger 一,文档简介二,ADC SW HW 触发2.1 软硬件平台2.2 SWADC 软件触发2.3 SWBCTUADC 软件BCTU触发2.4 PITTRIGMUXADC 硬件PIT TRIGUMX触发2.5 EMIOSBCTUHWADC硬件EMIOS BCTU触发2.6 EMIOSBCTUHW LISTADC硬件EMIOS …

【计算机毕业设计】springboot游戏分享网站

摘 要 网络的广泛应用给生活带来了十分的便利。所以把游戏分享管理与现在网络相结合,利用java技术建设游戏分享网站,实现游戏分享的信息化。则对于进一步提高游戏分享管理发展,丰富游戏分享管理经验能起到不少的促进作用。 游戏分享网站能够…

Oracle架构之物理存储中各种文件详解

文章目录 1 物理存储1.1 简介1.2 数据文件(data files)1.2.1 定义1.2.2 分类1.2.2.1 系统数据文件1.2.2.2 撤销数据文件1.2.2.3 用户数据文件1.2.2.4 临时数据文件 1.3 控制文件(Control files)1.3.1 定义1.3.2 查看控制文件1.3.3…

【重学 MySQL】五十五、浮点和定点数据类型

【重学 MySQL】五十五、浮点和定点数据类型 种类选择数据精度说明浮点数据精度定点数据精度总结 精度误差说明浮点数据精度误差定点数据精度误差总结 示例注意事项开发中经验 在MySQL中,浮点和定点数据类型用于存储小数和实数。 种类 MySQL提供了两种主要的浮点数…

SuiteCRM系统 responseEntryPoint SQL注入复现(CVE-2024-36412)

0x01 产品描述: SuiteCRM是一款开源的CRM(客户关系管理)系统,它致力于为世界各地的用户提供高效、灵活和可定制的CRM解决方案。它为企业和组织提供了一套完整的客户关系管理解决方案,无论是中小型企业还是大型企业&…

Python和R及Julia妊娠相关疾病生物剖析算法

🎯要点 算法使用了矢量投影、现代优化线性代数、空间分区技术和大数据编程利用相应向量空间中标量积和欧几里得距离的紧密关系来计算使用妊娠相关疾病(先兆子痫)、健康妊娠和癌症测试算法模型使用相关性投影利用相关性和欧几里得距离之间的关…

linux第二课:常用命令

Kali Linux,黑客必备神器。跟着我,带你从入门到入狱! 第二课,常用命令。 1.whoami 翻译为中文:我是谁 用途:输出现在自己的用户身份(用户名) 参数:无参数 好吧,这透明度一调都不…

基于SpringBoot+Vue的汽车保险理赔系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…

mysql UDF提权(实战案例)

作者:程序那点事儿 日期:2024/09/29 16:10 什么是UDF? 全称 User Define Function (用户自定义函数)UDF提权,就是通过自定义函数,实现执行系统的命令。 dll(windows,dll文件是c语…

10.1 10.3 图DFS 中等 207 Course Schedule 210 Course Schedule Ⅱ

207 Course Schedule class Solution { public:bool hasCycle(int course ,unordered_map<int,vector<int>>& graph,vector<int>& visitStatus){//正在访问的结点再次被访问&#xff0c;存在环if(visitStatus[course] 1)return true;//该结点已经被…

【CViT】Deepfake Video Detection Using Convolutional Vision Transformer

文章目录 Deepfake Video Detection Using Convolutional Vision Transformerkey points**卷积视觉变压器**FLViT实验总结Deepfake Video Detection Using Convolutional Vision Transformer 会议/期刊:2021 作者: key points 提出了一种用于检测深度伪造的卷积视觉变压器…

Linux学习之路 -- 线程 -- 死锁及线程安全相关问题

在上文中&#xff0c;我们已经介绍了线程池的编写&#xff0c;下面补充一下线程的相关知识。 目录 1、线程安全与可重入 <1>概念 <2>区别联系 <3>常见线程不安全的情况 <4>常见的不可重入情况 2、死锁问题 <1>死锁概念 <2>死锁四…

sql-labs靶场第二关测试报告

目录 一、测试环境 1、系统环境 2、使用工具/软件 二、测试目的 三、操作过程 1、寻找注入点 2、注入数据库 ①Order by判断列数 ②判断回显地方 ③爆库&#xff0c;查看数据库名称 ④爆表&#xff0c;查看security库的所有表 ⑤爆列&#xff0c;查看users表的所有…

Redis-哨兵

概念 Redis Sentinel 相关名词解释 注意: 哨兵机制不负责存储数据,只是对其它的redis-server进程起到监控的作用哨兵节点,也会搞一个集合,防止一个挂了 ⼈⼯恢复主节点故障 用户监控: 实际开发中,对于服务器后端开发,监控程序,是很重要的 服务器长期运行,总会有一些意外,…

16.数据结构与算法-串,数组与广义表(串,BF算法,KMP算法)

串&#xff08;String&#xff09; 串的定义 关于串的术语 串的案例引入 串的类型定义 串的顺序存储结构 串的链式存储结构-块链结构 串的模式匹配算法&#xff08;BF算法与KMP算法&#xff09; BF算法 BF算法时间复杂度 KMP算法

CSS滚动条

通过《CSS盒子模型》一节的学习我们知道&#xff0c;页面中的每个元素都可以看作是一个矩形的盒子&#xff0c;我们可以使用 CSS 来控制盒子的大小、位置等等信息。默认情况下&#xff0c;当元素中的内容超出盒子的大小时&#xff0c;例如元素内容区的宽度和高度所组成的矩形区…

Django连接Dify、ChatGPT4o并计算tokens数量方法

通过Dify可以连接很多模型国内、国外的都可以进行选择可以到Dify里创建一个空白应用&#xff0c;然后点击进入就可以看到API了api_url "http://192.168.15.131/v1/chat-messages" api_key "app-UtzTpVNwpTLUcGvRNnnK9QNY" headers {"Authorization…

网站开发基础:JavaScript

前端开发主要使用的技术如 HTML、CSS 和 JavaScript 等。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><style>.myDivClass{border: solid red 1px;width: 50px;height:…