32位DSP设计中的流水线数据相关问题及解决办法
是为排除store指令而加上的。EXE_B_DEPEN与EXE_A_DEPEN类似,源寄存器号(ID_rs2IsReg)所包含的指令要比ID_rs1IsReg少得多。I3与I1的数据相关判断与此类似。 (1) 封锁当前正译码的指令的写控制信号;
得出了数据相关条件后。下一步的任务是确定如何暂停流水线。这里要特别注意的一个问题是不能停止所有指令的流水线,而只能暂停相关指令及其后续的所有指令。假如I2与I1相关,则只暂停I2及I2以下的指令,而不应把I1也暂停,否则,处理器将永远暂停下去。暂停流水线要注意以下3个方面:
(2) 不能把从存储器取来的下条指令打入IR;
(3) 不改变当前PC值。
实际操作时可使用如下的方法实现流水线的暂停:
这样,当I2与I1相关时,流水线将暂停两个周期。I3与I1相关时,流水线暂停一个周期。通常把被暂停掉的周期称作流水线"气泡"。暂停流水线是解决流水线处理器数据相关问题的一种有效方法。使用这种方法可保证处理器能够从寄存器堆读出正确的数据。但是,暂停流水线两个或一个周期会造成处理器性能的损失。因此,如果没有数据相关,处理器完全可以多执行两条或一条指令。在使用这种方法的处理器组成的计算机系统中,高级语言的编泽器和汇编器在产生最终目标机器码时,应尽量避免出现过多的数据相关指令序列。编译器和汇编器最初可以在相关指令之间插入nop指令,然后进行优化,可以用一些有意义的不相关的指令替换掉nop,以减少"气泡"的出现。
3.2 内部前推
流水线数据相关问题的本质在于一条指令执行时要用到上面指令的计算结果,但这个结果尚未被写入寄存器堆,因此,如果让ALU使用从寄存器堆渎出的数据的话,流水线"气泡"问题也可以得到解决。试想,数据相关发生在ALU计算周期,而所有的计算任务均由这一个ALU来按顺序完成,也就是说,ALU计算时发现与上一条或两条指令的结果数据相关的话,这些结果实际上已由ALU计算出来了,只是还没有写入寄存器堆,但其结果还在流水线寄存器R和C中,这就可以把它们直接拿过来用。为此,可在ALU的两个数据输入端各加一个多路器,以使R和C中的数据能被直接送到ALU的输入端,这样就用内部前推技术提高了流水线的性能。
4 结束语
采用暂停数据相关流水线的方法可以解决数据相关问题。目前,笔者已将该方法应用于某32位浮点通用数字信号处理器中,而且该处理器已经没计完成,并通过综合仿真查验波形证明:该DSP完全符合要求。
- F1aSh存储器在TMS320C3X系统中的应用(11-11)
- 基于PIC18F系列单片机的嵌入式系统设计(11-19)
- DSP在卫星测控多波束系统中的应用(01-25)
- 基于PCI总线的双DSP系统及WDM驱动程序设计(01-26)
- 利用Virtex-5 FPGA实现更高性能的方法(03-08)
- DSP与单片机通信的多种方案设计(03-08)