赛灵思
直播中

贾利利

7年用户 163经验值
私信 关注
[问答]

Cahe更新到外部存储器DDR得到的值错误该怎么办?

你好,
我在斯巴达6 FPGA工作。
我在XPS中使用MPMC控制器与外部LPDDR连接。
我的SDK应用程序的bss段位于LPDDR中。
我已经制作了MPMC区域cachaeble区域,因为代码执行时间必须最小化。
我还没有在micrlaze配置中写回来,所以我相信microblaze配置为直写。
SDK应用程序工作正常。
但是我还必须从VHDL端读取LPDDR以获取SDK应用程序中使用的变量值。
当我读到我从DDR得到错误的值,我怀疑从缓存不会发生外部内存更新。
建议解决这个问题的方法。
带着敬意
Shalini

回帖(9)

周志光

2019-8-1 09:01:39
您必须使您的Microblaze和硬件同步,并且您必须在micrlaze中在适当的时间刷新缓存或使缓存无效。
或者不使用缓存。
另外,请确保在c代码中使用必要的关键字volatile。
***我们中的许多人都是FPGA爱好者,而不是Xilinx员工。
如果您获得帮助并给予荣誉(明星),您将来可能会继续获得帮助。
如果您有解决方案,请将其标记为解决方案。***
举报

李焰

2019-8-1 09:19:29
你好, 
我不太熟悉缓存。
刷新或使高速缓存无效意味着更新到外部存储器?
此外,我认为因为我的bss段被加载,所以无法使用microblaze对缓存进行操作。
我相信自从我做完之后我就开始写了。不要回信。
还为什么没有更新?
举报

李焰

2019-8-1 09:28:37
你好,
我知道当我们调用microblaze_flush_dcache()时,dcache数据被写入主内存。我是否正确?
我做了一个程序,其主要部分是:
我的;
int main(){init_platform(); microblaze_enable_icache(); microblaze_enable_dcache();
我的= 0x347;
microblaze_flush_dcache();
而(1){}
}
我的bss部分是MPMC控制器和微型BRAM中的所有其他部分。
MPMC通过缓存启用区域进行写入。
我从地图文件中找到了我的地址并读取了该位置。
我得到0而不是0x347。
我相信当我调用microblaze_flush_dcache()时,我的值将在主内存中更新。
但为什么不是这样呢?
欢迎任何建议。
带着敬意
Shalini
举报

余少虹

2019-8-1 09:38:07
你确定内存地址?
#include“xil_cache.h”
#define MINE_ADDRESS(MPMC_BASEADDR + 0x00000000)
int main()

unsigned int * MinePtr; 
#if MICROBLAZE_EXCEPTIONS_ENABLED == 1 
microblaze_enable_exceptions(); 
#万一 
#if XPAR_MICROBLAZE_USE_ICACHE == 1 
Xil_L1ICacheInvalidate(); 
Xil_ICacheEnable(); 
#万一 
#if XPAR_MICROBLAZE_USE_DCACHE == 1 
Xil_L1DCacheInvalidate(); 
Xil_DCacheEnable(); 
#万一 
init_platform(); 
MinePtr =(unsigned int *)MINE_ADDRESS; 
* MinePtr = 0x347; 
Xil_DCacheFlush(); 
而(1){}
}
可以手动选择地址。
你能再试一次吗?
如果值写在正确的地址,您是否尝试过检入内存?
debugasm
举报

更多回帖

发帖
×
20
完善资料,
赚取积分