PCI Express 体系结构导读摘录(二)

在这里插入图片描述

系列文章目录


PCI Express 体系结构导读摘录(一)
PCI Express 体系结构导读摘录(二)


文章目录

  • 系列文章目录
  • 第Ⅱ篇  PCI Express 体系结构概述
  • 第 4 章  PCIe 总线概述
    • 4. 1  PCIe 总线的基础知识
      • 4. 1. 1  端到端的数据传递
      • 4. 1. 2  PCIe 总线使用的信号
      • 4. 1. 3  PCIe 总线的层次结构
      • 4. 1. 4  PCIe 链路的扩展
      • 4. 1. 5  PCIe 设备的初始化
    • 4. 2  PCIe 体系结构的组成部件
      • 4. 2. 1  基于 PCIe 架构的处理器系统
      • 4. 2. 2  RC 的组成结构
      • 4. 2. 3  Switch
      • 4. 2. 4  VC 和端口仲裁
      • 4. 2. 5  PCIe⁃to⁃PCI / PCI⁃X 桥片
    • 4. 3  PCIe 设备的扩展配置空间
      • 4. 3. 1  Power Management Capability 结构
      • 4. 3. 2  PCI Express Capability 结构
    • 4. 4 小结
  • 第 5 章  Montevina 的 MCH 和 ICH
    • 5. 1  PCI 总线 0 的 Device 0 设备
      • 5. 1. 1  EPBAR 寄存器
      • 5. 1. 2  MCHBAR 寄存器
      • 5. 1. 3  其他寄存器
    • 5. 2  Montevina 平台的存储器空间的组成结构
      • 5. 2. 1  Legacy 地址空间
      • 5. 2. 2  DRAM 域
      • 5. 2. 3  存储器域
    • 5. 3  存储器域的 PCI 总线地址空间
      • 5. 3. 1  PCI 设备使用的地址空间
      • 5. 3. 2  PCIe 总线的配置空间
    • 5. 4  小结
  • 第 6 章  PCIe 总线的事务层
  • 6. 1  TLP 的格式
      • 6. 1. 1 通用 TLP 头的 Fmt 字段和 Type 字段
      • 6. 1. 2  TC 字段
      • 6. 1. 3  Attr 字段
      • 6. 1. 4  通用 TLP 头中的其他字段
    • 6. 2  TLP 的路由
      • 6. 2. 1  基于地址的路由
      • 6. 2. 2  基于 ID 的路由


第Ⅱ篇  PCI Express 体系结构概述

    PCIe 总线由若干层次组成, 包括事务层、 数据链路层和物理层。 PCIe 总线使用数据报文进行数据传递, 这些数据报文需要通过 PCIe 总线的这些层次。 PCIe 总线的这种数据传递方式与互联网使用 TCP / IP 协议进行数据传递有类似之处。

第 4 章  PCIe 总线概述

4. 1  PCIe 总线的基础知识

    与 PCI 总线不同, PCIe 总线使用端到端的连接方式, 在一条 PCIe 链路的两端只能各连接一个设备, 这两个设备互为数据发送端和数据接收端。 PCIe 总线除了总线链路外, 还具有多个层次, 发送端发送数据时将通过这些层次, 而接收端接收数据时也使用这些层次。 PCIe 总线使用的层次结构与网络协议栈较为类似。

4. 1. 1  端到端的数据传递

    PCIe 链路使用 “端到端的数据传送方式” , 发送端和接收端中都含有 TX (发送逻辑) 和 RX (接收逻辑) , 其结构如图 4-1 所示。

在这里插入图片描述

    由上图所示, 在 PCIe 总线的物理链路的一个数据通路 ( Lane) 中, 有两组差分信号, 共 4 根信号线。 其中发送端的 TX 部件与接收端的 RX 部件使用一组差分信号连接, 该链路 也被称为发送端的发送链路, 也是接收端的接收链路; 而发送端的 RX 部件与接收端的 TX 部件使用另一组差分信号连接, 该链路也被称为发送端的接收链路, 也是接收端的发送链路。 一个 PCIe 链路可以由多个 Lane 组成。

    PCIe 链路可以由多条 Lane 组成, 目前 PCIe 链路可以支持 1、 2、 4、 8、 12、 16 和 32 个 Lane, 即 × 1、 × 2、 × 4、 × 8、 × 12、 × 16 和 × 32 宽度的 PCIe 链路。 每一个 Lane 上使用的总线频率与 PCIe 总线使用的版本相关。

在这里插入图片描述

4. 1. 2  PCIe 总线使用的信号

  1. PERST#信号
    该信号为全局复位信号, 由处理器系统提供, 处理器系统需要为 PCIe 插槽和 PCIe 设备提供该复位信号。

  2. REFCLK + 和 REFCLK - 信号
    PCIe 设备与 PCIe 插槽都具有 REFCLK + 和 REFCLK - 信号, 其中 PCIe 插槽使用 这组信号与处理器系统同步。
    在这里插入图片描述

  3. WAKE#信号
    当 PCIe 设备进入休眠状态, 主电源已经停止供电时, PCIe 设备使用该信号向处理器系 统提交唤醒请求, 使处理器系统重新为该 PCIe 设备提供主电源 Vcc

  4. SMCLK 和 SMDAT 信号
    SMCLK 和 SMDAT 信号与 x86 处理器的 SMBus ( System Mangement Bus) 相关。 SMBus 于 1995 年由 Intel 提出, SMBus 由 SMCLK 和 SMDAT 信号组成。

  5. JTAG 信号
    JTAG ( Joint Test Action Group) 是一种国际标准测试协议, 与 IEEE 1149. 1 兼容, 主要
    用于芯片内部测试。

  6. PRSNT1#和 PRSNT2#信号
    PRSNT1#和 PRSNT2#信号与 PCIe 设备的热插拔相关。

4. 1. 3  PCIe 总线的层次结构

    PCIe 总线采用了串行连接方式, 并使用数据包 (Packet) 进行数据传输, 采用这种结构有效去除了在 PCI 总线中存在的一些边带信号, 如 INTx 和 PME# 等信号。 在 PCIe 总线中, 数据报文在接收和发送过程中, 需要通过多个层次, 包括事务层、 数据链路层和物理层。 PCIe 总线的层次结构如图 4-4 所示。

在这里插入图片描述

    PCIe 总线的层次组成结构与网络中的层次结构有类似之处, 但是 PCIe 总线的各个层次都是使用硬件逻辑实现的。 在 PCIe 体系结构中, 数据报文首先在设备的核心层 ( Device Core) 中产生, 然后再经过该设备的事务层 ( Transaction Layer) 、 数据链路层 ( Data Link Layer) 和物理层 (Physical Layer) , 最终发送出去。 而接收端的数据也需要通过物理层、 数 据链路和事务层, 并最终到达核心层。

  1. 事务层
        事务层定义了 PCIe 总线使用总线事务, 其中多数总线事务与 PCI 总线兼容。 这些总线事务可以通过 Switch 等设备传送到其他 PCIe 设备或者 RC。 RC 也可以使用这些总线事务访问 PCIe 设备。
       
        事务层接收来自 PCIe 设备核心层的数据, 并将其封装为 TLP (Transaction Layer Packet) 后, 发向数据链路层。 此外事务层还可以从数据链路层中接收数据报文, 然后转发至 PCIe 设备的核心层。
  2. 数据链路层
        数据链路层保证来自发送端事务层的报文可以可靠、 完整地发送到接收端的数据链路 层。 来自事务层的报文在通过数据链路层时, 将被添加 Sequence Number 前缀和 CRC 后缀。 数据链路层使用 ACK / NAK 协议保证报文的可靠传递。
       
        PCIe 总线的数据链路层还定义了多种 DLLP (Data Link Layer Packet) , DLLP 产生于数 据链路层, 终止于数据链路层。 值得注意的是, TLP 与 DLLP 并不相同, DLLP 并不是由 TLP 加上 Sequence Number 前缀和 CRC 后缀组成的。 数据链路层的详细描述见第 7 章。
  3. 物理层
        物理层是 PCIe 总线的最底层, 将 PCIe 设备连接在一起。 PCIe 总线的物理电气特性决定 了 PCIe 链路只能使用端到端的连接方式。 PCIe 总线的物理层为 PCIe 设备间的数据通信提供 传送介质, 为数据传送提供可靠的物理环境。
       
        物理层是 PCIe 体系结构最重要, 也是最难以实现的组成部分。 PCIe 总线的物理层定义 了 LTSSM (Link Training and Status State Machine) 状态机, PCIe 链路使用该状态机管理链路 状态, 并进行链路训练、 链路恢复和电源管理。

4. 1. 4  PCIe 链路的扩展

    PCIe 链路使用端到端的数据传送方式。 在一条 PCIe 链路中, 这两个端口是完全对等的, 分别连接发送与接收设备, 而且一个 PCIe 链路的一端只能连接一个发送设备或者接收设备。 因此 PCIe 链路必须使用 Switch 扩展 PCIe 链路后, 才能连接多个设备。 使用 Switch 进 行链路扩展的实例如图 4-5 所示。

    在 PCIe 总线中, Switch(本节出现的 Switch 指传统的 Switch, 在 MR⁃IOV 规范定义的 Switch 与此并不相同, 详见第 13. 3. 2 节。)是一个特殊的设备, 该设备由 1 个上游端口和 2 ~ n 个下游端 口组成。 PCIe 总线规定, 在一个 Switch 中可以与 RC 直接或者间接相连(所谓间接相连是指通过其他 Switch 再与 RC 相连。) 的端口为上游端口, 在 PCIe 总线中, RC 的位置一般在上方, 这也是上游端口这个称呼的由来。 在 Switch 中除了上游端口外, 其他所有端口都被称为下游端口。 下游端口一般与 EP 相连, 或者连接下一级 Switch 继续扩展 PCIe 链路。 其中与上游端口相连的 PCIe 链路被称为上游链路, 与下游端口相连的 PCIe 链路被称为下游链路。

在这里插入图片描述

    上游链路和下游链路是相对的概念。 如图 4 - 5 所示, Switch 与 EP2 连接的 PCIe 链路, 对于 EP2 而言是上游链路, 而对 Switch 而言是下游链路。

    在 Switch 中, 还有两个与端口相关的概念, 分别是 Egress (出口)端口和 Ingress(入口) 端口。 这两个端口与通过 Switch 的数据流向有关。 其中 Egress 端口指发送端口, 即数据离开 Switch 使用的端口; Ingress 端口指接收端口即数据进入 Switch 使用的端口。

    Egress 端口和 Ingress 端口与上下游端口没有对应关系。 在 Switch 中, 上下游端口可以 作为 Egress 端口, 也可以作为 Ingress 端口。

    PCIe 总线还规定了一种特殊的 Switch 连接方式, 即 Crosslink 连接模式。 支持这种模式的 Switch, 其上游端口可以与其他 Switch 的上游端口连接, 其下游端口可以与其他 Switch 的下游端口连接。

    PCIe 总线提供 CrossLink 连接模式的主要目的是为了解决不同处理器系统之间的互连, 如图 4-6 所示。 使用 CrossLink 连接模式时, 虽然从物理结构上看, 一个 Switch 的上/ 下游端 口与另一个 Switch 的上/ 下游端口直接相连, 但是这个 PCIe 链路经过训练后, 仍然是一个端 口作为上游端口, 而另一个端口作为下游端口。

在这里插入图片描述

4. 1. 5  PCIe 设备的初始化

    PCIe 总线规定了两大类复位方式, 一种是传统的复位方式 ( Conventional Reset) , 另一 种是 FLR (Function⁃Level Reset,功能级别复位) 方式。

    其中 PCIe 总线的传统复位方式由两大类组成, 一个是 Fundamental Reset, 而另一个是 Non⁃Fundamental Reset。 Fundamental Reset 方式包括 Cold 和 Warm Reset 方式, 可以将 PCIe 设备中的绝大多数内部寄存器和内部状态都恢复成初始值; 而 Non⁃Fundamental Reset 方式指 Hot Reset 方式。

  1. 传统复位方式
        传统复位方式分为 ColdWarmHot Reset。 PCIe 设备可以根据当前设备的运行状态选 择合适的复位方式, PCIe 总线提供多种复位方式的主要原因是减小 PCIe 设备的复位延时。 其中传统复位方式的延时大于 FLR 方式。 使用传统复位方式时, Cold Reset 使用的时间最长, 而 Hot Reset 使用的时间最短。
  2. FLR 方式
        系统软件填写某些寄存器时, PCIe 设备将使用 FLR 方式进行复位。 支持 FLR 方式的 PCIe 设备需要在其 BAR 空间中提供 一个寄存器, 当系统软件对该寄存器的 Function Level Reset 位写 1 时, PCIe 设备将使用 FLR 方式复位 PCIe 设备的内部逻辑。 FLR 方式对于 PCIe 设备是可选的, PCIe 总线规范并没有定 义 FLR 方式的具体实现过程, 但是定义了 FLR 方式的适用范围。

4. 2  PCIe 体系结构的组成部件

4. 2. 1  基于 PCIe 架构的处理器系统

  1. 处理器系统 A
        在有些处理器系统中, 没有直接提供 PCI 总线, 此时需要使用 PCIe 桥, 将 PCIe 链路转换为 PCI 总线之后, 才能连接 PCI 设备。 在 PCIe 体系结构中, 也存在 PCI 总线号的概念, 其编号方式与 PCI 总线兼容。 一个基于 PCIe 架构的处理器系统 A 如图 4-7 所示。
       
    在这里插入图片描述
       
        在图4-7 的结构中, 处理器系统首先使用一个虚拟的 PCI 桥分离处理器系统的存储器域与 PCI 总线域。 FSB 总线下的所有外部设备都属于 PCI 总线域。 与这个虚拟 PCI 桥直接相连 的总线为 PCI 总线 0。 这种架构与 Intel 的 x86 处理器系统较为类似。
       
        在这种结构中, RC 由两个 FSB⁃to⁃PCIe 桥和存储器控制器组成。 值得注意的是在图 4-7 中, 虚拟 PCI 桥的作用只是分离存储器域与 PCI 总线域, 但是并不会改变信号的电气特性。 RC 与处理器通过 FSB 连接, 而从电气特性上看, PCI 总线 0 与 FSB 兼容, 因此在 PCI 总线 0 上挂接的是 FSB⁃to⁃PCIe 桥, 而不是 PCI⁃to⁃PCIe 桥。
       
        在 PCI 总线 0 上有一个存储器控制器和两个 FSB⁃to⁃PCIe 桥。 这两个 FSB⁃to⁃PCIe 桥分别推出一个 × 16× 8PCIe 链路, 其中 × 16 的 PCIe 链路连接显卡控制器 (GFX) , 其编号为 PCI 总线 1; × 8 的 PCIe 链路连接一个 Switch 进行 PCIe 链路扩展。 而存储器控制器作为 PCI 总线 0 的一个 Agent 设备, 连接 DDR 插槽或者颗粒。

  2. PowerPC 处理器
        PowerPC 处理器挂接外部设备使用的拓扑结构与 x86 处理器不同。 在 PowerPC 处理器 中, 虽然也含有 PCI / PCIe 总线, 但是仍然有许多外部设备并不是连接在 PCI 总线上的。
       
        如图 4-8 所示, P4080 处理器的设计重点并不是 E500mc 内核, 而是 CoreNet。 CoreNet 内部由全互连网络组成, 其中任意两个端口间的通信并不会影响其他端口间的通信。 与 MPC8548 处理器相同, P4080 处理器也使用 OceaN(OCeaN 是一个基于交叉矩阵的总线结构, 连接在 OCeaN 中的外部设备可以直接通信, 而不相互干扰。)结构连接 PCIe 与 RapidIO 接口。
       
    在这里插入图片描述
       
        在 P4080 处理器中不存在 RC 的概念, 而仅存在 PCIe 总线控制器, 当然也可以认为在 P4080 处理器中, PCIe 总线控制器即为 RC。 P4080 处理器内部含有 3 个 PCIe 总线控制器, 如果该处理器需要连接更多的 PCIe 设备时, 需要使用 Switch 扩展 PCIe 链路。

  3. 基于 PCIe 总线的通用处理器结构
        本节并不对 x86 和 PowerPC 处理器使用的 PCIe 总线结构做进一步讨论, 而只介绍这两种结构的相同之处。 一 个通用的、 基于 PCIe 总线的处理器系统如图 4-9 所示。
       
    在这里插入图片描述
       
        图中所示的结构将 PCIe 总线端口、 存储器控制器等一系列与外部设备有关的接口都集成在一起, 并统称为 RC。 RC 具有一个或者多个 PCIe 端口, 可以连接各类 PCIe 设备。 PCIe 设备包括 EP (如网卡、 显卡等设备) 、 Switch 和 PCIe 桥(PCI Express⁃to⁃PCI 桥简称为 PCIe 桥)。

4. 2. 2  RC 的组成结构

    RC 是 PCIe 体系结构的一个重要组成部件, 也是一个较为混乱的概念。 RC 的提出与 x86 处理器系统密切相关。 事实上, 只有 x86 处理器才存在 PCIe 总线规范定义的 “标准 RC” , 而在多数处理器系统中, 并不含有在 PCIe 总线规范中涉及的与 RC 相关的全部概念。

4. 2. 3  Switch

    一个 PCIe 链路需要挂接多个 EP 时, 需要使用 Switch 进行链路扩展。 一个标准 Switch 具有一个上游端口和多个下游端口。 上游端口与 RC 或者其他 Switch 的下游端口相连, 而下 游端口可以与 EP、 PCIe⁃to⁃PCI⁃X / PCI 桥或者下游 Switch 的上游端口相连。

    PCIe 总线规范还支持一种特殊的连接方式, 即 Crosslink 连接方式。 使用这种方式时, Switch 的下游端口可以与其他 Switch 的下游端口直接连接, 上游端口也可以其他 Switch 的上 游端口直接连接。 在 PCIe 总线规范中, Crosslink 连接方式是可选的, 并不要求 PCIe 设备一 定支持这种连接方式。

    而从系统软件的角度上看, Switch 内部由多个 PCI⁃to⁃PCI 桥组成, 其中每一个上游和下游端口都对应一个虚拟 PCI 桥。 在一个 Switch 中有多少个端口, 在其内部就有多少个虚拟 PCI 桥, 就有多少个 PCI 桥配置空间。 值得注意的是, 在 Switch 内部还具有一条虚拟的 PCI 总线, 用于连接各个虚拟 PCI 桥, 系统软件在初始化 Switch 时, 需要为这条虚拟 PCI 总线编号。 Switch 的组成结构如图 4-10 所示。

在这里插入图片描述

    Switch 需要处理 PCIe 总线传输过程中的 QoS 问题 。 PCIe 总线的 QoS 要求 PCIe 总线区别对待优先权不同的数据报文, 而且无论 PCIe 总线的某一个链路多么拥塞, 优先级高的报文, 如等时报文 ( Isochronous Packet) 都可以获得额定的数据带宽。 而且 PCIe 总线需要保证优先级较高的报文优先到达。 PCIe 总线采用虚拟多通路 VC 技术(有关多通路 VC 的详细说明见第 9 章。) , 并在这些数据报文中 设定一个 TCTraffic Class) 标签, 该标签由 3 位组成, 将数据报文根据优先权分为 8 类, 这 8 类数据报文可以根据需要选择不同的 VC 进行传递。

4. 2. 4  VC 和端口仲裁

    在 Switch 中存在多个端口, 其中来自不同 Ingress 端口的报文可以发向同一个 Egress 端 口, 因此 Switch 必须要解决端口仲裁和路由选径的问题。 所谓端口仲裁指来自不同 Ingress 端口的报文到达同一个 Egress 端口的报文通过顺序, 端口仲裁机制如图 4-11 所示。

在这里插入图片描述

    在一个 Switch 中设有仲裁器, 该仲裁器规定了数据报文通过 Switch 的规则。 在 PCIe 总线中存在两种仲裁机制, 分别是基于 VC 和基于端口的仲裁机制。 端口仲裁机制主要针对 RCSwitch, 当多个 Ingress 端口需要向同一个 Egress 端口发送数据报文时需要进行端口仲裁。 具体地讲, 在 PCIe 体系结构中有三个端口, 需要进行端口仲裁。

  • Switch 的 Egress 端口。 当 EP A 和 EP B 同时访问 EP C, D 或者 DDR⁃SDRAM 时, 需要 通过 Switch 的 Egress 端口 C。 此时 Switch 需要进行端口仲裁确定是 EP A 的数据报文 还是 EP B 的数据报文优先通过 Egress 端口 C。
  • 多端口 RC 的 Egress 端口。 当 RC 的端口 1 和端口 3 同时访问 Endpoint C 时, RC 的端 口 2 需要进行端口仲裁, 决定来自 RC 哪个端口的数据可以率先通过。
  • RC 通往主存储器的端口。 当 RC 的端口 1、 端口 2 和端口 3 同时访问 DDR 控制器时, 这些数据报文将通过 RC 的 Egress 端口 4, 此时需要进行端口仲裁。

    在 PCIe 体系结构中, 链路的端口仲裁需要根据每一个 VC 独立设置, 而且可以使用不 同的算法进行端口仲裁。

    下文以图 4-11 中, Switch 的两个 Ingress 端口 A 和 B 向 Egress 端口 C 发送数据报文为 例, 简要说明端口仲裁和 VC 仲裁的使用方法, 其过程如图 4-12 所示。

    基于 VC 的仲裁是指发向同一个端口的数据报文, 根据使用的 VC 而进行仲裁的方式。 当来自端口 B 和端口 A 数据报文 (分别使用 VC0 和 VC1 通路) 在到达端口 C 之前, 需要首 先进行端口仲裁后, 才能进行 VC 仲裁。 PCIe 总线规定了 3 种 VC 仲裁方式, 分别为 Strict PriorityRR (Round Robin)WRR (Weighted Round Robin) 算法。

在这里插入图片描述

    PCIe 总线规定, 系统设计者可以使用以下三种方式进行端口仲裁。

  1. Hardware⁃fixed 仲裁策略。 如在系统设计时, 采用固化的 RR 仲裁方法。 这种方法 的硬件实现原理较为简单, 此时系统软件不能对端口仲裁器进行配置。
  2. WRR 仲裁策略, 即加权的 RR 仲裁策略, 该算法和 Time⁃Based WRR 算法的描述见 第 4. 3. 3 节。
  3. Time⁃Based WRR 仲裁策略, 基于时间片的 WRR 仲裁策略, PCIe 总线可以将一个 时间段分为若干个时间片 (Phase) , 每个端口占用其中的一个时间片, 并根据端口使用这些 时间片的多少对端口进行加权的一种方法。 使用 WRR 和 Time⁃Based WRR 仲裁策略, 可以 在某种程度上提高 PCIe 总线的 QoS。

4. 2. 5  PCIe⁃to⁃PCI / PCI⁃X 桥片

4. 3  PCIe 设备的扩展配置空间

    本书在第 2. 3. 2 节讲述了 PCI 设备使用的基本配置空间。 这个基本配置空间共由 64 个 字节组成, 其地址范围为 0x00 ~ 0x3F, 这 64 个字节是所有 PCI 设备必须支持的。 事实上, 许多 PCI 设备也仅支持这 64 个配置寄存器。

    此外 PCI / PCI⁃X 和 PCIe 设备还扩展了 0x40 ~ 0xFF 这段配置空间, 在这段空间主要存放一些与 MSI 或者 MSI⁃X 中断机制和电源管理相关的 Capability 结构。 其中所有能够提交中断请求的 PCIe 设备, 必须支持 MSI 或者 MSI⁃X Capability 结构。

    PCIe 设备还支持 0x100 ~ 0xFFF 这段扩展配置空间。 PCIe 设备使用的扩展配置空间最大为 4KB, 在 PCIe 总线的扩展配置空间中, 存放 PCIe 设备所独有的一些 Capability 结构, 而 PCI 设备不能使用这段空间。

    在 x86 处理器中, 使用 CONFIG_ADDRESS 寄存器与 CONFIG_DATA 寄存器访问 PCIe 配置空间的 0x00 ~ 0xFF, 而使用 ECAM 方式访问 0x000 ~ 0xFFF 这段空间; 而在 PowerPC 处理 器中, 可以使用 CFG_ADDR 和 CFG_DATA 寄存器访问 0x000 ~ 0xFFF, 详见第 2. 2 节。

    PCI⁃X 和 PCIe 总线规范要求其设备必须支持 Capabilities 结构。 在 PCI 总线的基本配置空间中, 包含一个 Capabilities Pointer 寄存器, 该寄存器存放 Capabilities 结构链表的头指针。 在一个 PCIe 设备中, 可能含有多个 Capability 结构, 这些寄存器组成一个链表, 其结构如图 4-14 所示。

    其中每一个 Capability 结构都有唯一的 ID 号, 每一个 Capability 寄存器都有一个指针, 这个指针指向下一个 Capability 结构, 从而组成一个单向链表结构, 这个链表的最后一个 Capability 结构的指针为 0

在这里插入图片描述

    一个 PCIe 设备可以包含多个 Capability 结构, 包括与电源管理相关、 与 PCIe 总线相关的结构、 与中断请求相关的 Capability 结构、 PCIe Capability 结构和 PCIe 扩展的 Capability 结构。

4. 3. 1  Power Management Capability 结构

    PCIe 总线使用的软件电源管理机制与 PCI PMPower Management) 兼容。 而 PCI 总线 的电源管理机制需要使用 Power Management Capability 结构, 该结构由一些和 PCI / PCI⁃X 和 PCIe 总线的电源管理相关的寄存器组成, 包括 PMCRPower Management Capabilities Register) 和 PMCSRPower Management Control and Status Register) , 其结构如图 4-15 所示。

在这里插入图片描述

    Capability ID 字段记载 Power Management Capability 结构的 ID 号, 其值为 0x01。 在 PCIe 设备中, 每一个 Capability 都有唯一的一个 ID 号, 而 Next Capability Pointer 字段存放下一个 Capability 结构的地址。

  1. PMCR 寄存器
        PMCR 寄存器由 16 位组成, 其中所有位和字段都是只读的。 该寄存器的主要目的是记录当前 PCIe 设备的物理属性, 系统软件需要从 PMCR 寄存器中获得当前 PCIe 设备的信息后, 才能对 PMCSR 寄存器进行修改。 该寄存器的结构如图 4-16 所示, 其中 PMCR 寄存器在 Power Management Capability 结构的第 3 ~ 2 字节中。
       
    在这里插入图片描述
       

    • Version 字段只读, 记录 Power Management Capability 结构的版本号。
    • PME Clock 位只读, 该位没有被 PCIe 总线使用㊀ , 硬件逻辑必须将其接为 0。 PCI 设 备可以使用 PME#信号通知设备改变电源状态, 在 PCI 总线中, 如果 PME#信号需要 使用时钟 (PCI Clock) 时, 该位为 1; 否则该位为 0。
    • RsvdP 字段为系统保留字段。
    • DSIDevice Specific Initialization) 位只读。 某些 PCIe 设备在上电时处于某种工作模 式, 之后可以通过重新配置运行在其他工作模式中, 此时该设备需要使用 DSI 位表示 该设备可以使用自定义的电源工作方式。
    • AUXAuxiliary device) Current 字段只读, 表示 PCIe 设备需要使用辅助电源的电 流强度。
    • D2D1 位只读。 D2 位为 1 表示 PCIe 设备支持 D2 状态; D1 位为 1 表示 PCIe 设备支 持 D1 状态。 PCI PM 机制规定 PCIe 设备可以支持四种状态, 分别为 D0 ~ D3 状态。 PCIe 设备处于 D0 状态时的功耗最高, 处于 D3 状态时最低。 多数支持电源管理的 PCIe 设备仅支持 D0 状态和 D3 状态, 而 D1 和 D2 状态可选, 有关这四种状态的详细 说明见第 8. 4. 1 节。
    • PME Support 字段只读, 存放 PCIe 设备支持的电源状态。 第 27 位为 1 时, 表示 PCIe 设备处于 D0 状态时, 可以发送 PME 消息; 第 28 位为 1 时, 表示 PCIe 设备处于 D1 状态时, 可以发送 PME 消息; 第 29 位为 1 时, 表示 PCIe 设备处于 D2 状态时可以发 送 PME 消息; 第 30 位为 1 时, 表示 PCIe 设备处于 D3hot状态时可以发送 PME 消息; 第 31 位为 1 时, 表示 PCIe 设备处于 D3cold状态时可以发送 PME 消息。
  2. PMCSR 寄存器
        系统软件可以通过操作 PMCSR 寄存器, 完成 PCIe 设备电源状态的迁移。 该寄存器的结 构如图 4-17 所示。
       
    在这里插入图片描述
       

4. 3. 2  PCI Express Capability 结构

    PCI Express Capability 结构存放一些和 PCIe 总线相关的信息, 包括 PCIe 链路和插槽的 信息。 有些 PCIe 设备不一定实现了 PCI Express Capability 结构中的所有寄存器, 或者并没有 提供这些配置寄存器供系统软件访问。

    PCI Express Capability 结构的部分寄存器及其相应字段与硬件的具体实现细节相关, 本 节仅介绍其中一些系统软件程序员需要了解的字段。 在该结构中, Cap ID 字段为 PCI Expresss Capability 结构使用的 ID 号, 其值为 0x10。 而 Next Capability 字段存放下一个 Capability 寄存器的地址。 PCI Express Capability 结构由 PCI Express CapabilityDevice CapabilityDevice ControlDevice StatusLink CapabilitiesLink StatusLink ControlSlot CapabilitiesSlot Status 等一系列寄存器组成。 本节仅介绍该结构中常用的寄存器。 PCI Express Capability 的组成结构如图 4-18 所示。

在这里插入图片描述

4. 4 小结

    本章简要介绍了 PCIe 总线的各个组成部件, 包括 RC、 Switch 和 EP 等, 并介绍了 PCIe 总线的层次组成结构, 和 PCIe 设备使用的 Capability 结构。 本章是读者了解 PCIe 体系结构 的基础。

第 5 章  Montevina 的 MCH 和 ICH

在这里插入图片描述

5. 1  PCI 总线 0 的 Device 0 设备

5. 1. 1  EPBAR 寄存器

5. 1. 2  MCHBAR 寄存器

5. 1. 3  其他寄存器

5. 2  Montevina 平台的存储器空间的组成结构

5. 2. 1  Legacy 地址空间

5. 2. 2  DRAM 域

5. 2. 3  存储器域

在这里插入图片描述

5. 3  存储器域的 PCI 总线地址空间

5. 3. 1  PCI 设备使用的地址空间

5. 3. 2  PCIe 总线的配置空间

5. 4  小结

    本章较为详细地介绍了 Montevina 平台与 PCIe 总线相关的内容。 理解 PCIe 总线必须建 立在理解处理器系统的基础之上, 而 Intel 提供的处理器平台无疑是学习 PCIe 总线最合适的 平台。 Intel 是 PCIe 总线的缔造者, 而且总是率先支持 PCIe 规范提出的最新功能。 希望读者 能够在充分理解处理器平台的基础上, 进一步理解 PCIe 总线的细节知识。

第 6 章  PCIe 总线的事务层

    事务层是 PCIe 总线层次结构的最高层, 该层次将接收 PCIe 设备核心层的数据请求, 并 将其转换为 PCIe 总线事务, PCIe 总线使用的这些总线事务在 TLP(Transaction Layer Packet) 头中定义。 PCIe 总线继承 了 PCI / PCI⁃X 总线的大多数总线事务, 如存储器读写、 I / O 读写、 配置读写总线事务, 并增 加了 Message 总线事务和原子操作等总线事务。

    本节重点介绍与数据传送密切相关的总线事务, 如存储器、 I / O、 配置读写总线事务。 在 PCIe 总线中, Non⁃Posted 总线事务分两部分进行, 首先是发送端向接收端提交总线读写 请求, 之后接收端再向发送端发送完成 ( Completion) 报文。 PCIe 总线使用 Split 传送方式处理所有 Non⁃Posted 总线事务, 存储器读、 I / O 读写和配置读写这些 Non⁃Posted 总线事务都 使用 Split 传送方式。 PCIe 的事务层还支持流量控制和虚通路管理等一系列特性, 而 PCI 总 线并不支持这些新的特性。

    在 PCIe 总线中, 不同的总线事务采用的路由方式不相同。 PCIe 总线继承了 PCI 总线的地址路由和 ID 路由方式, 并添加了 “隐式路由” 方式。

    PCIe 总线使用的数据报文首先在事务层中形成, 这个数据报文也称为事务层数据报文, 即 TLP。 TLP(Transaction Layer Packet) 在经过数据链路层时被加上 Sequence Number 前缀和 CRC 后缀, 然后发向物理层。

    数据链路层还可以产生 DLLPData Link Layer Packet) 。 DLLPTLP 没有直接关系。 DLLP 是产生于数据链路层, 终止于数据链路层, 并不会传递到事务层。 DLLP 不是 TLP 加 上前缀和后缀形成的。 数据链路层的报文 DLLP 通过物理层时, 需要经过 8 / 10b 编码, 然后 再进行发送。 而数据的接收过程是发送过程的逆过程。

6. 1  TLP 的格式

    当处理器或者其他 PCIe 设备访问 PCIe 设备时, 所传送的数据报文首先通过事务层被封 装为一个或者多个 TLP, 之后才能通过 PCIe 总线的各个层次发送出去。 TLP 的基本格式如 图 6-1 所示。

在这里插入图片描述

    一个完整的 TLP 由 1 个或者多个 TLP PrefixTLP 头、 Data Payload (数据有效负载) 和 TLP Digest 组成。 TLP 头是 TLP 最重要的标志, 不同的 TLP 其头的定义并不相同。 TLP 头包含了当前 TLP 的总线事务类型、 路由信息等一系列信息。 在一个 TLP 中, Data Payload 的长度可变, 最小为 0, 最大为 1024DW

    TLP Digest 是一个可选项, 一个 TLP 是否需要 TLP Digest 由 TLP 头决定。 Data Payload 也 是一个可选项, 有些 TLP 并不需要 Data Payload, 如存储器读请求、 配置和 I / O 写完成 TLP 并不需要 Data Payload。

    TLP Prefix 由 PCIe V2. 1 总线规范引入, 分为 Local TLP Prefix 和 EP⁃EP TLP Prefix 两类。 其中 Local TLP Prefix 的主要作用是在 PCIe 链路的两端传递消息, 而 EP⁃EP TLP Prefix 的主 要作用是在发送设备和接收设备之间传递消息。 设置 TLP Prefix 的主要目的是为了扩展 TLP 头, 并以此支持 PCIe V2. 1 规范的一些新的功能。

    TLP 头由 3 个或者 4 个双字 (DW) 组成。 其中第一个双字中保存通用 TLP 头, 其他字段与通用 TLP 头的 Type 字段相关。 一个通用 TLP 头由 Fmt、 Type、 TC、 Length 等字段组成, 如图 6-2 所示。

在这里插入图片描述

    如果存储器读写 TLP 支持 64 位地址模式时, TLP 头的长度为 4DW, 否则为 3DW。 而完 成报文的 TLP 头不含有地址信息, 使用的 TLP 头长度为 3DW。 其中 Byte 4 ~ Byte 15 的格式 与 TLP 相关, 下文将结合具体的 TLP 介绍这些字段。

6. 1. 1 通用 TLP 头的 Fmt 字段和 Type 字段

    FmtType 字段确认当前 TLP 使用的总线事务, TLP 头的大小是由 3 个双字还是 4 个双字组成, 当前 TLP 是否包含有效负载。 其具体含义如表 6-1 所示。

在这里插入图片描述

    其中所有读请求 TLP 都不带数据, 而写请求 TLP 带数据, 而其他 TLP 可能带数据也可能不带数据, 如完成报文可能含有数据, 也可能仅含有完成标志而并不携带数据。 在 TLPType 字段中存放 TLP 的类型, 即 PCIe 总线支持的总线事务。 该字段共由 5 位组成, 其含义如表 6-2 所示。

在这里插入图片描述

    存储器读和写请求, IO 读和写请求, 及配置读和写请求的 type 字段相同, 如存储器读和写请求的 Type 字段都为 0b0 0000。 此时 PCIe 总线规范使用 Fmt 字段区分读写请求, 当 Fmt 字段是 “带数据” 的报文, 一定是 “写报文” ; 当 Fmt 字段是 “不带数据” 的报文, 一 定是 “读报文” 。

    PCIe 总线的数据报文传送方式与 PCI 总线数据传送有类似之处。 其中存储器写 TLP 使用 Posted 方式进行传送, 而其他总线事务使用 Non⁃Posted 方式。

    PCIe 总线规定所有 Non⁃Posted 存储器请求使用 Split 总线方式进行数据传递。 当 PCIe 设备进行存储器读、 I / O 读写或者配置读写请求时, 首先向目标设备发送数据读写请求 TLP, 当目标设备收到这些读写请求 TLP 后, 将数据和完成信息通过完成报文 ( Cpl 或者 CplD) 发送给源设备。

    其中存储器读、 I / O 读和配置读需要使用 CplD 报文, 因为目标设备需要将数据传递给 源设备; 而 I / O 写和配置写需要使用 Cpl 报文, 因为目标设备不需要将任何数据传递给源设 备, 但是需要通知源设备, 写操作已经完成, 数据已经成功地传递给目标设备。

    在 PCIe 总线中, 进行存储器或者 I / O 写操作时, 数据与数据包头一起传递; 而进行存 储器或者 I / O 读操作时, 源设备首先向目标设备发送读请求 TLP, 而目标设备在准备好数据 后, 向源设备发出完成报文。

    与 PCI 总线不同, PCIe 总线规范定义了 Msg 报文, 即消息报文, 分别为 MsgMsgD。 这两种报文的区别在于一个报文可以传递数据, 一个不能传递数据。

    PCIe V2. 1 总线规范还补充了一些总线事务, 如 FetchAddSwapCASLPrfxEPrfx。 其中 LPrfx 和 EPrfx 总线事务分别与 Local TLP Prefix 和 EP⁃EP TLP Prefix 对应。 在 PCIe 总线 规范 V2. 0 中, TLP 头的大小为 1DW, 而使用 LPrfx 和 EPrfx 总线事务可以对 TLP 头进行扩 展, 本节不对这些 TLP Prefix 做进一步介绍。 PCIe 设备可以使用 FetchAdd、 Swap 和 CAS 总 线事务进行原子操作, 第 6. 3. 5 节将详细介绍该类总线事务。

6. 1. 2  TC 字段

    TC 字段表示当前 TLP 的传送类型, PCIe 总线规定了 8 种传输类型, 分别为 TC0 ~ TC7, 缺省值为 TC0, 该字段与 PCIe 的 QoSQuality of Service,服务质量) 相关。 PCIe 设备使用 TC 区分不同类型的数据传递, 而多数 EP 中只含有一个 VC, 因此这些 EP 在发送 TLP 时, 也仅仅使用 TC0, 但是有些对实 时性要求较高的 EP 中, 含有可以设置 TC 字段的寄存器。

6. 1. 3  Attr 字段

    Attr 字段由 3 位组成, 其中第 2 位表示该 TLP 是否支持 PCIe 总线的 ID⁃based Ordering; 图 6-3 Attr 字段格式第 1 位表示是否支持 Relaxed Ordering; 而第 0 位表示该 TLP 在经过 RC 到达存储器时, 是否需要进行 Cache 共享一致性处理。 Attr 字段如图 6-3 所示。

在这里插入图片描述

    一个 TLP 可以同时支持 ID⁃based OrderingRelaxed Orde⁃ ring 两种位序。 Relaxed Ordering 最早在 PCI⁃X 总线规范中提出, 用来提高 PCI⁃X 总线的数据传送效率; 而 ID⁃based Orde⁃ ring 由 PCIe V2. 1 总线规范提出。 TLP 支持的序如表 6-3 所示。

在这里插入图片描述

    当使用标准的强序模型时, 在数据的整个传送路径中, PCIe 设备在处理相同类型的 TLP 时, 如 PCIe 设备发送两个存储器写 TLP 时, 后面的存储器写 TLP 必须等待前一个存 储器写 TLP 完成后才能被处理, 即便当前报文在传送过程中被阻塞, 后一个报文也必须 等待。

    如果使用 Relaxed Ordering 模型, 后一个存储器写 TLP 可以穿越前一个存储器写 TLP, 提前执行, 从而提高了 PCIe 总线的利用率。 有时一个 PCIe 设备发出的 TLP, 其目的地址并 不相同, 可能先进入发送队列的 TLP, 在某种情况下无法发送, 但这并不影响后续 TLP 的发 送, 因为这两个 TLP 的目的地址并不相同, 发送条件也并不相同。

    Attr 字段的第 0 位是 “No Snoop Attribute” 位。 当该位为 0 时表示当前 TLP 所传送的数 据在通过 FSB 时, 需要与 Cache 保持一致, 这种一致性由 FSB 通过总线监听自动完成而不 需要软件干预; 如果为 1, 表示 FSB 并不会将 TLP 中的数据与 Cache 进行一致, 在这种情况 下, 进行数据传送时, 必须使用软件保证 Cache 的一致性。

6. 1. 4  通用 TLP 头中的其他字段

    除了 Fmt 和 Type 字段外, 通用 TLP 头还含有以下字段。

  1. TH 位、 TD 位和 EP
        TH 位为 1 表示当前 TLP 中含有 TPHTLP Processing Hint) 信息, TPH 是 PCIe V2. 1 总 线规范引入的一个重要功能。 TLP 的发送端可以使用 TPH 信息, 通知接收端即将访问数据 的特性, 以便接收端合理地预读和管理数据, TPH 的详细介绍见第 6. 3. 6 节。
       
        TD 位表示 TLP 中的 TLP Digest 是否有效, 为 1 表示有效, 为 0 表示无效。 而 EP 位表示 当前 TLP 中的数据是否有效, 为 1 表示无效, 为 0 表示有效。

  2. AT 字段
        AT 字段与 PCIe 总线的地址转换相关。 在一些 PCIe 设备中设置了 ATCAddress Translation Cache) 部件, 这个部件的主要功能是进行地址转换。 只有在支持 IOMMU 技术的处理器 系统中, PCIe 设备才能使用该字段。

  3. Length 字段
        Length 字段用来描述 TLP 的有效负载 (Data Payload) 大小 。 PCIe 总线规范规定一个 TLP 的 Data Payload 的大小在 0 ~ 4096 B 之间。 PCIe 总线设置 Length 字段的目的是提高总线的传送效率。

6. 2  TLP 的路由

    TLP 的路由是指 TLP 通过 Switch 或者 PCIe 桥片时采用哪条路径, 最终到达 EP 或者 RC 的方法。 PCIe 总线一共定义了三种路由方法, 分别是基于地址 (Address) 的路由, 基于 ID 的路由和隐式路由 ( Implicit) 方式。

    存储器和 I / O 读写请求 TLP 使用基于地址的路由方式, 这种方式使用 TLP 中的 Address 字段进行路由选径, 最终到达目的地。

    而配置读写报文、 “Vendor_Defined Messages” 报文、 CplCplD 报文使用基于 ID 的路 由方式, 这种方式使用 PCI 总线号 ( Bus Number) 进行路由选径。 在 Switch 或者多端口 RC 的虚拟 PCI⁃to⁃PCI 桥配置空间中, 包含如何使用 PCI 总线号进行路由选径的信息。

    而隐式路由方式主要用于 Message 报文的传递。 在 PCIe 总线中定义了一系列消息报文, 包括 “ INTx Interrupt Signaling” , “ Power Management Messages” 和 “ Error Signal Messages” 等报文。 在这些报文中, 除了 “Vendor_Defined Messages” 报文, 其他所有消息报文都使用隐式路由方式, 隐式路由方式是指从下游端口到上游端口进行数据传递的使用路由方式, 或者用于 RCEP 发出广播报文。

6. 2. 1  基于地址的路由

    在 PCIe 总线中, 存储器读写和 I / O 读写 TLP 使用基于地址的路由方式。 PCIe 设备使用的地址路由方式与 PCI 设备使用的地址路由方式类似。 只是 PCIe 设备使用 TLP 进行数据传 送, 而 PCI 设备使用总线周期进行数据传送。 使用地址路由方式进行数据传递的 TLP 格式如第 6. 3. 1 节的图 6-8 所示, 在这类 TLP 中包含目的设备的地址。

    当一个 TLP 进行数据传递时, 可能会经过多级 Switch, 最终到达目的地。 Switch 将根据存储器读写和 I / O 读写请求 TLP 的目的地址将报文传递到合适的 Egress 端口上。 如图 4⁃10 所示, 在一个 Switch 中包含了多个虚拟 PCI⁃to⁃PCI 桥。 在 Switch 中有几个端口, 就包含几个 虚拟 PCI⁃to⁃PCI 桥。

在这里插入图片描述

    图 6-4 中的配置寄存器描述了该虚拟 PCI⁃to⁃PCI 桥下游 PCI 子树使用的三组空间范围, 分别为 I / O、 存储器和可预取的存储器空间, 分别用 BaseLimit 两类寄存器描述, 其中 Base 寄存器表示可访问空间的基地址, Limit 寄存器表示可访问空间的大小。 TLP 使用基于 地址的路由时, 一定要通过查询这组寄存器之后, 再决定传送路径。 这组寄存器的使用方法与 PCI 总线中的 PCI 桥兼容。

在这里插入图片描述

6. 2. 2  基于 ID 的路由

    在 PCIe 总线中, 基于 ID 的路由方式主要用于配置读写请求 TLP、 Cpl 和 CplD 报文, 此 外 Vendor_Defined 消息报文也可以使用这种基于 ID 的路由方式。 而在 PCI 总线中, 只有配置读写周期才使用 ID 进行数据传递。

    基于 ID 的路由方式与基于地址的路由方式有较大的不同, 基于 ID 路由方式的 TLP 头格式也与基于地址路由方式的头格式不同, 其报文格式如图 6-6 所示。

在这里插入图片描述

    使用 ID 路由方式的 TLP 头, 其 Byte8 ~ Byte11 字段与基于地址路由的 TLP 不同。 基于 ID 路由的 TLP, 使用 Bus NumberDevice NumberFunction Number 进行路由寻址。 从软件 的角度来看, PCIe 总线与 PCI 总线兼容, 只是在 PCIe 总线中, 每一个 PCIe 设备使用唯一的 PCI 设备号, 但是每一个设备仍然可以有多个子设备 (Function) 。

    PCIe 总线规定, 在一个 PCI 总线域空间中, 最多只能有 256 条 PCI 总线, 因此在一个 TLP 中, Bus Number 由 8 位组成; 而在每一条总线中最多包含 32 个设备, 因此 TLP 中的 Device Number 由 5 位组成; 而每一个设备中最多包含 8 个功能, 因此一个 TLP 的 Function Number 由 3 位组成。

    配置读写请求 TLP 是使用 “基于 ID 路由” 的一组重要报文, 其主要作用是读写 PCIe 总线的 EPSwitchPCIe 桥片的配置寄存器, 以完成 PCIe 总线的配置。 在处理器系统上电之后需要进行 PCI 总线系统的枚举, 为 PCI 总线分配总线号, 并设置 SwitchPCIe 桥片或者 EP 的配置寄存器, 如 Limit 寄存器组、 Base 寄存器组、 BAR 寄存器、 Subordinate Bus NumberSecondary Bus NumberPrimary Bus Number 等一系列配置寄存器。

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   
 

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

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

相关文章

【SLAM】GNSS的定义,信号原理以及RTK在多传感器融合中的使用方法

【SLAM】GNSS的定义,信号原理以及在多传感器融合中的使用方法 1. GNSS的定义2. GNSS信号原理3. RTK - Real Time Kinematic4。 如何使用RTK做融合和优化 1. GNSS的定义 GPS(Global Positioning System)和GNSS(Global Navigation …

为啥给的贷款额度差距那么大?机构到底是怎么决定给你多少额度?

今日,我们深入探讨一个颇为引人入胜的话题——为何在不同银行或信贷机构申请贷款时,所能获得的额度竟能如此大相径庭?同时,揭秘这些金融机构背后是如何精密计算并决定每位申请者的“额度”的。以下内容干货满满,建议收…

【时时三省】(C语言基础)指针进阶 例题2

山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 第一个arr 数组名相当于首元素地址 因为他没有放到strlen内部 也没有取地址 strlen是找\0 找不到\0就不会停下来 所以它打印的就是随机值 第二个arr0 首元素地址加零还…

Linux-(系统启动、用户管理)

目录 前言 关机&重启命令 基本介绍 注意细节 用户登录和注销 注意: 用户管理 基本介绍 添加用户 指定/修改密码 删除用户 查询用户信息 切换用户 查看当前用户登录用户 用户组 新增组 删除组 查看所有组 修改用户所属组 创建用户时指定用户…

磁盘加密工具 | VeraCrypt v1.26.15 绿色版

VeraCrypt 是一个开源项目,旨在提供强大的加密解决方案,以创建和管理加密的磁盘分区和加密容器。它继承了著名的加密软件 TrueCrypt 的特性,并在此基础上进行了扩展和改进。 主要特性 1. 高级加密算法 VeraCrypt 支持多种加密算法&#xf…

面试软件测试需要掌握的技能有哪些?

一、测试用例的编写 1、在测试中最重要的文档,他是测试工作的核心,是一组在测试时输入输出的标准,是软件需求的具体对照。编写测试用例,是测试人员的基本功,真正能写好的人并不多。 测试用例包含的内容: …

Mindspore 初学教程 - 3. Tensor 张量

张量(Tensor)是一个可用来表示在一些矢量、标量和其他张量之间的线性关系的多线性函数,这些线性关系的基本例子有内积、外积、线性映射以及笛卡儿积。其坐标在  n n n 维空间内,有  n r n^{r} nr 个分量的一种量,其…

学习日志8.30--防火墙NAT

目录 一、实验环境配置 二、配置防火墙静态NAT一对一 三、配置防火墙静态NAT多对多 四、配置防火墙NAT端口转换NAPT 五、防火墙smart-nat、easyip 六、防火墙三元组NAT 在学习过基于路由器的NAT网络地址转换,现在学习基于防火墙NAT的网络地址转换,…

纵向合并单元格——table

将list数据处理成tableDate格式&#xff0c;id重复的数据&#xff0c;只有第一项有num字段&#xff08;num是重复的个数&#xff09;渲染表格&#xff0c;纵向合并第1、2、6列&#xff0c;id相同的合并 <template><div><el-table:data"tableData":sp…

实体店同城商家引流的获客方法

实体店同城商家引流的获客方法 学会这3招&#xff0c;门店也能轻松获客&#xff01; #狂潮老师#电商#代运营#陪跑#门店获客#同城引流#爆款#引流#福利#达人#标签#短视频#直播#私域 推荐阅读&#xff1a; 百收网SEO引流脚本软件不断更新&#xff08;推广全集教程&#xff09;h…

4.sklearn-K近邻算法、模型选择与调优

文章目录 环境配置&#xff08;必看&#xff09;头文件引用1.sklearn转换器和估计器1.1 转换器 - 特征工程的父类1.2 估计器(sklearn机器学习算法的实现) 2.K-近邻算法2.1 简介&#xff1a;2.2 K-近邻算法API2.3 K-近邻算法代码2.4 运行结果2.5 K-近邻算法优缺点 3.模型选择与调…

数组与贪心算法——605、121、122、561、455、575(5简1中)

605. 种花问题&#xff08;简单&#xff09; 假设有一个很长的花坛&#xff0c;一部分地块种植了花&#xff0c;另一部分却没有。可是&#xff0c;花不能种植在相邻的地块上&#xff0c;它们会争夺水源&#xff0c;两者都会死去。 给你一个整数数组 flowerbed 表示花坛&#xf…

golang zap日志模块封装sentry

我们自己写个log日志包&#xff0c;把zap和sentry封装到一起。 下面直接贴上主要部分代码&#xff08;两个模块初始化部分的代码请自行查阅官方文档&#xff09;&#xff1a; logger.go package logimport ("github.com/getsentry/sentry-go""go.uber.org/zap…

Mapmost让你实现地图标注自由

最近在勤勤恳恳&#xff08;moyuhaushui&#xff09;搬砖之余&#xff0c;偶然间看到一个在线古籍图书馆&#xff0c;虽然对文言文阅读的心理障碍不亚于英文阅读理解&#xff0c;但网站中有很多历史图集还是引起了兴趣。比如这幅《水经注图》&#xff0c;顺藤摸瓜的瞧&#xff…

Java中对象拷贝的深度解析:从零拷贝到深拷贝的演进

前言 在Java编程世界中&#xff0c;对象的拷贝是一个基础而重要的操作。它涉及到内存管理、数据一致性以及程序的健壮性等多个方面。随着软件架构的复杂化和数据的多样化&#xff0c;对象拷贝的策略也从最初的简单赋值&#xff08;零拷贝&#xff09;发展到深拷贝&#xff0c;…

DataWorks数据质量监控方案

背景 日常的调度监控&#xff0c;可以查看实例任务的运行情况&#xff0c;对运行失败的实例进行告警&#xff0c;但是却无法对运行成功的实例进行数据质量的判断。而有些情况下&#xff0c;即使实例任务运行成功了&#xff0c;数据也仍然存在问题&#xff0c;这时候就需要对数…

揭秘Taboola原生广告:欧美流量变现联盟营销金牌策略

揭秘Taboola原生广告&#xff1a;欧美流量变现的金牌策略 在数字营销日益精进的今天&#xff0c;如何高效地将网站流量转化为实际收益成为了众多欧美网站主关注的焦点。Taboola&#xff0c;作为原生广告领域的佼佼者&#xff0c;凭借其独特的广告展示方式与强大的数据驱动能力…

上海晋名室外危化品暂存柜助力新能源行业发展

近日又有一个SAVEST室外危化品暂存柜项目成功验收交付使用。 用户在日常经营活动中涉及到气瓶和硅粉的室外安全暂存问题&#xff0c;4月下旬在网上看到上海晋名室外暂存柜系列很感兴趣&#xff0c;联系到了销售部钟经理&#xff0c;双方对晋名的室外暂存柜进行了高效的沟通&am…

无人机+应用综合实训室解决方案

随着无人机技术的飞速发展&#xff0c;其在航拍、农业、环境监测、物流运输等多个领域展现出巨大的应用潜力。为了满足职业院校及企业对无人机应用技术型人才的培养需求&#xff0c;唯众紧跟市场趋势&#xff0c;推出了全面且详尽的《无人机应用综合实训室解决方案》。本方案旨…

MACOS安装配置前端开发环境

官网下载安装Mac版本的谷歌浏览器以及VS code代码编辑器&#xff0c;还有在App Store中直接安装Xcode&#xff08;里面自带git&#xff09;&#xff1b; node.js版本管理器nvm的下载安装如下&#xff1a; 参考B站&#xff1a;https://www.bilibili.com/video/BV1M54y1N7fx/?sp…