DSP

第二十篇:DDR内存读写问题-USB Display项目

2019-07-13 20:11发布

最近在实际的项目中碰到这样的问题: 嵌入式系统DDR (RBC row, bank, columne), 每块1Gbit816, 两块由片选决定读写其中的一块. Memory controller通过AXI连接在SOC中.
1. 在I-CACHE没有使能的情况下, 通过MC访问DDR有三路TRAFFIC, 分别是取指令, CPU刷/写FRAME BUFFER, DMA取/读FRAME BUFFER的数据 在低分辨率的情况下, 没有发现图像闪烁, 到了高分辨率的情况(1680*1050 60p, 720p, 或者1080p, RGB8888)下,就有图像闪烁 I-CACHE使能的情况下, 本以为MC访问DDR的原本三路TRAFFIC降到了二路, 情况能够改善,结果,问题更加严重 2. 同时, 将指令与FRAME BUFFER放在相同的DDR颗粒与不同的颗粒,也会产生不同的效果(闪烁与否)
关于这两个问题, 明显就在于对DDR/MC的了解与特定情况的分析上 不同的读写方式(RBC, BRC, B RH CH RL CL), 不同的刷新模式, DMA BURST的方式(长度), DMA OUTSTANDING的数目, CPU往FRAME BUFFER中写的方式(DWORD or LOAD ASSEMBLY).
最新UPDATES: 通过对DDR的性能的学习与了解, 然后通过数学上的计算, 对以上两个问题有了比较彻底的分析与解决. 常常听有些人说, 底层软件工程师的工作, 就是"改硬件寄存器", 也有人讲, 码农的工作, 就是写代码, 复杂点的东西, 就是一些逻辑, 没有多少价格在这里. 事实上, 说这些话的人, 要么是外行, 要么是内行中做过的东西浅尝则止的, 真正要把底层软件做好, 把性能提上去, 要学要做要走的路, 很多很多很长.