基于C6000系列DSP的MPEG-4编码器实现
·可以将两个16位数据或者四个8位数据合并成一个32位数据,以提高存取效率;
·必须静态地知道每条操作指令执行需要的时钟周期,这样才能取得该操作的正确结果;
·这种结构的处理器不能处理动态事件,例如Cache突然消失;
·对于多周期才能完成的指令,在正确计算的基础上,一定要提前执行,以免出现一条指令必须等上一条指令执行结束才能执行的情况。
下面结合C6000系列DSP的指令及其具体资源情况,以MPEG-4中的算法为例说明如何利用这两种结构设计出高效的代码。
3.1 利用流水线结构设计程序
流水线是指指令的处理可分为几个子操作,每个子操作由不同的单元完成。对每个单元来说,每隔一个时钟周期可进入一条新指令,在同一时间内不同单元可以同时处理多条指令。在C6000中B(.unit)lable是一条跳转指令,它的执行周期为7个时钟周期,也就是说,在安排这条指令之后6个时钟周期才能使程序转移到lable处执行,以程序1为例说明如何利用流水线结构设计程序。该程序的执行顺序如下:0000→0004→0008→000C-0010→0014→0008→000C...从程序执行顺序知道,要想在执行完0014处的指令后跳转到LOOP处,就应该在0014的前6个时钟周期处安排这条指令;如果不提前安排好这条指令,而是在0014后放置这条指令,就需要使CPU等待6个时钟周期才能跳到LOOP处,从而使程序运行效率降低。从这个程序的执行顺序可以看出,必须提前知道每一条指令的运行周期数,并提前安排该指令,才能达到减少等待周期、提高程序效率的效果。C6000系列DSP指令集包括许多多时钟周期的指令,如跳转指令、数据访问指令等。MPEG-4编码算法需要频繁地访问大量数据,并且有很多循环,无论是数据访问还是循环都要用到多时钟周期指令。以MEPG-4的DCT算法为例,每一个8×8的块变换需要用16次的跳转指令和256次数据访问指令,由此可见流水线在MPEG-4程序优化中所起的作用。
评论