问题描述
一般问题描述:
当使用“plb_ddr_v1_00_b或plb_sdram_v1_00_c”内核执行突发事务时,PLB_MERR信号变为活动状态。为什么会这样?
解决/修复方法
在这些内核中,具有跨越行边界的地址的读突发(不是高速缓存行,而是真正的读突发事务)将返回PLB_MERR。发生这种情况是因为读突发实现要求每个时钟提供数据,并且当越过行边界时,会产生延迟以激活新行,因此不能每个时钟返回数据。
请注意,SDRAM存储器具有行地址和列地址。我们要求行地址位在突发期间保持稳定。
这已在“plb_ddr_v1_00_c”(目前在EDK 6.1中发布)和“plb_sdram_v1_00_d”(将在EDK 6.1 SP2中发布)中修复。
“plb_sdram_v1_00_c”的临时解决方法是关闭突发/缓存行支持(C_INCLUDE_BURST_CACHELN_SUPPORT = 0)。这会将所有突发和缓存行事务转换为单个事务,因此允许跨越行边界。由于“plb_ddr_v1_00_c”可用,因此无需解决方法。
请注意,PPC405不执行突发事务(仅缓存行),因此这不是代码执行的问题。当使用DMA的OPB内核通过OPB-PLB桥将数据突发到OPB时,会出现问题。 OPB-PLB桥具有执行突发事务的能力。替代解决方案是关闭OPB-PLB桥中的突发支持(C_RNGx_BURST,其中x = 0 -3表示不同的OPB2PLB桥地址范围)。
选择使用哪种解决方法取决于PLB SDRAM在系统中的使用。如果主要用于代码执行并且应用程序是代码密集型的,那么最好关闭OPB2PLB桥接器中的突发支持,以便处理器仍然具有对PLB SDRAM的高速缓存行访问。如果主要用于数据存储,那么最好关闭OPB2PLB桥中该地址范围的突发支持。
没有回复内容