FPGA - ZYNQ Cache一致性问题

什么是Cache?

Cache是一种用来提高计算机运行速度的一种技术。它是一种小而快的存储设备,位于CPU内存之间,用于平衡高速设备低速设备之间的速度差异。Cache可以存储常用的数据或指令,以便CPU更快地获取,从而减少对主存的访问次数,加快程序的执行速度


为什么需要Cache(高速缓冲存储器)?


我们都知道CPU处理数据的速度非常,虽然内存的读写速度也不慢,但是相对于CPU它的速度就显得太了,所以如果单纯地让CPU内存进行读写,所消耗的时间绝大部分是在内存数据处理上,而这时候CPU就在空等浪费了资源,因此就需要在CPU与内存之间连接一个Cache来作为缓冲


Cache的基本特点


由于Cache是为了缓解内存处理数据太慢而出现的,因此Cache应该具备的一个基本特点就是读写数据的速度快,能够比较好地匹配CPU的速度,尽可能地让CPU忙起来,但是就是因为它处理速度快,所以就造成了它的容量比较小,如果能够既可以容量大又可以速度快的话直接把内存的速度提高到匹配到CPU的速度就好了,但是由于材料的价格,技术复杂度等等原因,Cache还是很必要的。


ZYNQ中,如下图:

Cache就是缓存,作用就是提高CPU运行的效率

看下图:

假设CPU的时钟是2000Mhz,Cache的时钟100Mhz,DDR的时钟400Mhz,那么CPUCache里面写数据是于CPU往DDR写数据的,这样的话CPU就忙起来,提高CPU运行的效率

Cache一致性

        PS往 DDR 里面数据,路径是PS cpu-->Cache -->DDR,正常情况下,数据是会被写到 DDR 里面的,不过有时候出现Bug,PS 产生的数据写入 Cache之后,数据并没有写入 DDR
        的过程也是一样的,PS 读取 ddr 数据路径相反,有时候也会出现 Bug,也就是PS读取DDR的数据出现错误

解决方法

  1. 调试过程中,直接禁用cache,使用Xil_DCacheDisable()函数CPU直接访问DDR内存,读写都是直接的,这会降低CPU性能,但简化了数据传输操作。

        2.使用Xil_CacheFlushXil_Cache Invalidate操作

        PS写完数据之后,添加Xil_CacheFlush函数,这个函数的作用是将数据从 Cache 刷新到 DDR 里面去,即将Cache内容推到DDR中;

        PS 从 DDR里面读取数据之前,添加 Xil_Cache Invalidate 函数,这个函数的作用是将 DDR里面的数据刷新到Cache里面去,即把数据DDR中拉到Cache中。

 

总结

        在xil_cache.h头文件中,有关于Cache的处理函数,如下图:

        关于Cache的详细底层处理过程,可以查看这些函数。

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

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

相关文章

基于单片机的智能病床呼叫系统设计与仿真

摘 要 本文设计的病床呼叫系统采用单片机作为控制器。该系统具有远程控制、病人的身体情况检测、报警呼叫、显示和执行器运动的功能。远程控制由红外线传感器和矩阵键盘组成,检测电路由温湿度传感器DH22、心率传感器Pulse Sensor、压力传感器MPX4115组成&#x…

操作系统——进程

进程定义 是计算机中已经运行的程序是系统进行资源分配和调度的一个独立单位。 进程的特性 独立性:进程在内存中可以独立寻址,每个进程都有一个独立的堆栈空间。动态性:进程在执行过程中可以申请资源、使用资源、释放资源。并发性&#xf…

OceanBase开发者大会2023届视频及PPT汇总

数据库技术趋势 我眼中的数据库技术 阳振坤OceanBase 首席科学家 观看视频 下载 PDF 未来,中国需要什么样的数据库? 周傲英华东师范大学副校长,CCF 会士 观看视频 下载 PDF 云原生技术趋势解读 Keith ChanCNCF 云原生计算基金会中国区总监 …

批量规范化(batchnormalization)

ˆB 是小批量B的样本均值,σˆ B 是小批量B的样本标准差。应用标准化后,生成的小批量的平均 值为0和单位方差为1。由于单位方差(与其他一些魔法数)是一个主观的选择,因此我们通常包含 拉伸参数(scale&#…

Linux关闭swap分区操作[适用于CDH报警等]

1.查看swap分区挂载路径(没卵用) swapon -s 2.设置配置文件的swap配置 echo “vm.swappiness 0” > /etc/sysctl.conf 3.设置内存中的swap状态。有时候配置文件为0,但集群或服务仍然使用了swap分区,可能原因就是内存没有同步配置 echo “0” > …

【配电网故障定位】基于二进制蝙蝠算法的配电网故障定位 33节点配电系统故障定位【Matlab代码#80】

文章目录 【获取资源请见文章第6节:资源获取】1. 配电网故障定位2. 二进制蝙蝠算法3. 算例展示4. 部分代码展示5. 仿真结果展示6. 资源获取 【获取资源请见文章第6节:资源获取】 1. 配电网故障定位 配电系统故障定位,即在配电网络发生故障的…

微信有关白名单IP

一、商家支付 二、公众号

深入理解与实践“git add”命令的作用

文章目录 **git add命令的作用****git add命令的基本作用****高级用法与注意事项** git add命令的作用 引言: 在Git分布式版本控制系统中,git add命令扮演着至关重要的角色,它是将本地工作区的文件变动整合进版本控制流程的关键步骤。本文旨…

YOLOv9改进策略 | SPPF篇 | 利用RT-DETR的AIFI模块替换SPPFELAN助力小目标检测涨点

一、本文介绍 本文给大家带来是用最新的RT-DETR模型中的AIFI模块来替换YOLOv9中的SPPFELAN。RT-DETR号称是打败YOLO的检测模型,其作为一种基于Transformer的检测方法,相较于传统的基于卷积的检测方法,提供了更为全面和深入的特征理解&#x…

【C++】STL-vector的使用

目录 1、什么是vector? 2、vector的使用 2.1 vector的定义 ​编辑 2.2 遍历修改数据 2.3 迭代器 2.4 vector空间增长问题 2.5 vector的增删查改 3、迭代器失效 3.1 会引起其底层空间改变的操作,都有可能是迭代器失效 3.2 指定位置元素的删除操…

判断完数(C语言)

一、N-S流程图&#xff1b; 二、运行结果&#xff1b; 三、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int n 0;int i 1;int j 0;int result 1;//提示用户&#xff1b;printf("请输入一个…

【Dubbo】Dubbo简单自定义链路传递traceId

需求 因为服务器内存不足&#xff0c;没有引入链路追踪的框架&#xff0c;项目使用到了Dubbo&#xff0c;所有通过self4j的MDC和Dubbo的RpcContext实现简单的traceId 的多服务模块的传递 解决思路 在第一个模块生成traceId(比如网关模块)&#xff0c;生成traceId&#xff0c…