主公讲 ARM
竹杖芒鞋轻胜马,谁怕?一蓑烟雨任平生
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【ARM Cache 及 MMU 系列文章 9 -- Cache ECC 介绍】
在 SoC(System on Chip)中,ECC(Error-Correcting Code)是一种重要的技术,用于提高存储系统的可靠性。ECC 在 SoC 的缓存中可以检测和校正存储数据中的错误,从而降低因数据错误导致系统崩溃或不正确计算的风险。Cache Tag是缓存中每个缓存行的标记信息。它帮助缓存判断一个特定的数据是否已经存储在缓存中,以及它存储在哪里。简单来说,Cache Tag 就像是每个数据的地址标签。原创 2025-01-06 21:24:58 · 487 阅读 · 0 评论 -
【ARM Cache 及 MMU 系列文章 1.4 -- 如何判断 L3 Cache 是否实现?】
在处理器设计中,一个“”指的是一个核心在任何给定时间只能执行一个线程的处理器核心。这意味着该核心的资源(如算术逻辑单元、寄存器集等)在任何特定时刻仅被一个线程所使用。这种设计相对简单,易于实现,通常能提供较高的单线程性能,因为所有的核心资源都专注于执行单个线程的任务。在ARM架构中,PE(Processor Execution unit)是执行指令的硬件单元。一个PE包括了执行指令所需的所有硬件资源,如整数和浮点计算单元、条件执行逻辑、寄存器以及状态机等。原创 2024-06-11 16:07:33 · 386 阅读 · 0 评论 -
【ARM Cache 及 MMU 系列文章 1.3 -- 如何判断 L2 Cache 是否实现?】
来判断当前系统中是否实现了 L2 Cache, 如下所示 bit19 如果为1则表示 L2 Cache 实现了,如果为0则表示L2 Cache 没有实现,表示这是一个自定义的寄存器,具体行为和存在性取决于具体的芯片设计。在 armv9 架构中,我们可以通过arm 提供的自定义寄存器。原创 2024-06-11 15:31:05 · 395 阅读 · 0 评论 -
【ARM Cache 及 MMU 系列文章 6.5 -- 如何进行 Cache miss 统计?】
L1缓存:分为指令缓存(I-cache)和数据缓存(D-cache),通常每个核心都有自己的L1缓存。L2缓存:作为一个桥梁,连接快速但容量较小的L1缓存和慢速但容量较大的L3或主内存。L2缓存可能对每个处理器核心是独立的,也可能是几个核心共享的。L3缓存:在多核处理器上,L3缓存通常是所有核心共享的,容量更大,但速度慢于L1和L2缓存。原创 2024-06-11 14:21:58 · 1209 阅读 · 0 评论 -
【ARM Cache 与 MMU/MPU 系列文章 1.2 -- Data Cache 和 Unified Cache 的区别是什么?】
数据缓存和统一缓存在现代处理器架构中扮演着重要角色,它们各自的设计和优化针对不同的应用场景和性能要求。理解它们的差异有助于深入了解处理器的工作原理和如何优化软件以充分利用硬件资源。原创 2024-06-07 14:52:05 · 563 阅读 · 0 评论 -
【ARM Cache 及 MMU 系列文章 6.4 -- ARMv8/v9 如何读取 Cache Tag 及分析其数据?】
在处理器中,缓存是一种快速存储资源,用于减少访问主内存时的延迟。缓存通过存储主内存中经常访问的数据来实现这一点。为了有效地管理这些数据,缓存被组织成行(lines)或块(blocks),每个行或块包含了一段连续的内存数据。每个缓存行都与一个缓存标签(cache tag)相关联,这个标签用于标识存储在缓存行中的数据属于内存的哪个位置。本文将介绍如何读取Cache Tag 中的数据。正好对应上物理地址的。原创 2024-06-07 13:57:20 · 496 阅读 · 0 评论 -
【ARM Cache 及 MMU 系列文章 6.2 -- ARMv8/v9 如何读取 Cache 内部数据并对其进行解析?】
请阅读【ARM Cache 及 MMU/MPU 系列文章专栏导读】及【嵌入式开发学习必备专栏】在ARMv8架构中,缓存(Cache)是用来加速数据访问的关键组件,它利用了程序执行中的局部性原理来提高性能。缓存中的每一行(Cache Line)通常包含了两个主要部分:实际的数据和一个标记(Tag)。这个标记用来标识存储在缓存行中的数据在内存中的位置。图 1-1 4-way, 4-sets set-associative cache关于cache 中 set 和 way 的定义见文章:【ARM Cache原创 2024-06-06 22:48:27 · 572 阅读 · 0 评论 -
【ARM Cache与MMU/MPU 系列文章 1.1 -- 如何获取 Cache size 的大小?】
所以通过读取 CCSIDR_EL1, Current Cache Size ID 寄存器,就可以获取 Cache Size 的大小,但是我们知道在一个大的Soc 系统中,Cache 往往是多级的,所以首先我们需要指定要读取哪一级Cache 以及读取Cache 的类型是 Data Cache 还是 Instruction Cache,可以通过配置寄存器。接下来以读取L3 Cache Size 的大小为例进行介绍,L2/L1 cache 读取类似于L3 Cache Size 的读取。, 可知 一共有 12路;原创 2024-06-06 21:55:13 · 431 阅读 · 0 评论 -
【ARM Cache 及 MMU 系列文章 6.1 -- Cache maintenance 指令及相关寄存器有哪些?】
DCZ操作是一种特殊的cache maintenance 指令,用于将缓存行中的数据设置为零。这种指令对于初始化或清理缓存内容非常有效,尤其是在需要快速清除大量数据以避免潜在的安全风险时。寄存器的信息对于操作系统和低级软件非常重要,它们需要了解和控制缓存行的具体行为。当对一个高速缓存行进行操作时,我们需要知道高速缓存操作的范围。既然谈到 cache 清零,那么我们就先看下和 cache 清零相关的寄存器和指令。例如,如果BS字段的值为4,则DCZ操作影响的最小块大小为。对高速缓存的操作可以指定不同的范围。原创 2024-06-05 22:42:35 · 516 阅读 · 0 评论 -
【ARM Cache 与 MMU/MPU 系列文章 2.1 -- 什么是 Cache PoP 及 PoDP ?】
点对深度持久性(Point of Deep Persistence, PoDP)是内存系统中的一个点,在该点达到的任何写操作即使在系统供电瞬时硬件故障的情况下也是持久的。这意味着,一旦数据写入操作达到 PoDP,即使发生断电或其他硬件故障,这些数据也不会丢失。这通常通过使用某些形式的非易失性存储来实现,如固态硬盘(SSD)或其他形式的持久性内存技术。点对持久性(Point of Persistence, PoP)的概念与PoDP紧密相关,但它在ARM体系结构中有更具体的含义,取决于实现了哪些特性:关于 Po原创 2024-06-05 21:58:18 · 573 阅读 · 0 评论 -
【ARM Cache 及 MMU 系列文章 6 -- Cache 寄存器 CTR_EL0 | CLIDR | CCSIDR | CSSELR 使用详解 1】
LoUU(Level of Unification, Uniprocessor)是ARMv9架构中的术语,指在针对处理器元素(PE)执行PoU clean 或者 invalidate 时,必须clean或invalidate的最后一级缓存。与LOC(Level of Coherence,一致性级别)类似,LoUU的值也代表了一个缓存级别。当LoUU字段值为0x0时,意味着在执行到 PoU clean 或 invalidate 时,不需要clean 或者 invalidate任何缓存级别。原创 2024-06-05 20:06:50 · 980 阅读 · 0 评论 -
【ARM Cache 与 MMU 系列文章 7.5 -- ARMv8/v9 MMU FEAT_XS(XS Attribute)与 FEAT_MTE2 介绍】
特性在那些内存访问延迟可能对性能影响较大的场景下尤其有用,例如,在进行大量的设备I/O操作或者需要高效虚拟化支持的系统中。通过合理利用这一特性,系统设计者可以在保证数据一致性和同步的前提下,优化这些操作的性能,从而提升整体的系统响应速度和处理效率。这一特性主要针对那些访问延迟较高的内存操作,比如访问外设或进行某些类型的内存映射通信时,让处理器能够更有效地管理和优化这类访问。是ARM架构中针对提高内存操作安全性的一项高级特性,它通过内存标签的机制,提供了一种有效的方法来检测和防止内存相关的安全漏洞。原创 2024-06-05 14:51:54 · 368 阅读 · 0 评论 -
【ARM Cache 与 MMU 系列文章 7.4 -- ARMv8 MMU 配置 寄存器使用介绍】
TTBR0_ELx(Translation Table Base Register 0 at Exception Level x)用于存储页表的物理基址,其中x可以是1、2或3,表示不同的异常级别。在多级页表结构中,这个寄存器指向页表的第一级。原创 2024-06-04 22:51:21 · 1935 阅读 · 0 评论 -
【ARM Cache 与 MMU 系列文章 7.7 – ARMv8/v9 MMU Table 表分配原理及其代码实现 2】
才占用 2G的地址空间,所以在 Level0 table 中只会使用一个 Entry,但是在 Level1 table 中就不一样了,因为 Level1 table 中的一个 Entry 最大只支持1G的地址空间,所以需要将。在做映射的时候所映射的地址范围最大只能是某一级 level table 中 entry 所能支持的最大范围,如果超过这个范围需要在对应 level table 中新增一个entry,这里还是以映射虚拟地址。地址分配在 Level1 table 中的 2个 Entry 中,如文章。原创 2024-06-04 21:53:49 · 473 阅读 · 0 评论 -
【ARM Cache 与 MMU 系列文章 7.6 – ARMv8/v9 MMU Table 表分配原理及其代码实现 1】
root table 通常会被分配4K大小的地址,root table(level0 table) 中的 每个entry 都会指向 level1 的 一个 table (当然 level0 table entry也可以是一个block,但是很少这样用),同样 level1 table 中的每个entry都会执行 level2 的 table …我们知道,table 表中的一个entry对应一段地址,当给出一段地址后,我们需要知道这段地址在 table 表中的 entry 索引,那么。原创 2024-06-04 11:17:29 · 715 阅读 · 0 评论 -
【ARM Cache 与 MMU 系列文章 7.3 – ARMv8/v9 MMU 块描述符与页表描述符】
Block Entry” 是指在页表中用来描述一块连续物理内存区域映射的条目。ARMv8/v9 架构支持多级页表结构,这些页表结构用来将虚拟地址空间(VA)映射到物理地址空间(PA)。页表项(PTE)可以是页表描述符,指向另一个页表的地址,或者是块描述符,直接映射到一个物理内存块。原创 2024-06-04 10:37:20 · 637 阅读 · 0 评论 -
【ARM Cache 及 MMU 系列文章 7.2 – ARMv8/v9 MMU 页表配置详细介绍 03 】
在ARMv8架构中,内存管理单元(MMU)通过两个阶段的地址转换来管理虚拟地址到物理地址的映射。第一阶段(Stage 1)的转换主要由操作系统管理,用于将虚拟地址(VA)转换成中间物理地址(IPA);第二阶段(Stage 2)的转换通常用于虚拟化环境中,由虚拟机管理程序(Hypervisor)管理,将中间物理地址转换成实际的物理地址。表描述符(Table Descriptor)在这两个阶段的转换中起到关键作用,定义了如何访问下一级转换表以及相关的属性字段。原创 2024-05-29 23:50:14 · 427 阅读 · 0 评论 -
【ARM Cache 及 MMU 系列文章 7.1 – ARMv8/v9 MMU 页表配置详细介绍 02 】
这种设计允许ARMv8架构通过描述符有效地管理和控制内存访问,提供了灵活的地址转换和细粒度的内存访问权限控制机制。转换控制寄存器(Translation Control Register)中的DS位用于启用52位物理地址的支持。在ARMv8架构的内存管理单元(MMU)中,地址转换可分为两个阶段:第一阶段(Stage 1)和第二阶段(Stage 2)。总的来说,ARMv8架构提供了灵活的内存管理和地址转换机制,通过不同的页面粒度和扩展的地址长度支持,可以满足各种不同规模和需求的系统。原创 2024-05-29 23:02:33 · 1320 阅读 · 0 评论 -
【ARM Cache 与 MMU 系列文章 6.3 – Cache Tag 与物理地址是什么关系?】
的,也就是当有一个虚拟地址送进来,MMU在开始进行地址翻译的时候,Virtual Index就可以去L1 cache中查询了,MMU查询和L1 cache的index查询是同时进行的。为了搜索一个cache,来自 CPU 的地址经hash处理生成一个索引(index),这个index指向cache中的一个或者多个位置,比如。缓存行的大小是由实现定义的(implementation defined),但由于互连(interconnect)的原因,所有核心(Cores)应该具有相同的缓存行大小。原创 2024-04-29 22:40:12 · 1436 阅读 · 0 评论 -
【ARM Cache 与 MMU 系列文章 1.7 -- ARM Cache 组相联映射】
全相连缓存:高命中率,硬件复杂度和成本高。直接映射缓存:硬件简单,成本低,但容易发生冲突。多路组相连缓存:折衷方案,平衡了命中率、硬件复杂度和成本。ARM架构的缓存设计考虑了这些不同的组织结构,以满足不同应用场景下对性能、功耗和成本的需求。在实际的ARM处理器中,多路组相连缓存因其较好的平衡性而被广泛采用。原创 2024-04-29 21:42:19 · 923 阅读 · 0 评论 -
【ARM Cache 与 MMU 系列文章 1.6 -- ARM Cache 全相连 详细介绍】
在全相连缓存中,原创 2024-04-28 22:43:31 · 486 阅读 · 0 评论 -
【ARM Cache 与 MMU 系列文章 1.5 -- ARM Cache 直接映射 详细介绍】
在直接映射缓存中,每个内存地址通过某种映射函数(通常是地址的一部分)映射到一个特定的缓存行。这种结构简单,硬件实现成本较低,但可能会导致较高的缓存冲突(两个内存地址映射到同一缓存行),从而降低缓存效率。在介绍直接映射之前,以停车场停车作为例子,先把结构的特点简单地概括出来,便于读者了解。原创 2024-04-28 22:31:27 · 581 阅读 · 0 评论 -
【嵌入式开发学习必备专栏 Cache | MMU | AMBA BUS | CoreSight | Trace32 | CoreLink | ARM GCC | CSH】
嵌入式学习必备专栏: ARM Core 的详细介绍, Cache 与 MMU/MPU专栏,Coresight 专栏,劳德巴赫 trace32 专栏, AXI/APB/AHB/ACE/CHI总线专栏、CoreLink 专栏,CSH/BASH/TCL专栏,芯片设计入门专栏、ARM GCC 编译专栏,VIM工具专栏原创 2023-12-30 12:25:07 · 3859 阅读 · 1 评论 -
【ARM Cache 及 MMU 系列文章番外篇 8.3 -- ARMv9.2 Cortex-A720 Hunter 介绍】
下图是 A720 内部组件图:Register rename,寄存器重命名Instruction decode,指令解码Instruction issue,指令分发Execution pipeline,执行流水线,主要是做一些向量运算,Activity Monitoring Unit (AMU): 它的主要功能是提供一种机制来测量处理器的运行活动。AMU 通过收集和存储关于处理器执行的指令和内存访问的详细信息,使得开发者可以更好地理解和优化软件在硬件上的性能。原创 2023-10-18 11:15:35 · 1314 阅读 · 0 评论 -
【ARM Cache 及 MMU 系列文章番外篇 8.2 -- ARMv9 Core 有哪些?】
是一个更大的微体系结构跳跃,因为它代表了Arm的 Cambridge CPU 设计团队的一项新的 CPU设计。A510 在改进 IPC的同时仍继续关注功率效率,并且也许最有趣的是,它保留了其有序的微体系结构特征。A510则采用了一个混合核心微架构)新设计,可将2个A510组合成一个群组,单一CPU可由多个群组构成,从而实现更加弹性化的结构设计。两个核心对它们共享L2缓存系统以及它们之间的FP / NEON / SVE pileline。原创 2023-08-09 19:57:28 · 3216 阅读 · 2 评论 -
【ARM Cache 及 MMU 系列文章番外篇 8.1 -- 什么是 ARM big.LITTLE 技术?】
big.LITTLE 技术的基本理念是根据瞬时性能需求将任务动态分配给合适的处理器,并关闭空闲处理器的电源开关,以达到最优的能耗比。下图是一个典型的 big.LITTLE 架构示例,其中big处理器是双核的 Cortex-A15 cluster,LITTLE 处理器是双核的 Cortex-A7 cluster,每个cluster 个各包含一个 L2 Cache,连接到 Cache Coherent Interconnect IP CCI-400,由 CCI-400进行Cache一致性管理;原创 2023-08-09 17:17:49 · 1131 阅读 · 0 评论 -
【ARM Cache 及 MMU 系列文章番外篇 8 -- 什么是 ARM DynamIQ 技术?】
同时,DynamIQ big.LITTLE还可以对每一个处理器进行独立的频率控制以及开、关、休眠状态的控制,可以实现高效的、无缝的在不同任务间切换最合适的处理器。在同一个cluster内,big处理器和LITTLE处理器的数据传输不必依赖big.LITTLE架构中的Cache Coherent Interconnect(CCI)硬件,而是通过DSU中的L3 Cache实现,从而简化了big处理器和LITTLE处理器间任务切换的数据共享复杂度,改善了传输延迟性能,提高了能效。原创 2023-08-09 12:52:26 · 1345 阅读 · 0 评论 -
【ARM Cache与 MMU 系列文章 7 – ARMv8/v9 MMU 页表配置 01 】
shareable attribute: 指当前内存页表项的数据是否可以同步到其它CPU上,多核CPU调用带有该属性页表项的数据,一旦某个CPU修改了数据,那么系统将自动更新到其它CPU的数据拷贝,实现内存数据一致性。64 位虚拟地址中,并不是所有位都用上,除了高 16 位用于区分内核空间和用户空间的虚拟地址外,虚拟地址的有效位的配置可以是:36, 39, 42, 47。Level 3 描述符不能指向其它表,仅能输出最终内存页的地址。的设置, 这个域就是用来配置这个项目的, 虚拟地址的有效位数为。原创 2023-04-18 21:07:32 · 1882 阅读 · 0 评论 -
【ARM Cache 及 MMU 系列文章番外篇 8.4 – MMU, MPU, SMMU, PMU 差异与关系】
MPU则是一种更简单的内存管理硬件,它不能转换虚拟地址,只能为内存区域设置权限,例如设定某段内存只读或可执行。通过MMU,操作系统可以创建一种虚拟内存环境,使得每个运行的程序都认为自己是在连续的内存空间中运行,同时还能防止一个程序访问另一个程序的内存空间。总的来说,MMU和MPU都在内存管理中有重要作用,但MMU提供了更复杂、更全面的功能,适合于复杂的操作系统,而MPU则提供了一种轻量级的内存保护机制,适合于资源有限的嵌入式系统。通过PMU,开发者可以详细了解软件运行的性能表现,优化代码,提高运行效率。原创 2023-07-22 11:29:42 · 1348 阅读 · 0 评论 -
【ARM Cache 与 MMU 系列文章 2 -- Cache Coherence及内存顺序模学习】
**点对一致性**是指所有能够访问内存的代理(如处理器核心、DMA引擎等)都保证看到某个内存位置的相同副本的地方,对于任何内存类型或缓存属性的访问都是如此。在很多情况下,这实际上就是主系统内存。然而,架构并不禁止在PoC之后实现缓存,只要这些缓存不影响内存系统代理之间的一致性。原创 2023-07-22 10:55:17 · 1490 阅读 · 0 评论 -
【ARM Cache 与 MMU 系列文章 4 – Cache 与 CPU 乱序执行】
针对确认响应时间的问题,硬件工程师又在缓存的基础上,引入Invalidate Queue 这个结构。当其他核心收到CPU0的Invalidate 的命令后,立即给CPU0回Acknowledge,并把Invalidate这个操作,先记录到Invalidate Queue里,当其他操作结束时,再从Invalidate Queue中取命令,进行Invalidate操作。程序里面的每行代码的执行顺序,有可能会被编译器和cpu根据某种策略,给打乱掉,目的是为了性能的提升,让指令的执行能够尽可能的并行起来。原创 2022-11-09 10:58:48 · 1860 阅读 · 0 评论 -
【ARM Cache 与 MMU/MPU 系列文章 3 – Cache 与 MPU 是什么关系?】
MPU 全称"Memory Protection Unit",中文叫“存储保护单元”,它是 Cortex-M 处理器内部的一个模块(注意:并不是所有 Cortex-M 版本都支持 MPU,并且在一些支持 MPU 的 Cortex-M 版本上,MPU 也是可选组件)。MPU 介于 Core 和 Bus matrix 中间。原创 2022-11-07 14:32:11 · 1797 阅读 · 0 评论 -
【ARM Cache 与 MMU 系列文章 5 – 内存屏障ISB/DSB/DMB】
举个例子,如果dmb前后的两次访存指令访问的都是同一个终点(比如都是ddr,或者都是spi的fifo),它在能保证两次访问放射顺序的同时,其实就能保证实际的完成顺序了。DMB不能保证它前面的指令在它后面的指令之前完成,只能保证后面的指令能观察到前面的指令执行了(即在LSU的执行顺序是能得到保证的),可能你会问这样的屏障有什么实际的作用呢?DMB指令保证DMB指令前后的内存访问指令的执行次序,内存访问包括load、store、data cache维护指令, 像add指令DMB是管不到的。原创 2022-11-06 22:42:53 · 3448 阅读 · 0 评论 -
【ARM Cache 与 MMU 系列文章 5.1 -- Cache 缓存一致性协议】
L1 cache 分为单独的 instruction cache(ICache)和 data cache(DCache)。L1 cache是CPU私有的,每个CPU都有一个L1 cache。一个cluster 内的所有CPU共享一个L2 cache,L2 cache不区分指令和数据,都可以缓存。所有cluster之间共享L3 cache。L3 cache通过总线和主存相连。当CPU试图从某地址load数据时,首先从L1 cache中查询是否命中,如果命中则把数据返回给CPU。如果L1 cache缺失,原创 2022-11-06 20:56:43 · 498 阅读 · 0 评论 -
【ARM Cache 与 MMU/MPU 系列文章 1 -- Cache基础概念学习】
Cache 通常按照层级分类,比如常见的 L1 Cache/L2 Cache/L3 Cache …:通常 L1 Cache 又分为ICache(instruction Cache) 和DCache其中 ICache 用于缓存 CPU 执行的指令;其中 DCache 用于缓存 CPU 所使用的数据。原创 2022-11-04 16:20:47 · 2971 阅读 · 0 评论