《PCI Express体系结构导读》随记 —— 第I篇 第2章 PCI总线的桥与配置(7)

接前一篇文章:《PCI Express体系结构导读》随记 —— 第I篇 第2章 PCI总线的桥与配置(6)

2.2 HOST主桥

MPC8548处理器的拓扑结构如图2-2所示:

OCeaN部件的拓扑结构如图2-3所示:

2.2.1 PCI设备配置空间的访问机制

为了便于理解,再次贴出图1-1。

PCI总线规定访问配置空间的总线事务,即配置读写总线事务,使用ID号进行寻址PCI设备的ID号总线号(Bus Number)设备号(Device Number)功能号(Function Number)组成。

  • 总线号(Bus Number)

其中,总线号在HOST主桥遍历PCI总线树时确定。PCI总线可以使用PCI桥扩展PCI总线,并形成一棵PCI总线树。在一棵PCI总线树上,有几个PCI桥(包括HOST主桥),就有几条PCI总线。在一棵PCI总线树中,总线号由系统软件决定通常,与HOST主桥直接相连的PCI总线编号为0,系统软件使用DFS(Depth-First Search,深度优先)算法扫描PCI总线树上的所有PCI总线,并依次进行编号。

  • 设备号(Device Number)

一条PCI总线的设备号PCI设备的IDSEL信号PCI总线地址线连接关系确定。

  • 功能号(Function Number)

功能号与PCI设备的具体设计相关。在一个PCI设备中,最多有8个功能设备,而且每一个设备都有各自的PCI配置空间。而在绝大多数PCI设备中,只有一个功能设备。

  • 寄存器号(Register Number)

HOST主桥使用寄存器号访问PCI设备配置空间的某个寄存器

在MPC8548处理器的HOST主桥中,与PCI设备配置空间相关的寄存器CFG_ADDRCFG_DATAINT_ACK寄存器组成。系统软件使用CFG_ADDR和CFG_DATA寄存器访问PCI设备的配置空间,而使用INT_ACK寄存器访问挂接在PCI总线上的中断控制器的中断向量。HOST主桥这3个寄存器的地址偏移和属性表如表2-1所示:

表2-1 PCI总线配置寄存器

偏移寄存器属性复位值
0x0000_8000CFG_ADDR可读写0x00000000
0x0000_8004CFG_DATA可读写0x00000000
0x0000_8008INT_ACK只读0x00000000

在MPC8548处理器中,所有内部寄存器都使用存储器映射方式进行寻址,并存放在BASE_ADDR变量为起始地址的“1MB连续的物理地址空间”中。PowerPC处理器可以通过BASE_ADDR+Offset的方式访问表2-1中的寄存器。

MPC8548处理器使用CFG_ADDR寄存器和CFG_DATA寄存器访问PCI设备的配置空间(上边一已提到)。其中用CFG_ADDR寄存器保存PCI设备的ID号和寄存器号,CFG_ADDR寄存器的各个字段的详细说明如下所示:

  • Enable位

当该位为1时,HOST主桥使能对PCI设备配置空间的访问。当HOST处理器对CFG_DATA寄存器进行访问时,HOST主桥将对这个寄存器的访问转换为PCI配置读写总线事务并发送到PCI总线上。

  • Bus Number字段

Bus Number字段记录PCI设备所在的总线号

  • Device Number字段

Device Number字段记录PCI设备的设备号

  • Function Number字段

Function Number字段记录PCI设备的功能号

  • Register Number字段

Register Number字段记录PCI设备的配置寄存器号

MPC8548处理器访问PCI设备的配置空间时,首先需要在CFG_ADDR寄存器中设置这个PCI设备对应的总线号、设备号、功能号和寄存器号然后使能Enable位之后当MPC8548处理器对CFG_DATA寄存器进行读写访问时HOST主桥将这个存储器读写访问转换为PCI配置读写请求,并发送到PCI总线上。如果Enable位没有使能,处理器对CFG_DATA的访问不过是一个普通的I/O访问,HOST主桥并不能将其转换为PCI读写配置请求。

HOST主桥根据CFG_ADDR寄存器中的ID号生成PCI配置读写总线事务并将该事务通过ID译码方式发送到指定的PCI设备。PCI设备将接收来自配置写总线事务的数据,或者为配置读总线事务提供数据

值得注意的是,在PowerPC处理器中,在CFG_DATA寄存器中保存的数据采用大端模式进行编址,而PCI设备的配置寄存器采用小端模式编址,因此,HOST主桥需要进行模式转换。下面以源代码2‑1为例说明PowerPC处理器如何访问PCI配置空间。

源代码2-1 PowerPC处理器访问PCI配置空间

stw r0, 0(r1)
ld r3,0(r2)

首先假设寄存器r1的初始值为BASE_ADDR+0x0_8000(即CFG_ADDR寄存器的地址),寄存器r0的初始值为0x80000008,寄存器r2的初始值为BASE_ADDR+0x0_8004 (即CFG_DATA寄存器的地址),而指定PCI设备(总线号、设备号、功能号都为0)的配置寄存器的0x0B~0x08中的值为0x99887766。

这段源代码的执行步骤如下:

(1)将r0寄存器的值赋值到r1寄存器所指向的地址空间中,即初始化CFG_ADDR寄存器为0x80000008;

(2)从r2寄存器所指向的地址空间中读取数据到r3寄存器中,即从CFG_DATA寄存器中读取数据到r3寄存器。

在MPC8548处理器中,源代码2‑1执行完毕后,寄存器r3保存的值为0x66778899,而不是0x9988-6677。系统程序员在使用这个返回值时,一定要注意大小端模式的转换。

值得注意的是,源代码2‑1可以使用lwbrx指令进行优化,该指令可以在读取数据的同时,进行大小端模式的转换。

处理器读取INT_ACK寄存器时,HOST主桥将这个读操作转换为PCI总线中断响应事务。PCI总线中断响应事务的作用是通过PCI总线读取中断控制器的中断向量号,这样做的前提是中断控制器需要连接在PCI总线上。

PowerPC处理器使用的MPIC中断控制器不是挂接在PCI总线上而是挂接在SoC平台总线上。因此,PCI总线提供的中断应答事务在这个处理器系统中并没有太大用途。但是并不排除某些PowerPC处理器系统使用了挂接在PCI总线上的中断控制器,比如PCI南桥芯片,此时PowerPC处理器系统需要使用中断应答事务读取PCI南桥中的中断控制器,以获取中断向量号

更多内容请看下回。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

轻松入门:Anaconda 在 PyCharm 中的配置与应用指南

1 Anaconda Anaconda 和 Conda 是两个相关但不同的概念。 Anaconda 是一个免费且开源的发行版,包含了 Python 和 R 语言的数据科学和机器学习相关的众多包,它包括 Conda、Python、Jupyter Notebook 等多个科学计算和数据科学中常用的应用。 Anaconda 通过…

30、共空间模式CSP与白化矩阵

CSP算法和PCA降维都涉及到了白化,那白化的目的和作用到底是啥呢? 矩阵白化目的: 对于任意一个矩阵X,对其求协方差,得到的协方差矩阵cov(X)并不一定是一个单位阵。 下面介绍几个线代矩阵的几个概念: 1、…

Oracle分区表

文章目录 A. varchar2类型时间字段(20240102)分区实战1. 表要不要分区2. 将已经存在的表改造为分区表(时间字段,varchar2类型)3. 增加分区3.1 增加分区3.2 置换分区,不会复制索引,不要用这种语法建表,这是专门为置换分区用的3.3 分…

【方法】PPT设置密码后如何修改?

PowerPoint是我们日常和工作中经常用到的办公软件,有时候为了保护文件,还会设置密码,那设置密码后又想要修改密码,怎么操作呢?下面来看看PPT常用的两种密码是如何修改的。 1. “打开密码” 想要修改PPT的“打开密码”…

【深度学习】cv领域中各种loss损失介绍

文章目录 前言一、均方误差二、交叉熵损失三、二元交叉熵损失四、Smooth L1 Loss五、IOU系列的loss 前言 损失函数是度量模型的预测输出与真实标签之间的差异或误差,在深度学习算法中起着重要作用。具体作用: 1、目标优化:损失函数是优化算法…

Modbus 通信协议 二

Modbus 常用缩写 通用Modbus帧结构 -应用数据单元(ADU) Modbus数据模型 Modbus ADU 和 PDU 的长度 Modbus PDU结构 串行链路上的 Modbus 帧结构 Modbus 地址规则 ASCLL 模式 和 RTU 模式的比较 RTU 模式 RTU 模式位序列 帧格式 帧的标识与鉴别 CRC 循环冗…

2023春季李宏毅机器学习笔记 02 :机器学习基本概念

资料 课程主页:https://speech.ee.ntu.edu.tw/~hylee/ml/2023-spring.phpGithub:https://github.com/Fafa-DL/Lhy_Machine_LearningB站课程:https://space.bilibili.com/253734135/channel/collectiondetail?sid2014800 一、機器學習基本原理…

【Pytorch】学习记录分享10——TextCNN用于文本分类处理

【Pytorch】学习记录分享10——PyTorchTextCNN用于文本分类处理 1. TextCNN用于文本分类2. 代码实现 1. TextCNN用于文本分类 具体流程: 2. 代码实现 # coding: UTF-8 import torch import torch.nn as nn import torch.nn.functional as F import numpy as np…

canal本地搭建以及运行

具体的文档可参考官网文档:https://github.com/alibaba/canal/wiki canal [kənl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费 工作原理 canal 模拟 MySQL slave 的交互协议&#x…

01-线程池项目背景:C++的数据库操作

从0开始学习C与数据库的联动 1.原始方式-使用MySQL Connector/C 提供的API查询 1.1 数据库预操作 我的本地电脑上有mysql数据库,里面预先创建了一个database名叫chat,用户名root,密码password。 1.2 Visual Studio预操作 在Windows上使用…

vue3中使用echarts:tooltip的trigger为axis tooltip不显示问题

vue3中使用echarts时,tooltip的trigger设置为axis时formatter不触发 tooltip: {trigger: "axis",formatter: function (params) {console.log("params", params);},axisPointer: {type: "shadow", // 阴影指示器}, },解决办法&#…

10分钟设置免费海外远程桌面使用Amazon Lightsail服务的免费套餐轻松搭建远程桌面

本篇文章授权活动官方亚马逊云科技文章转发、改写权,包括不限于在 亚马逊云科技开发者社区, 知乎,自媒体平台,第三方开发者媒体等亚马逊云科技官方渠道。 目录 前言 使用教程 启动 Amazon Lightsail 实例 配置远程桌面 启动远程桌面 使…

圆通速递单号查询入口,筛选出指定某天签收的单号

随着电商和物流行业的飞速发展,快递单号的管理也成了一个让人头疼的问题。如何快速筛选、整理这些快递单号,成为了提高生活和工作效率的关键。而【快递批量查询高手】的出现,正好可以巧妙的解决上面的问题,下面就来具体看看这款软…

Docker一键极速安装Nacos,并配置数据库!

1 部署方式 1.1 DockerHub javaedgeJavaEdgedeMac-mini ~ % docker run --name nacos \ -e MODEstandalone \ -e JVM_XMS128m \ -e JVM_XMX128m \ -e JVM_XMN64m \ -e JVM_MS64m \ -e JVM_MMS64m \ -p 8848:8848 \ -d nacos/nacos-server:v2.2.3 a624c64a1a25ad2d15908a67316d…

【洛谷千题详解】P5706 【深基2.例8】再分肥宅水

只需要用t/n即可。 AC代码&#xff1a; #include<bits/stdc.h> using namespace std; int main() {float a;int b;cin>>a>>b;double ca/b;printf("%.3f\n",c);cout<<b*2<<endl;return 0; }

VuePress部署到GitHub Pages

一、git push自动部署 1、创建用于工作流的文件 在项目根目录下创建一个用于 GitHub Actions 的工作流 .yml 文件 name: docson:# 每当 push 到 main 分支时触发部署push:branches: [main]# 手动触发部署workflow_dispatch:jobs:docs:runs-on: ubuntu-lateststeps:- uses: a…

问题 E: 便利店

题目描述 天宝来到便利店想买些饮料。便利店有各种型号的瓶装饮料售卖&#xff0c;不同型号的饮料卖不同的价格。1瓶0.25升的卖A元&#xff0c;1瓶0.5升的饮料卖B元&#xff0c;1瓶1升的卖C元&#xff0c;1瓶2升的卖D元。便利店里每种饮料都是无限供应。 天宝要买N升的饮料&a…

逻辑斯蒂回归

逻辑斯蒂回归简介 逻辑斯蒂回归&#xff08;Logistic Regression&#xff09;是一个非常经典的算法&#xff0c;虽然被称为回归&#xff0c;但其实际上是分类模型&#xff0c;并常用于二分类。因为通过逻辑回归模型&#xff0c;我们得到的计算结果是0-1之间的连续数字&#xff…

FreeRTOS 实时操作系统第九讲 - 链表 (数据结构)

一、链表简述 链表是一种物理存储单元上非连续、非顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列节点&#xff08;链表中每一个元素称为节点&#xff09;组成&#xff0c;节点可以在运行时动态生成。每个节点包括两个部分&…

虾皮、Lazada店铺流量怎么提升?自养号优势及测评系统如何搭建?

虾皮、Lazada是东南亚地区最大的购物平台之一&#xff0c;吸引了大量的买家和卖家。在竞争激烈的虾皮市场上&#xff0c;如何提升店铺的流量成为许多卖家关注的问题。以下是关于如何提升虾皮、Lazada店铺流量的一些建议。 一、店铺流量怎么提升? 首先&#xff0c;进行优质的…