论文部分内容阅读
【摘要】 研究了32位浮点通用DSP设计中的流水线技术以及相关问题,给出了通过在硬件上使用哈佛结构、提前写寄存器操作时间、内容前推、延迟转移等技术解决数据相关问题的具体方法。
【关键词】 DSP;流水线;冲突与优化
【中图分类号】TP311 【文献标识码】A 【文章编号】1001-4128(2010)09-0090-02
1 引言
DSP处理器执行程序指令,可以直接执行,也可以采用指令流水线的方式执行。TI DSP处理器一般都采用指令流水线方式, 该方式将一条指令分为若干个阶段按顺序分别执行,这样处理的优势就像工厂里组装电脑的流水线上的情形,同一时刻流水线上的各个岗位(阶段)都在操作对应的工序, 而流水线上的每个工序分别对应着在顺序执行着组装任务的一台电脑。也就是说,采用指令流水线的执行方式, 可以实现多条指令并行处理,大大提高系统的执行效率, 使得系统可以低延迟或“无延迟”地执行较复杂的指令。因此,更多的DSP处理器开始采用指令流水线的执行方式[1]。
2 C54x DSP的指令流水线
2.1 流水线结构
C54x系列DSP是TI TMS320C5000中应用比较广泛处理器,C54x DSP采用指令流水线的执行方式,其流水线周期分为6个操作阶段(或操作周期),各阶段相互独立。因此,在一条流水线中,在任一操作周期,最多可以存在6条指令同时处于流水线的不同阶段进行各自的操作。C54x DSP流水线结构的6个阶段是:预取指令、取指令、解码、访问、读与执行(写)阶段,如图1所示。
2.2 流水线与C54x总线
C54x的结构围绕8组16位总线(4组程序/数据总路线,4组地址总路线)建立,流水线中并行的6条指令在执行时,需要访问这些总线。按照流水线的6个阶段依次顺序,对总线访问的具体过程是:①将所要取指的地址放在程序地址总线(PAB)上;②从程序总线(PB)上取指令字,并装入指令寄存器(IR);③待指令寄存器中的内容经过译码后,可以确定所要操作的存储器的类型、数据地址产生单元和CPU的控制信号等信息;④DAGEN在数据地址总线DAB或同时在数据地址总线CAB上输出读操作数的地址,同时更新间接寻址模式中的辅助寄存器和堆栈指针(SP);⑤从数据总线DB和控制总线CB读操作数(读操作),同时在数据写地址总线(EAB)上装入写操作数的地址,对于映像寄存器,从存储器中读操作数,并从DB上将其写入选定的映像寄存器中;⑥从数据写总线(EB) 上写数据[2]。
在分析C54x DSP汇编代码时,为了方便盘查流水线冲突与优化代码,可以从功能上将流水线6个阶段归纳为两个顺序的阶段, 即“取指阶段”和“执行阶段”。在取指阶段, 主要是将指令取入指令寄存器(IR), 取指阶段包括预取指令、取指令、解码等阶段;在执行阶段, 主要是对解码指令的执行, 执行阶段包括访问、读与执行(写)等阶段。实际上,在取指阶段是对指令本身进行操作,并且此阶段的操作不去改写存储器等有关资源的内容,所以,一般情况下在取指阶段可以不用考虑其流水线冲突与代码优化的问题。但是,如果一个存储器块同时被映射在程序和数据空间,指令取指和操作数读会发生冲突,这要视存储器的具体配置确定;在执行阶段相关的操作比较多,要访问相关的寄存器、存储器等资源,比如地址(包括辅助寄存器和堆栈指针)更新、写存储器、读存储器等,此阶段容易出现流水线冲突的问题,存在优化程序代码的问题。
2.3 C54x流水线的存储器操作
3 流水线的冲突与优化
C54x DSP的片内存储器可以分为双访问存储器(DARAM)与单访问存储器(SARAM、ROM及DROM)。对于双访问存储器,C54x可以在一个单周期内对每个存储器块访问两次,前半周期第一次访问,后半周期再次访问。当流水线中的一条指令访问一个存储器块时,处于同一阶段的另-条指令可以无冲突地访问另一个块;处于流水线中不同阶段的两条指令,可以同时(单周期内两次分别)访问同-块。然而,如果两次访问是同时访问同一存储器块,就会有冲突。
对于单访问存储器,在一个单周期内只能对存储器访问一次。流水线中的指令同时访问不同的单访问存储器块不会发生冲突,即当处于流水线的一个阶段的一条指令访问一个存储器块时,另一条指令在同一个周期可以无冲突地访问另一存储器块。但是,如果同时访问同一存储器块就会发生冲突。
流水线可能会有冲突,有些冲突CPU可以自己调整,但有些操作需要通过调整程序代码来解决。在C5000 CCS下实现一个代码段,先将61H装入到累加器A中,然后再存入辅助寄存器AR2,并使用间接寻址方式将61H单元的内容(*AR2)装入到累加器B。在CCS的Simulator上运行该段代码(如图3所示,斜体部分为修改前部分),并得不到想要的数据。通过插入NOP指令,调整指令执行的时间,可以解决此代码的流水线冲突问题。依照流水线的各个阶段,解释如下:在①在执行时,②在访问阶段,③间接寻址模式中的堆栈指针(SP)同时更新;③在执行时,⑤在访问阶段,⑤间接寻址模式中的堆栈指针(SP)同时更新;⑥在执行时,⑦在读阶段,ar2是映像寄存器,从存储器中读出操作数,并从DB上其写入选定的映像寄存器ar2;⑧从数据写总线(EB)写数据到b寄存器。
4 结束语
DSP处理器专为应用数字信号处理设计,其内部结构有鲜明特点,代码按流水线方式执行,效率很高。在DSP工程的开发中,经常用到C语言与汇编语言的相互嵌套编程,目的还是为了提高代码的执行效率。通过对流水线的认识与了解,流水线中并行执行的指令有冲突的可能,CCS虽然具有优化代码的功能,但有些代码仍然需要手工调整。通过对C54x DSP冲突代码的调试,进一步了解了流水线的相关概念与规则。下一步,将在此基础上研究流水线的延迟。
参考文献
[1] 梁俊. TMS320C55x的指令流水线及其效率的提高[J]. 单片机与嵌入式系统应用,2003(05):11~13
[2] 彭启琮. DSP技术的发展与应用(M). 高等教育出版社,2009
【关键词】 DSP;流水线;冲突与优化
【中图分类号】TP311 【文献标识码】A 【文章编号】1001-4128(2010)09-0090-02
1 引言
DSP处理器执行程序指令,可以直接执行,也可以采用指令流水线的方式执行。TI DSP处理器一般都采用指令流水线方式, 该方式将一条指令分为若干个阶段按顺序分别执行,这样处理的优势就像工厂里组装电脑的流水线上的情形,同一时刻流水线上的各个岗位(阶段)都在操作对应的工序, 而流水线上的每个工序分别对应着在顺序执行着组装任务的一台电脑。也就是说,采用指令流水线的执行方式, 可以实现多条指令并行处理,大大提高系统的执行效率, 使得系统可以低延迟或“无延迟”地执行较复杂的指令。因此,更多的DSP处理器开始采用指令流水线的执行方式[1]。
2 C54x DSP的指令流水线
2.1 流水线结构
C54x系列DSP是TI TMS320C5000中应用比较广泛处理器,C54x DSP采用指令流水线的执行方式,其流水线周期分为6个操作阶段(或操作周期),各阶段相互独立。因此,在一条流水线中,在任一操作周期,最多可以存在6条指令同时处于流水线的不同阶段进行各自的操作。C54x DSP流水线结构的6个阶段是:预取指令、取指令、解码、访问、读与执行(写)阶段,如图1所示。
2.2 流水线与C54x总线
C54x的结构围绕8组16位总线(4组程序/数据总路线,4组地址总路线)建立,流水线中并行的6条指令在执行时,需要访问这些总线。按照流水线的6个阶段依次顺序,对总线访问的具体过程是:①将所要取指的地址放在程序地址总线(PAB)上;②从程序总线(PB)上取指令字,并装入指令寄存器(IR);③待指令寄存器中的内容经过译码后,可以确定所要操作的存储器的类型、数据地址产生单元和CPU的控制信号等信息;④DAGEN在数据地址总线DAB或同时在数据地址总线CAB上输出读操作数的地址,同时更新间接寻址模式中的辅助寄存器和堆栈指针(SP);⑤从数据总线DB和控制总线CB读操作数(读操作),同时在数据写地址总线(EAB)上装入写操作数的地址,对于映像寄存器,从存储器中读操作数,并从DB上将其写入选定的映像寄存器中;⑥从数据写总线(EB) 上写数据[2]。
在分析C54x DSP汇编代码时,为了方便盘查流水线冲突与优化代码,可以从功能上将流水线6个阶段归纳为两个顺序的阶段, 即“取指阶段”和“执行阶段”。在取指阶段, 主要是将指令取入指令寄存器(IR), 取指阶段包括预取指令、取指令、解码等阶段;在执行阶段, 主要是对解码指令的执行, 执行阶段包括访问、读与执行(写)等阶段。实际上,在取指阶段是对指令本身进行操作,并且此阶段的操作不去改写存储器等有关资源的内容,所以,一般情况下在取指阶段可以不用考虑其流水线冲突与代码优化的问题。但是,如果一个存储器块同时被映射在程序和数据空间,指令取指和操作数读会发生冲突,这要视存储器的具体配置确定;在执行阶段相关的操作比较多,要访问相关的寄存器、存储器等资源,比如地址(包括辅助寄存器和堆栈指针)更新、写存储器、读存储器等,此阶段容易出现流水线冲突的问题,存在优化程序代码的问题。
2.3 C54x流水线的存储器操作
3 流水线的冲突与优化
C54x DSP的片内存储器可以分为双访问存储器(DARAM)与单访问存储器(SARAM、ROM及DROM)。对于双访问存储器,C54x可以在一个单周期内对每个存储器块访问两次,前半周期第一次访问,后半周期再次访问。当流水线中的一条指令访问一个存储器块时,处于同一阶段的另-条指令可以无冲突地访问另一个块;处于流水线中不同阶段的两条指令,可以同时(单周期内两次分别)访问同-块。然而,如果两次访问是同时访问同一存储器块,就会有冲突。
对于单访问存储器,在一个单周期内只能对存储器访问一次。流水线中的指令同时访问不同的单访问存储器块不会发生冲突,即当处于流水线的一个阶段的一条指令访问一个存储器块时,另一条指令在同一个周期可以无冲突地访问另一存储器块。但是,如果同时访问同一存储器块就会发生冲突。
流水线可能会有冲突,有些冲突CPU可以自己调整,但有些操作需要通过调整程序代码来解决。在C5000 CCS下实现一个代码段,先将61H装入到累加器A中,然后再存入辅助寄存器AR2,并使用间接寻址方式将61H单元的内容(*AR2)装入到累加器B。在CCS的Simulator上运行该段代码(如图3所示,斜体部分为修改前部分),并得不到想要的数据。通过插入NOP指令,调整指令执行的时间,可以解决此代码的流水线冲突问题。依照流水线的各个阶段,解释如下:在①在执行时,②在访问阶段,③间接寻址模式中的堆栈指针(SP)同时更新;③在执行时,⑤在访问阶段,⑤间接寻址模式中的堆栈指针(SP)同时更新;⑥在执行时,⑦在读阶段,ar2是映像寄存器,从存储器中读出操作数,并从DB上其写入选定的映像寄存器ar2;⑧从数据写总线(EB)写数据到b寄存器。
4 结束语
DSP处理器专为应用数字信号处理设计,其内部结构有鲜明特点,代码按流水线方式执行,效率很高。在DSP工程的开发中,经常用到C语言与汇编语言的相互嵌套编程,目的还是为了提高代码的执行效率。通过对流水线的认识与了解,流水线中并行执行的指令有冲突的可能,CCS虽然具有优化代码的功能,但有些代码仍然需要手工调整。通过对C54x DSP冲突代码的调试,进一步了解了流水线的相关概念与规则。下一步,将在此基础上研究流水线的延迟。
参考文献
[1] 梁俊. TMS320C55x的指令流水线及其效率的提高[J]. 单片机与嵌入式系统应用,2003(05):11~13
[2] 彭启琮. DSP技术的发展与应用(M). 高等教育出版社,2009