• 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的详细底层处理过程,可以查看这些函数。

  • 相关阅读:
    vue3 基于el-tree增加、删除节点(非TypeScript 写法)
    WEB前端网页设计 HTML CSS 网页设计参数 - 【边框圆角】
    关于spring嵌套事务,我发现网上好多热门文章持续性地以讹传讹
    MediaPlayer_Analyze-2-JNI
    python的环境安装(版本3.10.6)
    sql10(Leetcode1661每台机器的进程平均运行时间)
    GoogleTest安装和搭建自动测试环境
    使用Python实现3D曲线拟合
    PFC(Power Factor Correction)功率因数校正电路
    使用.Net对图片进行裁剪、缩放、与加水印
  • 原文地址:https://blog.csdn.net/weixin_46897065/article/details/138046242