当前位置: 首页 > news >正文

《PCI Express体系结构导读》随记 —— 第I篇 第3章 PCI总线的数据交换(4)

接前一篇文章:《PCI Express体系结构导读》随记 —— 第I篇 第3章 PCI总线的数据交换(3)

3.2 PCI设备的数据传递

PCI设备的数据传递使用地址译码方式,当一个存储器读写总线事务到达PCI总线时,在这条总线上的所有PCI设备将进行地址译码如果当前总线事务使用的地址在某个PCI设备的BAR空间中时,该PCI设备将使能DEVSEL#信号,认领这个总线事务

如果PCI总线上的所有设备都不能通过地址译码认领这个总线事务,则这条总线的“负向译码”设备将认领这个总线事务如果在这条PCI总线上没有“负向译码”设备,该总线事务的发起者将使用Master Abort总线周期结束当前PCI总线事务

3.2.1 PCI设备的正向译码与负向译码

如上文所述,PCI设备使用“地址译码”方式接收存储器读写总线请求。在PCI总线中定义了两种“地址译码”方式,一个是正向译码,一个是负向译码

下面仍以图3-2所示的处理器系统为例,说明数据传送使用的寻址方法。

当HOST主桥通过存储器或者I/O读写总线事务访问其下所有PCI设备时,PCI总线0下的所有PCI设备都将对出现在地址周期中的PCI总线地址进行译码。如果这个地址在某个PCI设备的BAR空间中命中时,这个PCI设备将接收这个PCI总线请求这个过程也被称为PCI总线的正向译码,这种方式也是大多数PCI设备所采用的译码方式

但是在PCI总线上的某些设备,如PCI-to-(E)ISA桥并不使用正向译码接收来自PCI总线的请求,PCI-to-ISA桥在处理器系统中的位置如图1-1所示。

PCI总线0上的总线事务在三个时钟周期后,没有得到任何PCI设备响应时(即总线请求的PCI总线地址不在这些设备的BAR空间中),PCI-to-ISA桥将被动地接收这个数据请求这个过程被称为PCI总线的负向译码可以进行负向译码的设备也被称为负向译码设备。这也就是上边所说的:

如果PCI总线上的所有设备都不能通过地址译码认领这个总线事务,则这条总线的“负向译码”设备将认领这个总线事务如果在这条PCI总线上没有“负向译码”设备,该总线事务的发起者将使用Master Abort总线周期结束当前PCI总线事务

在PCI总线中,除了PCI-to-(E)ISA桥可以作为负向译码设备PCI桥也可以作为负向译码设备,但是PCI桥并不是在任何时候都可以作为负向译码设备。在绝大多数情况下,PCI桥无论是处理“来自上游总线”,还是处理“来自下游总线”的总线事务时,都使用正向译码方式,但是在某些特殊应用中,PCI桥也可以作为负向译码设备

举一实际场景(实例):

笔记本在连接Dock插座时,也使用了PCI桥。

因为在大多数情况下,笔记本与Dock插座是分离使用的,而且Dock插座上连接的设备多为慢速设备,此时用于连接Dock插座的PCI桥使用负向译码。Dock插座在笔记本系统中的位置如图3-3所示:

当笔记本与Dock建立连接之后,当处理器需要访问Dock中的外部设备时Dock中的PCI桥将首先使用负向译码方式接收PCI总线事务之后将这个PCI总线事务转发到Dock的PCI总线中然后再访问相应的PCI设备

在Dock中使用负向译码PCI桥的优点是该桥管理的设备并不参与处理器系统对PCI总线的枚举过程。当笔记本插入到Dock之后,系统软件并不需要重新枚举Dock中的设备并为这些设备分配系统资源,而仅需要使用负向译码PCI桥管理好其下的设备即可,从而极大降低了Dock对系统软件的影响。

当HOST处理器访问Dock中的设备时,负向译码PCI桥将首先接管这些存储器读写总线事务,然后发送到Dock设备中。值得注意的是,在许多笔记本的Dock实现中,并没有使用负向译码PCI桥,而使用PCI-to-ISA桥

PCI总线规定,使用负向译码的PCI桥,其Base Class Code寄存器为0x06Sub Class Code寄存器为0x04,而Interface寄存器为0x01使用正向译码方式的PCI桥的Interface寄存器为0x00。系统软件(E2PROM)在初始化Interface寄存器时务必注意这个细节。关于Class Code寄存器的详细说明参见:《PCI Express体系结构导读》随记 —— 第I篇 第2章 PCI总线的桥与配置(12)。

综上所述,在PCI总线中有两种负向译码设备,即PCI-to-E(ISA)桥和PCI桥。但是PCI桥并不是在任何时候都是负向译码设备,只有PCI桥连接Dock插座时,PCI桥的Primary Bus才使用负向译码方式。而这个PCI桥的Secondary Bus在接收Dock设备的请求时仍然使用正向译码方式

更多内容请看下回。

http://www.lryc.cn/news/288570.html

相关文章:

  • 力扣0083——删除排序链表中的重复元素
  • MySQL数据库的一些缩写含义
  • 解决 ssh: connect to host github.com port 22: Connection timed out
  • 【iOS ARKit】同时开启前后摄像头BlendShapes
  • Vue3动态插入组件
  • 介绍一下OpenCV中常用的图像处理函数
  • vscode vim 快捷键汇总
  • npm官方注册表和淘宝镜像切换
  • LFU算法
  • JVM系列-7内存调优
  • [UI5 常用控件] 01.Text
  • C语言之指针的地址和指向的内容总结(八十四)
  • 1月25日,每日信息差
  • 前端工程化之:webpack1-3(模块化兼容性)
  • JDK8新特性(一)
  • java实现ftp协议远程网络下载文件
  • 深入浅出理解目标检测的NMS非极大抑制
  • HbuilderX报错“Error: Fail to open IDE“,以及运行之后没有打开微信开发者,或者运行没有反应的解决办法
  • 【Go 快速入门】基础语法 | 流程控制 | 字符串
  • 腾讯云轻量应用Ubuntu服务器如何一键部署幻兽帕鲁Palworld私服?
  • Redis的SDS你了解吗?
  • C#中常见的软件设计模式及应用场景
  • 字符串相关函数和文件操作
  • 【c++学习】数据结构中的栈
  • 新建react项目,react-router-dom配置路由,引入antd
  • Transformer and Pretrain Language Models3-6
  • Linux系统中编写bash脚本进行mysql的数据同步
  • 光耦驱动继电器电路图大全
  • 【AI量化分析】小明在量化中使用交叉验证原理深度分析解读
  • 2024最新版Visual Studio Code安装使用指南