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系统的性能和效率。

相关推荐
Vae_Mars1 天前
单片机中的TVS管
单片机·嵌入式硬件
hazy1k1 天前
51单片机基础-直流电机控制
stm32·单片机·嵌入式硬件·51单片机
小莞尔1 天前
【51单片机】【protues仿真】基于51单片机智能窗帘系统
c语言·stm32·单片机·嵌入式硬件·物联网·51单片机
我先去打把游戏先1 天前
ESP32学习笔记(基于IDF):IOT应用——WIFI连接
笔记·单片机·嵌入式硬件·mcu·物联网·学习·esp32
清风6666661 天前
基于单片机的简易智能衣架控制系统设计
单片机·嵌入式硬件·毕业设计·课程设计
酷飞飞1 天前
I2C软实现基于GD32F407VE的天空星的配置
单片机·嵌入式硬件
充哥单片机设计1 天前
【STM32项目开源】基于STM32的人体健康监测系统
stm32·单片机·嵌入式硬件
hazy1k1 天前
51单片机基础-独立按键
stm32·单片机·嵌入式硬件·51单片机
文火冰糖的硅基工坊1 天前
[创业之路-702]:“第三次”与“第四次工业革命”的范式跃迁
大数据·人工智能·科技·嵌入式硬件·架构·嵌入式·gpu
清风6666661 天前
基于单片机的智能水瓶温度控制系统
单片机·嵌入式硬件·毕业设计·课程设计