【ESP32S3】Cache 框图和操作

ESP32-S3 采用双核共享 ICache (指令缓存) 和 DCache (数据缓存) 结构,如下图所示。以便当 CPU 的指令总线和数据总线同时发起请求时,也可以迅速响应:

Cache 的存储空间与内部存储空间可以复用。具体为 Internal SRAM0 和 Internal SRAM2 分别可被用于 ICacheDCache。其中:

Internal SRAM0 的容量为 32 KB,可读可写。CPU 只可以通过指令总线访问这部分存储器。通过配置,这部分存储器中的 16 KB、或全部 32 KB 可以被 ICache 占用,用来缓存外部存储器的指令或只读数据。被 ICache 占用的部分不可以被 CPU 访问,未被 ICache 占用的部分仍然可以被 CPU
访问。

Internal SRAM2 的容量为 64 KB,可读可写。 CPU 只可以通过数据总线访问这部分存储器。通过配置,这部分存储器中的 32 KB、或全部 64 KB 可以被 DCache 占用,用来缓存外部存储器的数据。被 DCache 占用的部分不可以被 CPU 访问,未被 DCache 占用的部分仍然可以被 CPU 访问。

当两个核的指令总线同时访问 ICache 时,由仲裁器决定谁先获得访问 ICache 的权限;当两个核的数据总线同
时访问 DCache 时,由仲裁器决定谁先获得访问 DCache 的权限。当 Cache 缺失时,Cache 控制器会向外部存储器发起请求,当 ICacheDCache 同时发起外部存储器请求时,由仲裁器决定谁先获得外部存储器的使用权。ICache 的缓存大小可配置为 16 KB 或 32 KB,块大小可以配置为 16 B 或 32 B,当 ICache 缓存大小配置为 32 KB 时禁用 16 B 块大小模式。DCache 的缓存大小可配置为 32 KB 或 64 KB,块大小可以配置为 16 B、32 B 或 64 B,当 DCache 缓存大小配置为 64 KB 时禁用 16 B 块大小模式。

ESP32-S3 Cache 共有如下几种操作:

回写(Write-Back)

Write-Back 操作用于将 Cache 中的 “脏块” 的 “脏” 标记(Dirty bit)抹除,并将数据同步到外部存储器。Write-Back 操作结束后,外部存储器和 Cache 中存放的都是新数据。如果 CPU 接着去访问该数据,那么可以直接从 Cache 中访问到。只有 DCache 具有此功能。

所谓 “脏块” 是指,如果 Cache 中的数据比外部存储器中的数据要新,则 Cache 中的新数据被称为 “脏块”,Cache 通过 “脏” 标记来追踪这些 “脏块” 数据。如果抹除掉某个新数据的 “脏” 标记,Cache 将认为这个数据不是新的。

清除(Clean)

Clean 操作用于将 Cache 中的 “脏块” 的 “脏” 标记(Dirty bit)抹除,但不将数据同步到外部存储器。Clean 操作结束后,外部存储器中仍是旧数据,Cache 中存放的是新数据,但 Cache 以为不是新的。如果 CPU 接着去访问该数据,那么直接可以从 Cache 中访问到。只有 DCache 具有此功能。

失效(Invalidate)

Invalidate 操作用于删除 Cache 中的有效数据,即使该数据是 “脏块”,也不会将脏块同步到外部存储器。对于非脏块数据, Invalidate 操作结束后,该数据仅存在于外部存储器中。如果 CPU 接着去访问该数据,那么需要访问外部存储器。对于脏块数据, invalidate 结束后,外部存储器中存在的是旧数据,新数据将彻底丢失。Invalidate 分为自动失效 (Auto-Invalidate) 和手动失效 (Manual-Invalidate)。Manual-Invalidate 仅对 Cache 中落入指定区域的地址对应的数据做失效处理,而 Auto-Invalidate 会对 Cache 中的所有数据做失效处理。ICacheDCache 均具有此功能。

预取 (Preload)

Preload 功能用于将指令和数据提前加载到 Cache 中。预取操作的最小单位为 1 个块。预取分为手动预取 (Manual-Preload) 和自动预取 (Auto-Preload),Manual-Preload 是指硬件按软件指定的虚地址预取一段连续的数据;Auto-Preload 是指硬件根据当前命中/缺失(取决于配置)的地址,自动地预取一段连续的数据。ICacheDCache 均具有此功能。

锁定/解锁 (Lock/Unlock)

Lock 操作用于保护 Cache 中的数据不被替换掉。锁定分为预锁定和手动锁定。预锁定开启时,Cache 在填充缺失数据到 Cache 时,如果该数据落在指定区域,则将该数据锁定,未落入指定区域的数据不会被锁定。手动锁定开启时,Cache 检查 Cache 中的数据,并将落在指定区域的数据锁定,未落入指定区域的数据不会被锁定。当缺失发生时,Cache 会优先替换掉未被锁定的那一路的数据,因此锁定区域的数据会一直保存在 Cache 中。但当所有路都被锁定时, Cache 将进行正常替换,就像所有路都没有被锁定一样。解锁是锁定的逆操作,但解锁只有手动解锁。ICacheDCache 均具有此功能。

需要注意的是,Cache 的 Clean、Write-Back 和 Manual-Invalidate 操作均只对未被锁定的数据起作用。如果想对被锁定的数据执行这些操作,请先解锁这些数据。

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

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

相关文章

wireshark从HEX转储导入使用方法

官方资料: https://www.wireshark.org/docs/wsug_html_chunked/ChIOImportSection.html 方法1: 文本文件,纯内容导入: ff ff ff ff ff ff 00 00 00 00 5f 0f 08 06 00 01 08 00 06 04 00 01 00 00 00 00 5f 0f 64 01 60 10 00 00 00 00 00 00 64 01 01…

【Android】四大组件之Activity

目录 一、什么是Activity 二、如何创建和配置Activity 三、Activity 跳转与数据传递 四、数据保存与恢复 五、Activity 启动模式 六、自定义返回行为 七、复杂界面布局 你可以把Activity想象成手机屏幕上的一个“页面”。比如,当你打开一个App时,…

uml类关系(实现、继承,聚合、组合,依赖、关联)

drawio和EA是架构设计时经常使用的画图工具。 drawio学习门槛低,使用灵活,但是功能仅仅限于画图。 EA学习门槛高,但是功能更加的丰富: ①在画图方面,EA严格满足UML标准,EA中的图和类是关联的&#xff0c…

C++如何设计线程池(thread pool)来提高线程的复用率,减少线程创建和销毁的开销

线程池的基本概念与多线程编程中的角色 线程池,顾名思义,是一种管理和复用线程的资源池。它的核心思想在于预先创建一定数量的线程,并将这些线程保持在空闲状态,等待任务的分配。一旦有任务需要执行,线程池会从池中取出…

React.memo 和 useMemo

现象 React 中,通常父组件的某个state发生改变,会引起父组件的重新渲染(和其他state的重新计算),从而会导致子组件的重新渲染(和其他非相关属性的重新计算) 问题一:如何避免因为某个…

防火墙技术深度解析:从包过滤到云原生防火墙的部署与实战

防火墙技术深度解析:从包过滤到云原生防火墙的部署与实战 在网络安全防御体系中,防火墙是第一道物理屏障,承担着“网络流量守门人”的核心角色。从早期基于IP地址的包过滤设备到如今集成AI威胁检测的云原生防火墙,其技术演进始终…

strcmp()在C语言中怎么用(附带实例)

C语言标准库中的 strcmp() 函数用于比较两个字符串。 strcmp() 函数原型如下: int strcmp (const char * str1, const char * str2); const char *str1 表示待比较字符串 1 的首地址;const char *str2 表示待比较字符串 2 的首地址。 如果两个字符串相…

搜广推校招面经八十二

一、L1 和 L2 正则化的区别?对数据分布有什么要求,它们都能防止过拟合吗? 1.1. L1 与 L2 正则化的区别 特性L1 正则化(Lasso)L2 正则化(Ridge)正则项λ * ∑|wᵢ| λ ∗ ∑ ( w i 2 ) λ * ∑…

数据结构和算法(九)--红黑树

一、红黑树 1、红黑树 前面介绍了2-3树,可以看到2-3树能保证在插入元素之后,树依然保持平衡状态,它的最坏情况下所有子结点都是2-结点,树的高度为IgN,相比于我们普通的二叉查找树,最坏情况下树的高度为N,确…

工业摄像头通过USB接口实现图像

工业摄像头系列概览:类型与应用 工业摄像头系列涵盖了多种类型,以满足不同行业和应用的需求。以下是对工业摄像头系列的一些介绍: 一、主要类型与特点 USB工业摄像头 :这类摄像头通常通过USB接口与计算机连接,适用于…

使用Django框架表单

使用Django框架表单 文章目录 使用Django框架表单[toc]1.使用Form类构建表单2.表单字段与Widget控件 1.使用Form类构建表单 【创建项目和应用】 PS C:\Users\ls> cd E:\Python\ PS E:\Python> django-admin.exe startproject FormSite PS E:\Python> cd .\FormSite\…

docker配置mysql遇到的问题:网络连接超时、启动mysql失败、navicat无法远程连接mysql

目录 1.网络超时 方式1. 网络连接问题 方式2. Docker镜像源问题 方式3.使用国内镜像源 2.启动mysql镜像失败 3.navicat无法远程连接mysql 1.网络超时 安装MySQL时出现超时问题,可能由多种原因导致: 方式1. 网络连接问题 原因:网络不稳定…

React 多语言国际化:实现多语言支持

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 🍚 蓝桥云课签约作者、…

Claude系列模型-20250426

文章目录 Claude 3.7 Sonnet - "Our most intelligent model yet"Claude 3.5 Haiku - "Fastest model for daily tasks"Claude 3.5 Sonnet (Oct 2024)Claude 3 Opus总结Claude 3.7 Sonnet - “Our most intelligent model yet” 特点: 这是目前Claude系列…

Linux查看可用端口号码命令

在Linux系统中,有多种命令可用于查看可用端口号码,下面为你详细介绍: 1. 使用netstat命令 netstat是一个功能强大的网络工具,可用于显示网络连接、路由表和网络接口等信息。你可以结合不同的选项来查看端口使用情况。 查看所有…

leetcode201.数字范围按位与

找到公共前缀部分&#xff0c;然后后面的部分全0 class Solution {public int rangeBitwiseAnd(int left, int right) {int offset 0;while (left ! right) {offset;left left >> 1;right right >> 1;}return right << offset;} }

端到端自动驾驶的数据规模化定律

25年4月来自Nvidia、多伦多大学、NYU和斯坦福大学的论文“Data Scaling Laws for End-to-End Autonomous Driving”。 自动驾驶汽车 (AV) 栈传统上依赖于分解方法&#xff0c;使用单独的模块处理感知、预测和规划。然而&#xff0c;这种设计在模块间通信期间会引入信息丢失&am…

021-C语言文件操作

C语言文件操作 文章目录 C语言文件操作1. 文件的概念2. 二进制文件和文本文件3. 文件的打开和关闭3.1 流和标准流3.1.1 流3.1.2 标准流 3.2 文件指针3.3 文件的打开和关闭 4. 文件的顺序读写4.1 顺序读写函数4.2 对比两组函数4.2.1 scanf/fscanf/sscanf4.2.2 printf/fprintf/sp…

如何使用@KafkaListener实现从nacos中动态获取监听的topic

1、简介 对于经常需要变更kafka主题的场景&#xff0c;为了实现动态监听topic的功能&#xff0c;可以使用以下方式。 2、使用步骤 2.1、添加依赖 <dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactI…

《TCP/IP详解 卷1:协议》之第七、八章:Ping Traceroute

目录 一、ICMP回显请求和回显应答 1、ICMP回显请求 2、ICMP回显应答 二、ARP高速缓存 三、IP记录路由选项&#xff08;Record Route&#xff0c;RR&#xff09; 1、记录路由选项的工作过程 2、RR 选项的 IP 头部格式 2.1、RR 请求 2.2、RR响应 四、ping 的去返路径 五…