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

相关推荐
XINVRY-FPGA18 分钟前
XCVP1902-2MSEVSVA6865 Xilinx FPGA Versal Premium SoC/ASIC
嵌入式硬件·安全·阿里云·ai·fpga开发·云计算·fpga
文弱书生6562 小时前
ElectronBot复刻-电路测试篇
嵌入式硬件
平凡灵感码头5 小时前
STM32 启动文件详解:理解单片机启动的“引导者”
stm32·单片机·嵌入式硬件
平凡灵感码头6 小时前
STM32 单片机启动过程全解析:从上电到主函数的旅程
stm32·单片机·嵌入式硬件
郝亚军7 小时前
stm32cube ide如何生成LL库工程
嵌入式硬件
Fxrain9 小时前
[嵌入式实验]实验四:串口打印电压及温度
单片机·嵌入式硬件
Deng94520131411 小时前
什么是单片机?
单片机·嵌入式硬件
GXSC11 小时前
国芯思辰| 霍尔电流传感器AH811为蓄电池负载检测系统安全护航
嵌入式硬件
许有杨20 小时前
STM32中的IIC协议和OLED显示屏
stm32·单片机·嵌入式硬件
houyawei_NO120 小时前
英飞凌SBC芯片TLE9263QX for STM32的库函数与使用
stm32·单片机·嵌入式硬件