BlockRAM地址冲突问题

文章目录

  • 问题描述
    • 使用情境
    • 问题分析
  • UG
  • 参考

问题描述

下午在调试FPGA时,遇到一个问题:无法向RAM中写值(读出的值是旧值,不是新写入的值)

使用情境

TDP_RAM的A、B端口均是write_first模式,通过MicroBlaze向TDP_RAM_A端口中写数据,FPGA从TDP_RAM_B端口中读数据。A端口的clk,wen,enA能信号是由软核提供的,B端口的时钟由FPGA提供,wen常低,enB常高,亦即:A端口的数据不是一直写,B端口的数据是一直读,RAM工作在不同时钟域之下。

问题分析

  • 在软核程序的初始化代码中,向RAM中一段地址中写入一组数据,通过Memory_View观察到数据正确写入
  • 在设备正常工作起来之后,向RAM中写入数据,通过Memory_View观察到数据没有变化
  • 创造条件,使B端口的读地址在软核写RAM的过程中保持不变,通过Memory_View观察到数据正确写入

判定问题是由读写地址冲突引起。查询手册发现,在我的使用场景下,从B端口中读出的值是XXXX,是个未知态。

UG

UG473
BlockRAM地址冲突问题_第1张图片BlockRAM地址冲突问题_第2张图片

参考

UG473 (v1.13) February 5, 2019
XILINX之RAM使用指南(加个人总结) https://blog.csdn.net/qq_30866297/article/details/52329139

你可能感兴趣的:(FPGA)