嵌入式片上存储器有效使用的方法
编码前转移到片上,这一宏块编码结来后就不再使用,这部分片上存储器就可释放,用来存储下一宏块数据。若在编码的同时采用DMA转移下一个宏块,则需要在片上分配两个宏块的存储器空间,用来存储编码的原始图像。 在进行INTER帧的编码时,运动搜索需要使用前一帧的重建图像作为参考。设搜索范围为[-16,+16],编码该宏块需要搜索参考图像中以编码宏块位置为中心的9个宏块,即前一帧中宏块(x,y)的重建图像,直到编码(x+1,y+1)宏块后生命期才结束。以CIF分辨率为例,不可能把一帧图像的所有重建宏块保存到生命期结束,因而部分重建图像必须暂时存储在片外。若在编码(x-1,y-1)前将重建宏块(x,y)拷贝到片上并一直保存到编码(x+l,y+1)宏块结束,则只需要在片上分配将近3个GOB的空间用来存储参考图像,就可以保证每个宏块的重建图像数据只需要一次片外到片上的转移。 半像素内插结果,用于在整像素运动搜索后作为半像素搜索的参考,因而可在整像素搜索后、半像素搜索前,围绕整像素运动矢量,对整像素运动矢量对应的匹配宏块进行内插。这样就没有必要在编码INTER帧前将整帧图像进行内插,可显著减少存储内插结果的存储器数量,从而分配在片上。 2 片上数据的存储器分配 C55x除了读指令的地址、数据总线外,还有3条用于从存储器读操作数的地址、数据总线,2条写操作数到存储器的地址、数据总线。CPU在1个周期内可完成多个操作数的读写,由于每个DARAM块或SARAM块的访问能力有限,这些操作数位于适当的DARAM或SARAM块内,才能在单周期内完成多个数据的读入或者数据的同时读写,而不产生延迟。 2.1 指令代码的分配 应用程序的指令代码可以存储在片外存储器,通过指令Cache进行访问,可以减少CPU读指令代码与CPU读/写片上存储器内数据的冲突,同时将空余更多的片上存储器空间用于数据分配。若存储程序代码和数据所需的存储器容量总和小于片上存储器容量,那么将代码分配到片外存储器与代码数据全部分配到片上存储器相比,性能降低大约10%。因此当代码和数据总和小于片上存储器容量时,应该全部分配到片上存储器。通常程序代码仅供CPU读取,并不修改;而数据经常需要同时读写,因而应尽量将代码存储在SARAM内,以便将访问能力更强的DARAM用来存储数据。在单个CPU周期内,SARAM仅有一次访问能力,同时读取指令和数据必然产生延迟,为了保证读取数据时不产生延迟,数据不能与访问这些数据的代码存储在同一SARAM块内。也就是说,当程序代码大小不是刚好整数个块时,可通过调整代码或者数据的存储器分配,避免CPU读代码与读/写数据发生冲突。 2.2 数据分配 前面已经讨论过变量和常数的分配,这里主要讨论的耗时较多的矩阵运算,通常口丁以用C语言或者汇编语言编写应用程序,C语言编译后可产生汇编代码。在汇编语言的代码中,找到处理矩阵操作数的指令,依次列举这些指令不产生延迟的矩阵分配限制,并求解满足这些限制条件的片上存储器分配。 不产生延迟的约束条件可分成两类基本约束条件: ①两变量位于DARAM块内或者两变量位于不同的块内,记为条件A(这是由SARAM块或者DARAM块访问能力产生的限制);②两变量位于不同的块内,记为条件B(这是由CPU总线的特殊结构产生的限制)。其中条件A中的两变量可在同一DARAM块内;或者不同的SARAM块内;或者一个变量在DARAM内,另一个在SARAM内。条件B指的是两变量在不同的DARAM块内;或者在不同的SARAM块内;或者一个变量在DARAM块内,另一个在SARAM块内。条件A可看成是两种条件的逻辑“或”关系: A=B Or C 其中,条件C定义为两变量都位于DARAM块内。循环中的操作数一般表现为矩阵的一个元素,在一个应用程序中,通常有多个矩阵,矩阵中的元素应同时满足多个上述基本条件。当矩阵较多,限制条件复杂时。可以使用计算机求解数据存储器分配,以满足矩阵访问不产生延迟的条件。在这里,只需要求出满足条件的一个解,并不需要求出所有可能的解,因而对求解问题做一定的简化。 设x、y分别是矩阵X、Y的某一个元素,X、Y位于不同的块内是x、y位于不同的块内的充分条件;同样X、Y都位于DARAM内或者不同的块内是x、y都位于DARAM内或者不同的块内的充分条件。例如,X位于DARAM块,Y矩阵部分位于与X相同的DARAM内,其余位于SARAM内,也能使x、y满足条件A。 例如:N个矩阵需要同时满足N1个A类条件和N2个B类条件。从每个A类条件中任选一个条件(B或者C),最多有2N1个组合。每种组合与N2个B类条件联立求解,其中某些组合可能没有解,任意一个解都能满足不产生延迟的条件。这
- 基于FPGA的DSP设计方法(08-26)
- 专家指导:Linux操作系统密码恢复方法(05-16)
- 基于多核DSP Bootload代码加载方法研究(01-16)
- 基于DSP 的大容量无线传输技术中高性能的启动方法(03-16)
- 多核调试新方法探讨(10-22)
- 有备无患Linux操作系统备份方法介绍(06-06)