当前位置: 首页 > ops >正文

zynq7020 shm共享内存和OCM

        在Xilinx Zynq-7020 SoC(结合ARM处理器和FPGA)中,共享内存(SHM)片上内存(OCM)是两种不同的内存资源,它们在物理位置、访问速度、用途和设计目标上存在显著差异。以下是它们的核心区别:


1. 物理位置与架构

特性OCM(On-Chip Memory)共享内存(SHM,Shared Memory)
物理位置位于处理系统(PS,Processing System)内部通常位于DDR内存或FPGA(PL)的BRAM中
硬件归属PS独占资源(ARM CPU专用)PS和PL(FPGA)共享访问
典型容量较小(Zynq-7020的OCM为256KB)较大(取决于DDR配置或FPGA BRAM资源)

2. 访问速度与延迟

特性OCM共享内存
访问延迟极低(紧耦合,直接通过PS内部总线访问)较高(需通过AXI总线或DDR控制器)
带宽高(无总线竞争,适合实时操作)受AXI总线或DDR带宽限制
适用场景实时性要求高的任务(如中断处理、关键数据)大数据传输、PS与PL协同计算

3. 用途与设计目标

特性OCM共享内存
核心用途- 存储关键代码(如BootROM)
- 缓存敏感数据(如中断向量表)
- 低延迟数据缓冲区
- PS与PL间大数据交换
- 实现异构计算数据共享
- 存储非实时性数据
设计目标优化PS性能,减少对DDR的依赖实现PS和PL的高效通信

4. 软件与硬件管理

特性OCM共享内存
软件配置通过PS的MMU直接映射,需在链接脚本中指定需手动分配地址空间(如DDR区域或BRAM)
缓存一致性默认非缓存或缓存一致(无需软件干预)需处理缓存一致性(如Xil_DCacheFlush
硬件依赖完全由PS管理依赖AXI互联协议或PL的BRAM控制器

5. 典型应用场景

OCM的典型场景
  • 实时任务:存储中断服务程序(ISR)或实时操作系统的关键数据。

  • 低延迟缓冲区:用于高速数据采集的临时存储(如ADC/DAC数据)。

  • Boot代码:Zynq启动时,BootROM代码通常驻留在OCM。

共享内存的典型场景
  • PS-PL数据交互

    • PL(FPGA)通过AXI总线直接读写DDR中的共享内存。

    • 示例:PL加速器处理图像数据后,将结果写入DDR,PS读取并显示。

  • 大数据缓冲:存储视频帧、网络数据包等需要大容量内存的场景。

  • 多核通信:在AMP(非对称多处理)系统中,多个ARM核通过共享内存交换数据。


6. 配置与使用示例

OCM配置(在Vitis中)

在链接脚本(lscript.ld)中指定OCM区域:

​​​​​​​{ ocm_ram : ORIGIN = 0xFFFF0000, LENGTH = 0x10000 // 64KB OCM } SECTIONS { .ocm_data : { *(.ocm_data) } > ocm_ram }
共享内存配置(PS与PL间)
  1. DDR共享内存

    • 在PL中通过AXI Master接口访问DDR。

    • PS端需确保内存区域未被缓存或手动刷新缓存:// 分配非缓存内存 void *shared_buf = Xil_NonCacheableMalloc(BUF_SIZE); // 刷新缓存(PL修改数据后) Xil_DCacheFlushRange((u32)shared_buf, BUF_SIZE)

      // 分配非缓存内存
      void *shared_buf = Xil_NonCacheableMalloc(BUF_SIZE);
      // 刷新缓存(PL修改数据后)
      Xil_DCacheFlushRange((u32)shared_buf, BUF_SIZE);

  2. BRAM共享内存

    • 在PL中例化BRAM,通过AXI BRAM控制器与PS共享。

    • 在Vivado中配置AXI BRAM控制器地址范围。


7. 性能对比总结

维度OCM共享内存(DDR)
延迟1~2个时钟周期数十到数百时钟周期
带宽~10 GB/s~1 GB/s(受DDR限制)
适用数据量小数据(KB级)大数据(MB~GB级)

选择建议

  • 使用OCM
    实时性要求高、数据量小、频繁访问的场景(如中断处理、关键代码)。

  • 使用共享内存
    PS与PL间需要传递大量数据、对延迟不敏感的场景(如图像处理、网络协议栈)。

        即:通过合理分配OCM和共享内存,可以显著提升Zynq-7020系统的性能和效率。

http://www.xdnf.cn/news/9347.html

相关文章:

  • Rust 和 Python 如何混合使用
  • 面试题——计算机网络:HTTP和HTTPS的区别?
  • MySQL问题:MVCC是什么?
  • 从解决一个分享图片生成的历史bug出发,详解LayoutInflater和View.post的工作原理
  • java 递归地复制文件夹及其所有子文件夹和文件
  • LeetCode-栈-每日温度
  • 《Discuz! X3.5开发从入门到生态共建》第1章 Discuz! 的前世今生-优雅草卓伊凡
  • 界面控件DevExpress WinForms v24.2新版亮点:富文本编辑器功能全新升级
  • Java五种方法批量处理List元素全解
  • 【操作系统】内核态、用户态
  • [Python] 避免 PyPDF2 写入 PDF 出现黑框问题:基于语言自动匹配系统字体的解决方案
  • CS144 - LAB0
  • 文本编辑器vi的使用
  • SECS/GEM协议中Report ID、SV ID、CE ID与S2F33/S2F35/S2F37指令的关系及配置示例
  • 专业库室联管联控系统|门禁联管联控系统
  • Browser-use快速了解
  • 流光溢彩的数字长河:Linux基础IO,文件系统的诗意漫游
  • Google Play的最新安全变更可能会让一些高级用户无法使用App
  • 函数抓取图片microsoft excel与wps的区别
  • 【n-grams】基于统计方法的语言模型
  • 深入理解设计模式之中介者模式
  • 基于Springboot + vue3实现的图书管理系统
  • 【Mysql开启慢查询日志】
  • 泰迪杯特等奖案例深度解析:基于联邦时空图卷积网络的跨区域碳排放协同预测与优化系统
  • 详解Kubernetes Scheduler 的调度策略
  • Day04
  • python进程间通信
  • C++数据结构 : map和set的使用
  • 高精度微型导轨在3D打印机中有多重要?
  • 2024 CKA模拟系统制作 | Step-By-Step | 9、题目搭建-扩容deployment副本数量