一种vliw流水线的发射方法和装置的制作方法

文档序号:6423673阅读:190来源:国知局
专利名称:一种vliw流水线的发射方法和装置的制作方法
技术领域
本发明涉及处理器的流水线技术,尤其涉及一种超长指令字(VLIW, Very LongInstruction Word)流水线的发射方法和装置。
背景技术
目前,矢量处理器被广泛运用于数字信号处理,尤其是用在有线无线通讯基带调试。矢量处理器的一个最大特点是,它能每周(即每个时钟周期)对多个独立数据进行并行运算。矢量处理器的另一个特点是,它一般采用超长指令字(VLIW,Very Long InstructionWord)指令。每个VLIW指令中包含多个独立的微操作(Microop, Micro-operation),每个微操作代表了矢量流水线中的一个硬件操作。通过这种VLIW指令,矢量处理器可以每周并行的执行多个微操作。 如图I所示,为现有技术中一个典型的VLIW指令,VLIW指令包含了 n个微操作(Microop) Microop 1> Microop 2、 、Microop n,这n个微操作可以采用不同比特宽度来编码。以下举出三个最常见的流水线微操作载入(Load)微操作,即从内存提取数据,再将这些数据写入到寄存器文件(Register File)里;算术和逻辑单元(ALU, Arithmetic and Logic Unit)微操作,即从寄存器文件读取数据,再将这些数据送到ALU里进行运算,运算完之后再将结果写回到寄存器文件里;存储(Store)微操作,即从寄存器文件中读取数据,再将这些数据写回到内存里。在一个传统的矢量处理器中,当一个VLIW指令从指令内存里被提取进来时,它首先会在译码(DEC,decoding)阶里进行译码。当译码完成后,该VLIW指令中所包含的多个可并行的微操作一般都是在下一周(或在短期内)并行发射。图2显示了一个传统VLIW流水线的操作时序图,在该VLIW流水线中只有三个微操作Load、ALU和Store微操作。其中,VLIff指令在第I和第2阶(R)和Fl阶)从指令内存里提取数据;在第3和第4阶(DO和Dl阶)完成译码;紧接着,VLIff指令中所包含的三个微操作(Load、ALU和Store)都在第五阶并行发射。其中,Load微操作需要五周来完成,ALU微操作需要六周来完成,Store微操作需要三周来完成,即LoacUALU和Store微操作分别会在第9阶、第10阶、第7阶完成执行。在这种传统的矢量处理器中,如果有两个微操作之间存在“数据依赖性(datadependency) ”或“数据相关性”,有依赖性的微操作必须要等到被依赖的微操作完成运算之后才能开始执行(或才能开始发射)。为了遵守这种数据相关性,硬件通常在流水线中自动加插气泡,但是这种做法通常都会降低流水线的使用率。另一种解决方法是,让编译器将这两个相关的微操作编码进两个不同的VLIW指令里,且这两个VLIW指令之间必须保持一个适当的时间距离,以确保被依赖的微操作完全结束执行后才让有依赖性的微操作开始执行。这个时间距离是按照被依赖微操作的执行时间长短来确定的。例如,三个有依赖性的微操作Load、Add和Store,其数据相关性描述如下Add需要Load所读取到的数据,Store又需要Add所得到的结果。因此,Add微操作必须等Load微操作执行完毕之后(数据写入到寄存器文件),才能从寄存器文件中读取数据;store微操作必须等到Add微操作运算完毕,将结果写回到寄存器文件之后,才能开始执行。即这三个微操作形成一个串联的相关性Load — Add — Store。 假设Load微操作需要五周时间执行,Add微操作需要六周时间执行,Store微操作需要三周时间执行,那么这三个相关微操作的执行代码是I、load a0, v0 ; //v0 = memory[aO];2、<其他指令组1> ; Il这些指令将执行4周3、add vl, v0, v0 ;//vl = vO+vO ;
4、く其他指令组2> ; Il这些指令将执行5周5、store al, vl ; //memory[aIJ = vl。在以上举例中,〈其他指令组1>将必须执行四周,因此当Add微操作发射吋,Load微操作刚好执行完毕;〈其他指令组2>将必须执行五周,因此当Store微操作发射吋,Add微操作刚好执行完毕。由此可以看出,这三个微操作在编译时的相对排序取决于流水线的架构和设计(即取决于Load和Add微操作的执行延时),当Load和Add微操作的执行延时发生改变时,代码也必须重新编译。另外,传统的VLIW指令流水线的汇编代码的可读性较差。例如假设需要执行ー连串的Load-Add-Store微操作,按照前述的Load和Add执行延时,汇编代码如下I、load aO, v4 ;add v3, v2, v4 ;store al, v3 ;2、load aO, v4 ;add v3, v2, v4 ;store al, v3 ;3、load aO, v4 ;add v3, v2, v4 ;store al, v3 ;4、load aO, v4 ;add v3, v2, v4 ;store al, v3 ;5、load aO, v4 ;add v3, v2, v4 ;store al, v3 ;6、load aO, v4 ;add v3, v2, v4 ;store al, v3 ;7、load aO, v4 ;add v3, v2, v4 ;store al, v3 ;8、load aO, v4 ;add v3, v2, v4 ;store al, v3 ;9、load aO, v4 ;add v3, v2, v4 ;store al, v3 ;10、load aO, v4 ;add v3, v2, v4 ;store al, v3 ;11、load aO, v4 ;add v3, v2, v4 ;store al, v3 ;12、load aO, v4 ;add v3, v2, v4 ;store al, v3 ;13、load aO, v4 ;add v3, v2, v4 ;store al, v3 ;在上述代码中,第I行的Load、第6行的Add、第12行的Store形成ー连串相关的微操作;第2行的Load、第7行的Add、第13行的Store形成另ー连串相关的微操作;等等。类似这种相关微操作在汇编代码里不是很直观,代码的可读性较差。再有,当程序里需要启用循环体时,这种传统的VLIW指令流水线的汇编代码的代码空间也会比较大。例如,假设需要执行以下矢量加法运算A[i] = B[i]+C[i] ;i = 0, ,n_l (I)其中,n是矢量A、B、C的长度,即矢量A、B、C的单元数目;另外,还假设矢量流水线中有m个运算単元,即该流水线每周可以进行m个加法;每个矢量寄存器可以存储m个数据;每个Load指令能从内存里提取m个数据;每个Store指令能往内存写回m个数据;且11能被m整除、S卩p = n/m。因此,上述矢量加法运算⑴将需要执行2p个Load微操作(提取矢量B和C)、p个Add微操作、p个Store微操作(写回矢量A)。矢量加法运算(I)的代码模型如图3所示。在此代码模型中,aO、al、a2为地址寄存器,它们分别是用做矢量B、C、A的地址指针;v0、vl、v2为矢量寄存器,它们分别用来保存矢量B、C、A的数据。由于每个矢量寄存器可存放m个数据,因此代码中,第一行的Load微操作从内存里提取了矢量B的m个数据,加载到矢量寄存器vO ;第二行的Load微操作从内存里提取了矢量C的m个数据,加载到矢量寄存器vl ;第七行的Add微操作将v0 、vl加起来,写入到v2里;第十三行的Store微操作将v2里的m个数据写回到内存里。以上这一连串四个微操作完整的处理了矢量加法(I)中的m个数据,矢量加法(I)总共需要p = n/m个这种操作。由于Load微操作需要五周来完成,第一行和第二行Load微操作进来的数据必须等到第七行才能执行Add微操作;由于Add微操作需要六周来完成,第七行Add微操作所产生的结果必须等到第十三行才能写回,因此其相对应的Store微操作必须等到第十三行才能开始执行;store微操作在第十三行出现后,第十二和十三行就可以形成一个循环体;由于在循环体开始执行之前已经执行了三个Add微操作,因此该循环体只需要执行n/m-3次;循环体在执行最后一次折叠时,第十二和十三行的Load微操作读进来的数据必须等到第十七行才能执行Add微操作,而该Add微操作所产生的结果必须等到第二十三行才能执行Store微操作。由此可以看出,在上述举例中,该传统VLIW流水线需要二十三行的代码才能实现一个矢量加法(I),传统VLIW流水线的发射模型的代码可读性较差,且代码占用空间也较大。

发明内容
有鉴于此,本发明的主要目的在于提供一种VLIW流水线的发射方法和装置,以解决传统的VLIW流水线的发射,其发射模型的汇编代码的可读性差、代码空间大的问题。为达到上述目的,本发明的技术方案是这样实现的本发明提供了一种超长指令字流水线的发射方法,该方法包括将具有数据依赖性的微操作和其所依赖的微操作封装在相同的超长指令字(VLIff)指令中;将所述VLIW指令中有依赖性的微操作相对于其所依赖的微操作延迟发射。所述有依赖性的微操作相对于其所依赖的微操作延迟发射的时间,是依据其所依赖的微操作的执行延迟来确定。所述有依赖性的微操作相对于其所依赖的微操作延迟发射的时间,大于或等于其所依赖的微操作执行所需的时钟周期。所述具有数据依赖性的微操作包括载入(Load)微操作、算术和逻辑单元(ALU)微操作和存储(Store)微操作,其中,所述ALU微操作依赖于所述Load微操作,所述Store微操作依赖于所述ALU微操作。
所述VLIW指令中的ALU微操作相对于Load微操作延迟发射,所述VLIW指令中的Store微操作相对于ALU微操作延迟发射。本发明还提供了一种超长指令字流水线的发射装置,该装置包括VLIW指令封装模块和发射模块,其中,所述VLIW指令封装模块,用于将具有数据依赖性的微操作和其所依赖的微操作封装在相同的VLIW指令中;所述发射模块,用于将所述VLIW指令中有依赖性的微操作相对于其所依赖的微 操作延迟发射。所述有依赖性的微操作相对于其所依赖的微操作延迟发射的时间,是依据其所依赖的微操作的执行延迟来确定。所述有依赖性的微操作相对于其所依赖的微操作延迟发射的时间,大于或等于其所依赖的微操作执行所需的时钟周期。所述具有数据依赖性的微操作包括=Load微操作、ALU微操作和Store微操作,其中,所述ALU微操作依赖于所述Load微操作,所述Store微操作依赖于所述ALU微操作。所述VLIW指令中的ALU微操作相对于Load微操作延迟发射,所述VLIW指令中的Store微操作相对于ALU微操作延迟发射。本发明所提供的ー种VLIW流水线的发射方法和装置,将具有数据依赖性的微操作和其所依赖的微操作封装在相同的VLIW指令中;将VLIW指令中有依赖性的微操作相对于其所依赖的微操作延迟发射。通过本发明,其VLIW流水线的发射模型的汇编代码的可读性强、代码空间小,从而代码开发周期短、代码开发效率得到显著提高,且代码质量和代码维护性也能得到显著提高。


图I为现有技术中ー个典型的VLIW指令的示意图;图2为现有技术中VLIW流水线的操作时序图;图3为现有技术中矢量加法(I)的代码模型示意图;图4为本发明ー种VLIW流水线的发射方法流程图;图5为本发明实施例中VLIW流水线的操作时序图;图6为本发明实施例中矢量加法(I)的代码模型示意图;图7为本发明实施例中矢量加法(2)的代码模型示意图。
具体实施例方式下面结合附图和具体实施例对本发明的技术方案进ー步详细阐述。为解决传统的VLIW流水线的发射,其发射模型的汇编代码的可读性差、代码空间大的问题,本发明所提供的ー种VLIW流水线的发射方法,如图4所示,主要包括以下步骤步骤401,将具有数据依赖性的微操作和其所依赖的微操作封装在相同的VLIW指令中。步骤402,将VLIW指令中有依赖性的微操作相对于其所依赖的微操作延迟发射。
现有技术中,当一个VLIW指令完成译码后,其中的微操作通常都是马上发射的;如果微操作之间具有相关性(或称依赖性),硬件可以自动加插气泡,或者将这些微操作编译到不同的VLIW指令里。而在本发明的VLIW发射模型中,具有数据依赖性的微操作中被依赖的微操作在完成译码后并不马上发射,而是随着流水线流下去;即有依赖性的微操作相对于其所依赖的微操作延迟发射,且其有依赖性的微操作相对于其所依赖的微操作延迟发射的时间,是依据其所依赖的微操作的执行延迟来确定的,需要大于或等于其所依赖的微操作执行所需的时钟周期。矢量处理器中最常见的流水线操作包括Load微操作、ALU微操作和Store微操作,其中,ALU微操作依赖于Load微操作,Store微操作依赖于ALU微操作。那么,本发明中的矢量处理器需要支持以下两种相关性=Load微操作到ALU微操作的相关性、ALU微操作到Store微操作的相关性。假设Load微操作需要执行五个时钟周期来完成,那么VLIW指令中的ALU微操作 相对于Load微操作需要至少延迟五个时钟周期发射。假设ALU微操作需要执行六个时钟周期来完成,那么VLIW指令中的Store微操作相对于ALU微操作需要至少延迟六个时钟周期发射。以具有相关性的Load微操作、ALU微操作(以add微操作为例)和Store微操作为例,VLIff流水线的操作时序如图5所示。与图2所示的传统VLIW流水线的操作时序相t匕,本发明实施例的VLIW指令也是在第I和第2周的流水阶(R)和Fl阶)从指令内存里提取数据,该指令也是在第3和第4周的流水阶(DO和Dl阶)完成译码。不同的是,在第五周的流水阶,只有Load微操作发射,其他两个微操作(add和Store)都不马上发射,它们将沿着指令流水线流继续流下去。其中,add微操作将一直延迟到第十周才发射(等Load已完成之后才发射),Store微操作将一直延迟到第十六周才发射(等add已完成之后才发射)。也就是说,在图5所示的发射模型下,VLIW指令中的三个微操作(Load、ALU、Store)会在流水线中不同但是固定的流水阶发射。如图6所示,图6示出了采用本发明实施例的VLIW流水线的发射模型,实现以下矢量加法(I)的代码模型A[i] = B[i]+C[i] ;i = 0, ,n_l (I)在图6所示的代码模型中,第一行的Load下载矢量B数据进入v0,第二行的Load下载矢量C数据进入vl ;第二行的add延迟发射,其将会等到同一行的Load完成以后才发射,从而会将这两个Load的数据加起来;同样的,第二行的Store也是延迟发射,其将会等到同一行的add完成以后才发射,从而会将add的结果写回到内存里。由此可以看出,图3和图6实现同样的矢量加法(I),但是图3所示的发射模型用了二十三行代码,而图6所示的发射模型则只用了两行代码。在此实施例中,传统发射模型的代码空间要比本发明实施例发射模型的代码空间大出十倍。此外,比较图3和图6所示的代码模型,后者的可读性要强很多,从矢量运算到图6所示的汇编代码的投影是一个很直观的过程。再如图7所示,图7示出了采用本发明实施例的VLIW流水线的发射模型,实现以下矢量加法(2)的代码模型
A[i] = B[i]*C[i]+D[i]*E[i] ;i = 0, ,n_l (2)在图7所示的代码模型中,a0、al、a2、a3、a4分别为矢量B、C、D、E和A的地址指针;v0、vl、v3、v4、v5分别为存储矢量B、C、D、E和A数据的寄存器;第一和第二行代码完成了 v2 = B[i]*C[i]的运算;第三和第四行代码完成了 v5 = D[i]*E[i]+v2以及A[i]=v5(即数据写回内存的Store微操作)的运算。假设矢量流水线中有m个运算単元,那么图7所示的循环体需要折叠n/m次。对应上述VLIW流水线的发射方法,本发明还提供了 ー种VLIW流水线的发射装置,包括VLIW指令封装模块和发射模块。VLIW指令封装模块,用于将具有数据依赖性的微操作和其所依赖的微操作封装在相同的VLIW指令中。发射模块,用于将VLIW指令中有依赖性的微操作相对于其所依赖的微操作延迟发射。其中,有依赖性的微操作相对于其所依赖的微操作延迟发射的时间,可以依据其所依赖的微操作的执行延迟来确定的,大于或等于被依赖的微操作执行所需的时钟周期。

较佳的,常见的具有数据依赖性的微操作包括Load微操作、ALU微操作和Store微操作,其中,所述ALU微操作依赖于所述Load微操作,所述Store微操作依赖于所述ALU微操作;那么,VLIff指令中的ALU微操作相对于Load微操作延迟发射,VLIff指令中的Store微操作相对于ALU微操作延迟发射。综上所述,本发明的VLIW流水线发射模型,其汇编代码的可读性强、代码空间小,从而代码开发周期短、代码开发效率得到显著提高,且代码质量和代码维护性也能得到显著提高。另外,本发明封装在同一个VLIW指令中的微操作既可以是具有相关性的,也可以是不具有相关性的,例如,以下封装在同一个VLIW指令中的微操作就不具有相关性load aO, v0 ;add v2, v3, v4 ;store al, v5如果封装在同一个VLIW指令中的微操作具有相关性,那么需要按照上述本发明的VLIW流水线的发射方法进行发射。以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。
权利要求
1.一种超长指令字流水线的发射方法,其特征在于,该方法包括 将具有数据依赖性的微操作和其所依赖的微操作封装在相同的超长指令字(VLIW)指令中; 将所述VLIW指令中有依赖性的微操作相对于其所依赖的微操作延迟发射。
2.根据权利要求I所述超长指令字流水线的发射方法,其特征在于,所述有依赖性的微操作相对于其所依赖的微操作延迟发射的时间,是依据其所依赖的微操作的执行延迟来确定。
3.根据权利要求2所述超长指令字流水线的发射方法,其特征在于,所述有依赖性的微操作相对于其所依赖的微操作延迟发射的时间,大于或等于其所依赖的微操作执行所需的时钟周期。
4.根据权利要求1、2或3所述超长指令字流水线的发射方法,其特征在于,所述具有数据依赖性的微操作包括载入(Load)微操作、算术和逻辑单元(ALU)微操作和存储(Store)微操作, 其中,所述ALU微操作依赖于所述Load微操作,所述Store微操作依赖于所述ALU微操作。
5.根据权利要求4所述超长指令字流水线的发射方法,其特征在于,所述VLIW指令中的ALU微操作相对于Load微操作延迟发射,所述VLIW指令中的Store微操作相对于ALU微操作延迟发射。
6.一种超长指令字流水线的发射装置,其特征在于,该装置包括VLIW指令封装模块和发射模块,其中, 所述VLIW指令封装模块,用于将具有数据依赖性的微操作和其所依赖的微操作封装在相同的VLIW指令中; 所述发射模块,用于将所述VLIW指令中有依赖性的微操作相对于其所依赖的微操作延迟发射。
7.根据权利要求6所述超长指令字流水线的发射装置,其特征在于,所述有依赖性的微操作相对于其所依赖的微操作延迟发射的时间,是依据其所依赖的微操作的执行延迟来确定。
8.根据权利要求7所述超长指令字流水线的发射装置,其特征在于,所述有依赖性的微操作相对于其所依赖的微操作延迟发射的时间,大于或等于其所依赖的微操作执行所需的时钟周期。
9.根据权利要求6、7或8所述超长指令字流水线的发射装置,其特征在于,所述具有数据依赖性的微操作包括=Load微操作、ALU微操作和Store微操作, 其中,所述ALU微操作依赖于所述Load微操作,所述Store微操作依赖于所述ALU微操作。
10.根据权利要求9所述超长指令字流水线的发射装置,其特征在于,所述VLIW指令中的ALU微操作相对于Load微操作延迟发射,所述VLIW指令中的Store微操作相对于ALU微操作延迟发射。
全文摘要
本发明公开了一种超长指令字(VLIW)流水线的发射方法和装置,方法包括将具有数据依赖性的微操作和其所依赖的微操作封装在相同的VLIW指令中;VLIW指令中有依赖性的微操作相对于其所依赖的微操作延迟发射。通过本发明,使得VLIW流水线发射模型的汇编代码的可读性强、代码空间小。
文档编号G06F9/38GK102768623SQ20111011666
公开日2012年11月7日 申请日期2011年5月6日 优先权日2011年5月6日
发明者保罗帕瓦旺萨克, 黎立煌 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1