TMS320C55x的指令流水线及其效率的提高
摘要:讨论基于TCP/IP协议栈,利用8位单片机构建嵌入式WebServer的具体技术及相关实现方案;给出系统硬件原理框图和有关软件实现的代码框架结构。
关键词:DSP TMS320C55x 指令流水线 自动保护机制
引 言
TMS320C55x(以下简称C55x)是德州仪器公司推出的新一代低功耗高性能16位定点数字信号处理器(DSP)。2002年初,德州仪器公司相继推出了TMS320C55x系列中TMS320VC5510的正式版本,以及TMS320VC5509和 TMS320VC5502。C55x是在TMS320C54x(以下简称C54x)的基础上发展而来的,其源代码也与C54x的兼容。C55x达到了C54x的2倍的周期效率,并且只有C54x的1/6的功耗。C55x优异的性能和极低的功耗使其成为具有相当竞争力的DSP产品。
C55x是从C54x的基础上发展而来的,在结构上做了相当大的扩展,在指令集上也有很大的提高。C55x继续使用C54x在代码密度上建立的获得更低系统成本的标准,并将其进一步发展为采用1~6字节的可变字节宽度的指令,以提高代码密度。使用这种可缩放的指令字长度,C55x每个功能的控制代码可以比C54x的减少最多达40%。C55x还增加了总线宽度,其指令单元每次可从内部或外部存储器取32位程序代码(C54x每次只能取16位)。C55x含有指令高速缓存器(cache)以使外部存储器访问最少,改善数据吞吐率和省电。这种指令集的设计与低功耗需求结构的联合使用,使得应用系统具有极高的性能。
C55x DSP的最大特点就在于,其强有力的并行特性和方便用户编程的流水线自动保护机制,而C55x并行指令的实现和指令的高效率执行,在很大程度上都依赖于指令流水线的支持。
javascript:window.open(this.src);" style="cursor:pointer;"/>
1 TMS320C55x的指令流水线
DSP指令的执行,可以是直接执行,如AD公司的218x系列DSP,也可以采用指令流水线的方式。德州仪器公司的DSP产品一般都采用指令流水线的工作方式,即一条指令的执行分为若干个阶段完成,就像经过工厂里的生产流水线上的一道道工序一样,而同时,在流水线的其它阶段又分别有其它的指令在顺序地执行着。采用指令流水线的执行方式,可以大大提高系统的执行效率,使得系统可以低延迟或“无延迟”地执行较复杂的指令。因此,更多的DSP开始采用指令流水线的执行方式。
C55x继承了C54x的指令流水线的执行方式,其流水线分为两个分离的阶段,即“取指阶段”和“执行阶段”。在取指阶段,将4字节的指令包取入指令缓冲队列,这里面又包括提交地址、取指、预译码等4个阶段;而在执行阶段,则完成指令的译码执行,又可分为译码、取操作数、执行、写回结果等8个阶段。图1是“取指阶段”和“执行阶段”的示意图。
其中“数据回写+”只出现在数据写入存储器的指令中。
C55x的指令流水线一般由程序流单元(PU)控制。程序流单元对指令译码,分派指令到寻址单元(AU)和数据运算单元(DU),并管理全部的保护流水线,其具有的预测转移能力可以避免条件指令执行引起的流水线刷新。
2 TMS320C55x指令流水线的自动保护机制
虽然采用指令流水线的工作方式,可以提高系统的效率,但不同的指令执行情况不同,就有可能造成流水线的冲突。如:当一条指令想写入某寄存器时,前一指令还未完成对该寄存器的读取操作,就会产生流水线冲突的问题,这时候就必须对流水线进行保护,确保前一指令的读取操作完成后才修改该寄存器的值。遇到这样的情况,必须在第二条指令之前加入等待延迟。如:在设计C54x程序时,就需要程序设计人员在可能发生流水线冲突的指令前后手工加入NOP(空操作)指令或调整指令的顺序,以使第二条指令执行时能取到正确的操作数。时刻关注流水线的冲突问题,在编程时是非常麻烦的;而在C55x中,由于采用多指令并行操作,流水线的冲突问题也就越发严重。但幸运的是,C55x中的指令流水线具有自动保护机制,其自动保护机制会在可能引起冲突的指令之间自动增加不活动的周期,以避免冲突的发生。这些都是在指令执行时自动加入的,不需要设计人员亲自去添加等待周期,从而省去了在编程时对流水线冲突进行调整的工作,大大降低了编程和调试的难度。而且,也正是由于指令流水线有了自动保护机制,才使得设计人员可以放心地使用C55x的并行指令。
3 如何减少指令流水线的保护和延迟
虽然C55x的自动保护指令流水线结构降低了编程时的复杂度,但指令流水线的保护造成的延迟也是影响C55x程序执行效率的一个重要方面。
指令流水线的执行方式会产生流水线的冲突和保护,而C55x支持多指令同时执行,流水线冲突与保护的问题更加严重。所以,减少流水线的冲突,即减少流水线保护造成的延迟,对DSP的执行效率是大有影响的。下面就介绍流水线冲突的可能原因和如何避免流水线冲突,以尽量减少流水线保护机制所带来的延迟。
① 对寄存器访问的竞争是影响流水线保护和延迟的主要原因。如果出现要对某寄存器读取/写入的时候,前一指令对该寄存器的写操作/读操作还未完成的情况,就会造成流水线保护和延迟。在以寄存器为条件执行指令的条件中,如果在测试条件时前面的指令对该寄存器的修改还未完成,也会造成流水线保护和延迟。