自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(122)
  • 收藏
  • 关注

原创 PCIe First DW BE和Last DW BE详解

PCIe TLP中的First DW BE和Last DW BE字段用于指定数据包中有效字节范围。First DW BE位于TLP头第3字节,标识第一个双字(4字节)的有效字节;Last DW BE位于第4字节,标识最后一个双字的有效字节。这两个字段通过4位二进制码(每比特对应1字节)表示有效性,1为有效,0为无效。当传输长度为1DW时,Last DW BE必须为0000b;长度大于1DW时,两个字段都需至少1比特为1。这些字段优化了PCIe数据传输,允许设备仅处理指定字节范围而非整个双字,对部分字节读写操

2025-07-14 16:13:08 793

原创 Linux中的一级页表和二级页表解释

Linux系统中的页表机制根据地址空间大小采用不同层级结构。一级页表直接将虚拟地址映射到物理地址,结构简单但内存占用大,适用于32位系统。二级页表通过页目录表和页表的分层设计减少内存消耗,但增加了访问开销。现代64位Linux系统通常采用三级或四级页表(如PML4、PDPT、PDT、PT),以支持更大的虚拟地址空间。不同层级页表在内存占用和查询效率之间取得平衡,满足不同架构的需求。

2025-07-09 11:12:04 222

原创 C语言中的逻辑表达式详解

摘要:C语言逻辑表达式是实现程序条件判断的核心工具,主要包括逻辑与(&&)、逻辑或(||)和逻辑非(!)三种运算符。它们常与关系运算符(<、>、==等)配合使用,具有优先级顺序和短路特性(&&在首条件为假时跳过后续判断,||在首条件为真时跳过后续判断)。逻辑表达式广泛应用于if/while结构、默认值设置和复杂条件组合,使用时需注意用括号明确优先级并合理利用短路特性提升效率。此外,三目运算符(?:)作为if-else的简洁替代,适用于简单条件赋值场景。掌握这些特性

2025-07-07 11:12:46 687

原创 CXL Link Training

CXL链路训练通过PCIe LTSSM状态机实现,包含Detect、Configuration和L0三个阶段。在Configuration阶段,通过修改TS1/TS2 Ordered Sets进行Flex Bus模式协商,要求链路速度至少达到8 GT/s。支持Retimer配置和Sync Header Bypass功能,使用68B或256B Flit模式传输数据。训练失败可能由速度不足或Retimer配置错误导致,系统会回退至Detect状态重新尝试。该过程确保了链路的动态协商和正确模式切换。

2025-07-01 10:34:27 592

原创 C语言学习之-#pragma pack 的作用

#pragma pack指令用于控制结构体的内存对齐方式。通过push和pop操作可以临时改变对齐规则,减少内存占用(如示例中结构体大小从12字节降到7字节)或满足特定协议要求。使用时需注意:1)小对齐可能降低性能;2)不同编译器支持可能不同;3)某些硬件需要特定对齐。典型应用场景包括嵌入式系统、网络协议等需要精确控制内存布局的情况。建议在紧凑布局后恢复默认对齐。该指令在内存优化与协议适配中非常实用。

2025-06-26 09:39:02 682

原创 Qemu搭建RISC-V,运行opensbi+u-boot+img

本文详细介绍了在QEMU虚拟机中运行Ubuntu RISC-V系统的完整过程。主要内容包括:1) 下载Ubuntu RISC-V镜像并解压;2) 编译安装QEMU模拟器,重点解决了Glib版本依赖问题;3) 安装RISC-V交叉编译器;4) 编译OpenSBI固件和U-Boot引导程序;5) 配置QEMU启动参数运行系统。文中提供了详细的命令操作步骤,并特别强调了常见注意事项:端口冲突检查、路径修改要求以及编译依赖包的安装。最终成功在QEMU中启动Ubuntu 24.04 RISC-V版本,默认账号为ubu

2025-06-19 10:20:28 625

原创 CXL3.0 256B Flit模式

偶数半 flit 由 2 字节 Flit Header、120 字节 Flit 数据和 6 字节 CRC 组成,CRC 用于保护偶数 128 字节 flit 的一半。对于偶数 flit 的一半,消息的字节 0 到 121 是 flit 的 122 个非 CRC 字节(flit 的字节 0 映射到消息的字节 0,flit 的字节 1 映射到消息的字节 1,依此类推),而字节 122 到 129 为零(这些字节不会在链路上发送,但发送方和接收方都必须在计算 CRC 之前对剩余字节进行零填充)。

2025-06-09 11:09:39 935

原创 CXL Early Discovery Table(CEDT)介绍

CEDT(CXL Early Discovery Table)是 CXL 3.1 协议定义的 ACPI 表,用于在操作系统启动早期(无需解析完整的 ACPI 命名空间)快速发现和初始化 CXL 相关硬件资源。其核心功能包括:定位 CXL Host Bridges:通过 CHBS(CXL Host Bridge Structure)描述每个 CXL Host Bridge 的寄存器位置。

2025-04-28 15:23:49 974

原创 CXL3.0 CDAT(Coherent Device Attributes Table)

在说明CDAT之前,先讲一下CXL中的DOE类型:CXL协议里定义了两种DOE的类型,一种是Compliance就是合规性测试的内容,还有一种就是CDAT(一致性属性表)Memory_Info_Valid是CXL设备的内存配置完成标志,位于DVSEC(Designated Vendor-Specific Extended Capability)的CXL Range X Size Low寄存器中(X为1或2)。

2025-04-11 15:59:59 938

原创 Python 进度条方法tqdm使用详解

tqdm 是 Python 中一个快速、可扩展的进度条工具,广泛用于循环和迭代任务中,帮助用户直观地跟踪代码执行进度。以下是 tqdm 的详细使用指南。bar_format="{l_bar}{bar:20}{r_bar}", # 控制条宽ncols=80, # 进度条总宽度unit="step", # 单位名称colour="green") # 颜色(需终端支持)tqdm 是提升代码交互体验的利器,支持丰富的自定义选项,适用于循环、文件操作、并行任务等场景。

2025-04-08 11:29:50 565

原创 CXL UIO Direct P2P学习

在CXL协议中,UIO(Unordered Input/Output) 是一种支持设备间直接通信(Peer-to-Peer, P2P)的机制,旨在绕过主机CPU或内存的干预,降低延迟并提升效率。● 目标场景:允许CXL设备(如加速器、内存扩展设备)直接访问其他设备的HDM(Host-Managed Device Memory)或主机内存,无需通过主机CPU中转。● 关键能力:○ HDM访问:通过UIO路径直接读写远端设备的HDM。

2025-03-28 11:00:43 1222

原创 CXL协议之FM(Fabric Management)解释

FM在CXL生态中扮演“中枢控制器”角色,通过标准化的MCTP接口和隧道机制,实现对复杂CXL拓扑(含交换机、池化设备)的统一管理。其设计兼顾了直接连接的效率与间接连接的灵活性,同时支持事件驱动的异步管理模型,为高性能计算与资源池化场景提供了关键基础设施支持。

2025-03-19 15:24:16 1014

原创 CXL Hotplug流程

CXL(Compute Express Link)3.0 在 PCIe Hot-Plug 模型的基础上扩展了对缓存一致性(Coherency)和内存语义(Memory Semantics)的支持,同时定义了针对 Hot-Add(热添加) 和 Managed Hot-Remove(受控热移除) 的流程。

2025-03-17 10:33:58 1076

原创 PCIe协议之RCB、MPS、MRRS详解

PCIe总线的存储器写请求、存储器读完成等TLP中含有数据负载,即Data Payload。Data Payload的长度和MPS(Max Payload Size)、MRRS(Max Read Request Size)和RCB(Read Completion Boundary)相关。RCB(Read Completion Boundary)是PCI Express(PCIe)总线中定义的一个参数,它指定了在完成PCIe内存读取请求时可以返回的数据包的最大对齐字节边界。

2025-03-10 11:07:25 7531 17

原创 CXL协议 Register BIR(Base Indicator Register)解释

在CXL协议中,的作用是指定使用设备功能(Function)的哪个BAR(基址寄存器)或Enhanced Allocation条目来映射CXL寄存器到内存空间。![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6f4707f4c6b749a78d55febd73ee64c1.png 图1)Register BIR是CXL协议中用于定位寄存器映射基址的关键字段,通过选择特定的BAR或EA条目,确定CXL寄存器在内存空间中的位置。

2025-02-19 09:00:00 1829

原创 CXL ALMP(ARB/MUX Link Management Packet)理解

ALMP(ARB/MUX Link Management Packet) 是CXL协议中由ARB/MUX层生成和处理的专用管理报文,用于协调链路电源状态切换(如L0s/L1)和虚拟链路状态机(vLSM)同步。ALMP是ARB/MUX层的控制平面报文,专用于以下场景:协调多协议(CXL.io、CXL.cachemem等)的链路状态切换(如L1进入/退出)。维护各协议独立的虚拟链路状态机(vLSM) 状态同步。在物理层(PHY)与链路层(Link Layer)之间仲裁电源管理请求。

2025-02-18 14:30:14 877

原创 CXL Virtual Hierarchy (VH) Enumeration理解

在 CXL 3.0 协议中,CXL Virtual Hierarchy (VH) Enumeration 是一种针对 CXL 虚拟层级(Virtual Hierarchy) 设计的设备枚举机制,它允许软件将物理连接的 CXL 设备抽象为多个逻辑层级(虚拟层级),从而实现更灵活的资源管理和拓扑扩展。与传统的 PCIe 枚举相比,CXL VH 枚举在协议特性、拓扑抽象和资源分配机制上有显著差异。本质:VH 是一个逻辑上的设备层级结构,可能与物理连接拓扑不同。

2025-02-18 13:48:16 673

原创 Python进阶之-cffi库使用详解

CFFI(C Foreign Function Interface)是一个提供与C代码交互的Python库。它允许Python代码调用C语言代码,并在Python中使用C数据结构。CFFI主要有两种接口:ABI接口和API接口。ABI接口用于直接调用C函数,而API接口用于编写C扩展。// add.c")# 加载自定义动态库lib = ffi.dlopen("./libadd.so") # Windows 用 ".\\add.dll"# 调用 C 函数。

2025-02-12 10:30:07 711

原创 C语言学习之-选择语句

在C语言中,逻辑表达式、if语句和switch语句是控制程序流程的重要组成部分。下面将详细解释这三者,并附上示例代码加以说明。逻辑表达式使用逻辑运算符来评估条件。if语句允许根据布尔条件来执行特定的代码块。switch语句适合于多个不同条件的情况,通过匹配常量来执行不同的代码块。

2025-02-08 17:05:30 343

原创 Python中pytest-cov使用详解

通过 pytest-cov,您可以方便地整合测试和代码覆盖率,获得对测试效果的直观反馈。上述示例展示了 pytest-cov 的基本用法,您可以根据需要进一步定制报告和配置。从上面的执行结果可以看到,test_fun里每个函数都执行率为100%,但是add_fun里函数的覆盖率只有58%,说明其中有部分判断没有覆盖到。一旦您安装好了 pytest-cov,可以在执行 pytest 时添加 --cov 选项来生成覆盖率报告。首先,您需要安装 pytest 和 pytest-cov。

2025-01-06 16:09:54 756

原创 PCIe6.0学习小记

从以上图4可知,PAM4的4个电平(Level0,1,2,3)进行格雷编码(Gray Coding),4个电平对应的格雷编码分别是00,01,11,10,格雷编码的方式是要求相邻符号,每次只能变化一位,且首尾符号也只是变化一位,这样的编码方式可以有效改善误码率。在将 PAM4 电压转换为 2 位对齐量后,如果适用,它会进行接收端预编码,然后解码格雷码,如果适用,则在单比特级别进行解扰。如上图所示的对比可以看出,NRZ只有0,1两个电平,形成一个眼,而PAM4会有0,1,2,3共4个电平,形成了3个眼。

2024-12-24 11:07:38 2471

原创 如何使用cx_Freeze打包编译python文件

如果你需要更灵活的打包配置和控制,特别是在处理较复杂的项目时,cx_Freeze 可能更合适。cx_Freeze 和 PyInstaller 都有活跃的用户社区,但 PyInstaller 的用户社区较大,文档和支持资源更为丰富。其他依赖文件:某些库可能还会包含额外的共享资源、C 扩展文件(.pyd 或 .so 文件),以及其他运行时所需的文件。看到如下打印即可,执行此命令后,cx_Freeze 将会创建一个名为 build 的目录,包含你打包后的应用程序。首先,确保你已经安装了 cx_Freeze。

2024-11-14 17:25:48 1485

原创 CXL 寄存器介绍

无论哪种情况,CXL Device 的 Device0 Function0 配置空间中均应实现 CXL PCIe DVSEC 能力结构,并应用于该 Device 内的所有 Device/Function。PCIe DVSEC for CXL Devices(CXL 1.1 时称为 Flex Bus Devices,协议中有时简称为 CXL PCIe DVSEC),该能力结构中具备实现 CXL 所需的最基本的寄存器,用以指示 CXL 能力、控制相关能力/特性的开关及状态指示。该能力结构寄存器布局如下图所示。

2024-11-06 15:05:36 1412

原创 Pyhon中串口通信详解

pyserial 是一个用于串口通信的 Python 库,它为在 Python 中与串口设备通信提供了简单易用的接口。这个库支持多个操作系统,包括 Windows、Linux 和 Mac OS。pyserial 主要支持以下功能:打开和关闭串口读取和写入数据配置串口参数(如波特率、数据位、停止位等)支持超时和读取方式检查可用串口基本使用方法以下是 pyserial 的一些基本使用示例。

2024-10-31 14:16:44 654

原创 PCIe中的 VSC、VSEC、DVSEC 详细介绍

PCIe 定义了三类可由供应商 Vendor 自行指定的能力结构:Vendor-Specific Capability (VSC)、Vendor-Specific Extended Capability (VSEC) 及 Designated Vendor-Specific Extended Capability (DVSEC)。其中,VSC 兼容 PCI,VSEC 及 DVSEC 不兼容 PCI。VSEC 由单个 Vendor 独立使用,DVSEC 由多个相关的 Vendor 共同使用。

2024-10-29 14:40:20 1096

原创 PCIe中ACS知识小记

虚拟机内部的访问数据显而易见是带的GPA地址。而目前几乎所有的PCIe 设备都带ACS control,所以它们可以单独assign给不同的VM,但是随之而来的就是即使两个GPU同时assign给同一个VM,由于ACS的存在,他们之间也不会有真正的物理层面的P2P访问。每一个TLP都自带一个address(寻址类TLP),同时每一个endpoint,PCIe switch都自带一段BIOS配置的地址空间范围,一旦这个TLP的address落入某个设备的地址范围,那么这个TLP就属于这个设备并消费。

2024-10-24 09:58:35 3343 2

原创 Devmem工具使用详解

devmem2 是一个非常简单而有效的工具,它允许用户直接读取和写入物理内存地址,这通常用于内存映射 I/O(MMIO)。在嵌入式系统和硬件开发中,它常常被用作调试和系统配置的手段。

2024-10-24 09:50:27 1562

原创 Python中tkinter使用详解

tkinter 是 Python 的标准 GUI(图形用户界面)库,提供了一种简单的方式来创建图形界面应用程序。下面是 tkinter 的一些重要概念、常用控件的说明,以及与 PyQt5 的区别。如果你的需求是简单的,tkinter 是一个很好的选择。如果你需要更复杂的界面或功能,或者希望使用现代设计原则,那么 PyQt5 是一个更好的选择。

2024-10-24 08:00:00 2518

原创 【CXL协议-性能注意事项(13)】

如果 MEC 列指示 ADD,则计数器单元应在每个时钟上添加所有启用事件的发生次数,这可能导致计数器数据在单个时钟内增加超过 1 的值。3. 在 MEC 列中,ADD 表示计数器单元应在每个时钟周期内将所有启用事件的发生次数相加,这可能导致计数器数据在单个时钟周期内增加超过 1 的值。CXL 事件定义为与 CXL 组件操作相关的特定组件活动的发生。用于平均测量的消息的地址应随机分布。但是,如果实现不匹配速率,则需要较快的实现限制其协议流量的速率,以匹配较慢的实现(包括突发),只要没有明确的流量控制循环。

2024-10-21 16:32:01 888

原创 Python进阶之-加密库cryptography使用详解

cryptography 库是一个强大的 Python 加密库,提供了对加密算法和协议的高层和低层访问。它是用来实现数据加密、签名、密钥管理等功能的。以下是一些常见用法的详解,帮助你理解如何使用这个库。

2024-09-02 11:23:15 3181

原创 如何对CXL Port做Link Disable和Hot Reset

在CXL设备的验证测试中,对CXL设备做Link Disable和Hot Reset对比PCie的Port做相同的操作略有不同。

2024-08-01 11:30:10 558

原创 Python进阶之Openpyxl详解

openpyxl 是一个用于读取和编辑 Excel 文件(即 .xlsx 格式文件)的 Python 库。以下是 openpyxl 的详细介绍及常见操作示例。

2024-07-24 19:58:49 5528 2

原创 X86/Aarch64下编译PMDK工具

什么是PMDK?Intel的PMDK(‌Persistent Memory Development Kit)‌是一个库,‌旨在简化持久内存的应用开发并解决一些常见挑战。‌PMDK,‌全称为Persistent Memory Development Kit,‌是由Intel开发的一套函数库和工具的集合,‌适用于所有的持久内存(‌厂商中立)‌,‌无论这些内存来自哪个制造商。

2024-07-12 16:27:06 1144

原创 Centos7安装Glibc 2.32版本(超详细)

这应该会输出刚刚安装的4.2.1版本信息。将make cp到/usr/bin 目录。

2024-07-11 11:37:35 11132 17

原创 Python中random使用详解

Python标准库中的random模块提供了生成伪随机数的工具。

2024-07-04 08:30:00 1333

原创 Python中序列化利器pickle使用详解

Python 中的 pickle 模块是一个序列化和反序列化Python对象结构的工具,也就是说它可以把Python中任意一个对象转化为一串字节流,也可以将这串字节流重新恢复为原来的对象。这个过程也分别被称为“pickling”(序列化)和“unpickling”(反序列化)。

2024-07-03 11:02:57 779

原创 Jenkins通过Squid代理服务器添加局域网节点机器

当jenkins在公网上的时候,如果要添加局域网内的服务器为节点机器构建的时候,这里就需要通过squid代理服务来实现了。当然你也可以使用其他的方式例如Apache等等,这里主要介绍通过Squid的方式。Squid是一种广泛使用的缓存代理服务器,它主要用于缓存和转发HTTP、HTTPS、FTP等常见的网络协议数据。Squid能够帮助减少带宽消耗、提高内容加载速度,并提供安全的网络访问控制。

2024-06-26 23:48:36 1288

原创 Python中位运算详解

在Python中,位运算用于直接操纵数值的二进制位。

2024-06-24 22:46:16 472

原创 Python类中变量定义详解

Python中的类可以定义两种类型的变量:类变量和实例变量。类变量(Class Variables): 类变量是在类级别上定义的变量,它们是对所有实例共享的。这意味着类变量只有一个副本,无论你创建了多少个类的实例,类变量的值都是相同的。如果你通过任意一个实例或者类本身改变了类变量的值,这个改变对所有实例都是可见的。

2024-06-19 11:39:20 3630

原创 CXL协议中 Register Locator DVSEC详解

Register Locator DVSEC(Designated Vendor-Specific Extended Capability)是一种PCI Express(PCIe)配置空间的能力,专为CXL(Compute Express Link)技术中的设备设计。这包括CXL根端口、CXL下行交换端口、CXL上行交换端口以及非RCD(即非寄存器配置数据)设备。这项能力的主旨是帮助这些设备实现额外的寄存器块,以便更好地配置和管理CXL技术提供的高级功能。

2024-06-13 22:35:13 1741

pytest中文文档详解

对于刚学习pytest框架的同学来说可以看看

2024-04-10

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除