TMS320C6x系列DSP由于引入流水线而大大提高了DSP的性能。当程序中的算法保持流水线充满时,流水线是最有效的。为了使DSP获得最高的效率,必须考虑流水线性能。
1.一个取指包中具有多个执行包的流水线操作
一个取指包(FP)包含8条指令,每个取指包可分成1~8个执行包,每个执行包是并行执行的指令,每条指令在一个独立的功能单元内执行。当一个取指包包含多个执行包时,将会出现流水线阻塞的问题。
流水线阻塞产生的原因:在TMS320C6xDSP的流水线上,每一个执行包(EP)占用一个指令分配节拍(DP),如果第n个取指包内有3个EP,则该FP会占用3个DP。因为第n+1个FP和第n个FP在取指阶段只相差一个节拍,所以,当第n+1个FP到达DP节拍时,第n个FP的EP还没有完成,造成了TMS320C6xDSP产生流水线阻塞。
图2-15为流水线冲突的情况。图2-15中取指包n包含3个执行包,取指包n+1到n+6每个只有1个执行包。定义取指包n到n+6的所有指令代号依次按照A、B、C、D…的顺序排列。在取指包n的8条指令中,A和B是一个执行包,C、D和E是一个执行包,F、G和H是一个执行包。
上述情况的程序代码如下。
图2-15 流水线冲突的情况
第一个取指包n在周期1到周期4通过取指级的4个节拍,同时在周期1到周期4的每个周期都有一个新的取指包进入取指的第一个节拍。在周期5的DP节拍,CPU扫描FPn的p位,检测出在FPn中有3个执行包EPk~EPk+2,这就迫使流水线冲突,允许EPk+1和EPk+2在周期6和周期7进入DP节拍。一旦EPk+2准备进入DC节拍(周期8),流水线冲突就被释放。当EPk+2完成指令分配后,流水线脱离阻塞状态,重新开始执行。
FPn+1~FPn+4在周期6和周期7出现流水冲突,以便CPU有时间处理EPk~EPk+2进入DP节拍。FPn+5在周期6和周期7也出现流水冲突,直到周期8流水线冲突释放后进入PG节拍。周期8以后流水线连续操作直到有包含多个执行包的取指包进入DP节拍,或者发生中断。(www.xing528.com)
TMS320C67xDSP的流水线阻塞情况和TMS320C62x/C64xDSP的流水线阻塞类似。
2.多个NOP指令
一个FP中的EP数量是确定指令通过流水线形式的一个因素,另一个因素是EP中指令的类型。
NOP指令是一种特殊指令类型,是指不使用功能单元的空操作。单周期NOP指令和其他指令在一个执行包(EP)下,不会对其他指令产生影响。但多周期NOP(NOPn)指令,和其他指令在同一个执行包下时,其作用相当于在该执行包的后面,增加了n-1个NOP指令。如图2-16所示为一个多周期NOP指令与其他指令并行操作的执行情况。
图2-16 多周期NOP指令与其他指令并行操作的执行情况
在图2-16a中,仅有一个单周期NOP指令与其他指令在一个执行包中。LD、ADD和MPY指令的结果都在适当周期期间可用。此时,NOP指令对执行包没有任何影响。
在图2-16b中,单周期的NOP指令改为多周期的NOP5指令,因为NOP5指令的存在,在时钟周期i+1、i+2、i+3和i+4时,不会有该执行包以外的其他任何指令执行,执行效果同以下代码。
跳转指令可以提前结束多周期NOP指令,在跳转指令的5个延迟时隙后,跳转目标代码进入执行操作,而不管多周期NOP指令是否结束。例如,在图2-17中,如果EP1中没有跳转指令,EP7的执行,要等到EP6中的NOP5指令执行完毕,在时钟周期11开始执行。如果EP1中的跳转指令,目标代码是EP7,该跳转指令,提前结束EP6中的NOP5指令,在EP1的5个延迟时隙后,即在时钟周期7,开始执行EP7。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。