问题描述
下午在调试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
参考
UG473 (v1.13) February 5, 2019
XILINX之RAM使用指南(加个人总结) https://blog.csdn.net/qq_30866297/article/details/52329139