• ZYNQ OCM 操作 低256kB与高256kB的模式切换方法


    1、zynq ocm地址分配如下图所示,在默认状态下256kB的OCM分布在如下地址空间;

      0000_0000  -0000_ffff       64kB

      0001_0000  -0001_ffff  64KB

      0002_0000  -0002_ffff  64KB

      ffff_0000  -ffff_ffff    64KB

     

     

     2、如何设置ocm 高地址

    通过4位的slcr.OCM_CFG[RAM_HI],以4个独立的64KB区域的粒度,将256KB RAM阵列映射到低地址范围(0x0000_0000~0x0003_FFFF),或者高地址范围(0xFFFC_0000~0xFFFF_FFFF);

     

     

     UG585中关于设置的寄存器如上所示slcr.OCM_CFG[RAM_HI] 设置 1111,

    具体在SDK操作了一下,c代码如下

    #include <stdio.h>
    #include "platform.h"
    #include "xil_printf.h"
    #include "xil_misc_psreset_api.h"
    #include "xil_io.h"

    int main()
    {uint a,b;
    init_platform();
    Xil_DCacheDisable();
    Xil_ICacheDisable();
    /* Unlock the slcr register access lock */
    Xil_Out32(XSLCR_UNLOCK_ADDR, XSLCR_UNLOCK_CODE);
    a = Xil_In32(0xF8000910);
    Xil_Out32(0xF8000910, 0x1f);
    a = Xil_In32(0xF8000910);

    b = Xil_In32(0xF8F00000);
    Xil_Out32(0xF8F00000,(0xfffffffd & b) + 0x2);
    b = Xil_In32(0xF8F00000);


    Xil_Out32(0xF8f00040,0x00100000);
    Xil_Out32(0xF8F00044,0xFFE00000);
    while(1);

    cleanup_platform();
    return 0;
    }

    其中下面这个代码是打开slcr寄存器,一开始没有找到这个语句,所以在写0xF8000910这个寄存器的时候只能读,不能写,

    /* Unlock the slcr register access lock */
    Xil_Out32(XSLCR_UNLOCK_ADDR, XSLCR_UNLOCK_CODE);

     

     

     

    我验证了一下,不需要在BD里面使能HIGH_OCM同样可以操作,如下图所示AXI write back =2'b00,说明可以操作

     

     同时在SDK中查看mem数据与PL通过AXI4写入的数据一样,证明了成功操作HIGH_OCM

     

     

  • 相关阅读:
    showModalDialog 超过问题
    工作流,WEB框架,UI组件网络收集整理
    VSS使用方法详解
    Windows远程桌面连接命令mstsc
    Nginx 配置简述
    jQuery编程代码规范的最佳实践
    TinyMCE(富文本编辑器)在Asp.Net中的使用方法
    扣文转文方法
    VS2013 EMMET插件学习
    为革命保护视力 --- 给 Visual Studio 换颜色
  • 原文地址:https://www.cnblogs.com/wangyabin121/p/12745581.html
Copyright © 2020-2023  润新知