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

NVMe高速传输之摆脱XDMA设计13:PCIe初始化状态机设计

PCIe配置初始化状态机实现PCIe设备枚举和配置空间初始化过程,在完成链路训练后,使用DFS(深度优先搜索)算法枚举PCIe总线上的设备,完成PCIe总线域的地址分配和设备的初始化。PCIe配置初始化是PCIe总线正常进行数据传输的前提,图1为PCIe配置初始化状态机状态转移图。
在这里插入图片描述
图1 PCIe配置初始化状态机状态转移图

各状态说明如下:
IDLE:空闲状态,复位后的初始状态。当检测到初始化控制寄存器的PCIe初始化启动信号的上升沿时,启动初始化过程,进入GET_ID状态。
GET_ID:获取设备与供应商ID状态,该状态下通过配置TLP获取PCIe链路上的设备的配置空间的设备ID和供应商ID。如果获取的供应商ID号为0xFFFF,表示为无效的供应商ID,跳转到INC_DEV状态,否则进入GET_HEADER_TYPE状态。
GET_HEADER_TYPE:获取配置空间类型状态,该状态获取配置空间的Header Type字段,其中当该字段第8位值为1时,表示设备为多功能设备,而NoP逻辑加速引擎当前并不支持多功能设备,因此状态机跳转到ERROR状态,并设置错误代码寄存器表示检测到不支持的多功能设备。如果Header Type字段的第8位值为0,则将字段低7位的值更新到状态机中的header_type寄存器,并跳转到CFG_BAR状态。当header_type值为0时,表示该设备使用Endpoint设备的配置空间,当值为1时表示该设备使用桥的配置空间。
CFG_BAR:BAR寄存器组配置状态。type0类型的配置空间存在BAR05共六个BAR寄存器,type1类型的配置空间存在BAR01两个BAR寄存器,这些寄存器保存设备在PCIe总线域中使用的地址空间的基地址。在配置过程中,首先获取BAR寄存器类型,NoP逻辑加速引擎不支持的类型为I/O地址类型或为可预取的64位地址,当检测到这两种类型的BAR时跳转到ERROR状态,并设置错误代码寄存器表示检测到不支持的BAR类型;否则获取每个BAR寄存器的长度,然后再分配合适的基地址。当所有BAR寄存器配置完成后,进入CFG_PCIE_EXTENDS状态。

想进一步了解相关视频,请搜索B站用户:专注与守望
链接:https://space.bilibili.com/585132944/dynamic?spm_id_from=333.1365.list.card_title.click

http://www.dtcms.com/a/267389.html

相关文章:

  • 2025 Centos 安装PostgreSQL
  • Java类变量(静态变量)
  • LangChain:向量存储和检索器(入门篇三)
  • 【Qt】qml组件对象怎么传递给c++
  • appnium-巨量测试
  • LVGL移植(外部SRAM)
  • ESP32-S3开发板播放wav音频
  • 应急响应靶机-linux1-知攻善防实验室
  • 介绍electron
  • 若依学习笔记1-validated
  • Qt工具栏设计
  • Tensorboard无法显示图片(已解决)
  • 编程中的英语
  • CHAIN(GAN的一种)训练自己的数据集
  • Ubuntu基础(监控重启和查找程序)
  • 【Elasticsearch】深度分页及其替代方案
  • 基于 Python Django 和 Spark 的电力能耗数据分析系统设计与实现7000字论文实现
  • .NET9 实现排序算法(MergeSortTest 和 QuickSortTest)性能测试
  • Redis--黑马点评--基于stream消息队列的秒杀优化业务详解
  • 升级到MySQL 8.4,MySQL启动报错:io_setup() failed with EAGAIN
  • 每日算法刷题Day42 7.5:leetcode前缀和3道题,用时2h
  • Node.js worker_threads:并发 vs 并行
  • 洛谷刷题9
  • 如何在idea里快速地切换Windows CMD、git bash、powershell
  • 谷物干燥的滚筒式烘干机的设计cad【11张】三维图+设计说明书+绛重
  • LinkedList剖析
  • OneCode 图表组件核心优势解析
  • Kafka消息积压全面解决方案:从应急处理到系统优化
  • <script setup>中的setup作用以及和不带的区别对比
  • DeepSeek飞机大战小游戏HTML5(附源码)