一种基于超长指令字专用指令集处理器的汇编器设计方法

文档序号:6399440阅读:202来源:国知局
专利名称:一种基于超长指令字专用指令集处理器的汇编器设计方法
技术领域
本发明属于计算机微处理器技术领域,更进一步涉及到微处理器汇编器中的一种基于超长指令字结构的专用指令集处理器汇编器的设计方法,该方法设计的汇编器不仅可以完成传统汇编器的基本功能,还可以实现编译器部分的寄存器重命名和指令调度,提高指令级并行性。
背景技术
专用指令集处理器技术ASIP是在专用集成电路和现场可编程门阵列技术中发展出来的一种全新的电路设计技术。其核心思想是针对某一种类型的应用领域,开发出一套量身定做的专用的微处理器指令集以及实现该指令集的微处理器体系结构。采用专用指令集处理器技术具有以下优点:以现场可编程门阵列为实现载体,而现场可编程门阵列具有可实现的电路规模大、片内资源丰富及可重配置等特性,特别是采用现场可编程门阵列可以相对容易地在单个芯片中集成多个专用指令集处理器处理单元,以专用指令集处理器阵列结构形式实现完全并行的高速信号处理,提高信号处理速度;另外,专用指令集处理器是可编程的,即在专用指令集处理器的电路基础上,算法通过软件编程就可以实现,因此在不需要重新设计电路的情况下可以方便的实现许多其他信号处理算法,例如快速傅里叶变换FFT、有限脉冲响应FIR(Finite Impulse Response)、无限脉冲响应 IIR(Infinite ImpulseResponse)、矩阵求逆等等,给设计带来了很大的方便性和灵活性。总之,专用指令集处理器系统既具有专用集成电路系统的性能优势,又具有数字信号处理的可编程性能,设计灵活方便,具有很好的升级性和移植性,在数字信号处理领域有了广泛的应用。通过权衡速度、功耗、成本、灵活性等多个方面的设计约束,设计者可以定制专用指令集处理器以达到最好的平衡点,从而适应嵌入式系统的需要。因而专用指令集处理器在嵌入式领域具有良好的应用前景。专用指令集处理器设计需要面对多种类型的应用定制最优的体系结构,应用多样性和设计时效性是迫切需要解决的问题。超长指令字VLIW(Very Long Instruction Word)米用超长指令字控制的方法,利用指令级并行的概念形成的。所谓超长指令字,是把两条或两条以上可以并行执行的指令打包成一条较长的指令字,该过程一般是由编译软件完成。当这些指令字从程序存储器中取出放到处理器中时,它们被分解成几条简单的指令,这些简单的指令被分派到一些独立的功能单元去执行。因此,多个功能单元并行工作,所有的功能单元共享共用一个寄存器文件。超长指令字VLIW处理器主要的优点是显式并行指令控制EPIC (Explicit ParallelismInstruction Control) 0由处理器的超长指令字显式表明并行操纵,不需要微处理器内部复杂的指令调度,从而简化了微处理器的控制部件,降低了硬件复杂度。这样,VLIW处理器就需要一个高效的编译软件,其采用指令调度来打包可以并行执行的指令。因此,如何设计一个高性能的编译软件是VLIW设计的难点所在。VLIW结构有效地开发指令级并行性(Instruction Level Parallelism, ILP),提高了处理器的性能。由于VLIW处理器具有面向数据流的处理和指令级并行性的优势,能有效地减少数字信号处理的复杂性,无疑将成为媒体处理器设计领域的主流设计思想。目前面向超长指令字VLIW处理器的汇编器只是实现了将汇编语句翻译为目标代码(VLIW指令字的二进制代码)的工作,解决指令冲突的方法只是通过增加空VLIW指令来实现;而提高指令级并行的方法和技术都是由编译器实现的,这样不仅要设计汇编器,还要设计对应的编译器。对于专用指令集处理器ASIP,这不仅增加了设计人员的工作量,还增加了设计的实现周期。

发明内容
本发明的目的在于克服上述现有技术的不足,提出了一种能够提高指令级并行的面向基于超长指令字的专用指令集处理器ASIP的汇编器。本发明的技术方案是,通过在汇编器中设计寄存器重命名和指令打包及调度的功能,实现汇编器的改进,提高指令级并行性,所述寄存器重命名是在检测到指令中的写后写冲突之后,搜索空闲的寄存器替代指令中目的寄存器以消除写后写冲突,搜寻空闲的寄存器是通过建立、更新和检测寄存器状态表实现的;所述指令打包及调度设计同时执行,汇编器在打包指令的同时,检测指令间的冲突,通过指令调度调整指令的执行顺序消除指令冲突以提高打包效率,指令打包及调度设计包括程序分段、段内指令打包及调度、段间指令冲突检测及调整、跳转指令标号匹配、跳转指令冲突检测及调整和跳转指令标号重新匹配。程序分段根据跳转指令和目标标号分段,程序分段既保证跳转指令前后指令的执行顺序,又可以使段内的指令调度不再受跳转指令的限制;段内指令打包及调度将各程序段中位置相近并且不存在冲突的指令打包成一条VLIff指令;如果打包过程中存在指令冲突,跳过该冲突的指令继续搜索,找到与搜索到指令都不存在冲突的指令,将搜索到指令插入到当前位置并跟冲突之前的指令打包成一条VLIW指令;如果直到程序段结束也不存在冲突的指令,就在当前位置插入空“N0P “指令;段间指令冲突检测及调整是检测相邻程序段首尾连接部分VLIW指令间的冲突,如果存在冲突,直接在段头插入空(NOP) VLIW指令;跳转指令标号匹配将跳转指令和目标指令连接起来,以便生成跳转指令的二进制代码中的目标地址或偏移量,及检测跳转指令与目标指令的VLIW指令间冲突;跳转指令冲突检测及调整是检测跳转指令和目标指令是否存在VLIW指令间的冲突,如果存在冲突,直接在目标地址的指令前插入空(NOP) VLIW指令;跳转指令标号重新匹配是在完成跳转指令冲突检测并调整之后,将跳转指令和目标指令重新连接起来。本发明与现有技术相比具有以下优点:第一、本发明利用寄存器重命名消除指令中的写后写冲突,利用指令调度调整指令的执行顺序以消除指令冲突,可以在汇编阶段增加指令的并行度,提高指令级并行性。第二、在本发明的基础上,可以采用普通RISC处理器编译器的设计方法来进行基于超长指令字的专用指令集处理器的专用编译器的设计,从而大大提高其设计效率,极大地扩展了基于超长指令字的专用指令集处理器的应用领域。第三、本发明运用专用指令集处理器ASIP中,对于某种特定的情况如快速傅里叶变换FFT、有限脉冲响应FIR滤波器,具有较强的针对性,可以更加有效的实现系统的功能。


图1为本发明汇编器的寄存器重命名编程流程;图2为本发明汇编器的指令打包及调度的整体流程;图3为本发明汇编器的段内指令打包及调度的整体流程。
具体实施例方式本发明的技术方案是,在汇编器处理过程中设计寄存器重命名和指令打包及调度。该汇编器设计是在汇编器完成了传统的词法分析、语法分析、语义分析、出错处理之后,目标代码生成之前加入了可以提高指令级并行性的寄存器重命名和指令打包及调度。下面结合附图对本发明做进一步的详细描述。实施例1:寄存器重命名流程参照图1,实施寄存器重命名需要进行指令写后写冲突检测,如果发现了指令中存在写后写冲突,查看是否存在空闲的寄存器并判断该空闲寄存器在替换这些指令中存在冲突的寄存器期间是否都是空闲的,如果存在空闲的寄存器并且一直处于空闲状态,就可以利用寄存器重命名来消除写后写冲突。某个寄存器从最后一次被调用到重新被赋值,这期间都是空闲的,可以被用来重命名。如何判断一个寄存器是否空闲的呢?对于这个问题我们建立一个寄存器状态表,把寄存器在不同的指令间的使用状况进行分析了建立的一个状态表。当碰到了需要重命名的寄存器即存在写后写冲突的寄存器时,就可以查找这个状态表判断是否存在空闲的寄存器。由于寄存器重命名会改变寄存器状态,因此在每次需要进行寄存器重命名之前,都需要更新这个寄存器状态表。假设用“ I ”来表示寄存器忙碌,用“0”来表示寄存器空闲,可以用一组二进制数来表示可以重命名的寄存器。这样,每行指令都对应一个寄存器状态,整个程序就形成了一个寄存器状态表。通过检测这个状态表,就可以判断是否存在空闲寄存器。例如:Id grO, #0 ;......— grO 忙碌 Iadd grl, grO ;......— grO 忙碌 IId gr2, grO ;......— grO 空闲 0Inot grO, gr3 ;由于在寄存器重命名时,需要替换的寄存器的位置不止一个,还需要替换指令中所有用到这个寄存器当前值(寄存器的值保持不变)的位置,所以空闲寄存器不仅在当前指令是空闲的,还要在所有替换寄存器的位置也是空闲的。假设超长指令字VLIW处理器一次可以运行四条指令,这就需要对某条指令后面的三条指令进行写后写冲突WAW的判断。例如:Id grl, grO ;add gr2, grl ;Id grl, #2 ;
......
Id gr3, grl ;Id grl, gr4 ;第一条指令和第三条指令存在写后写冲突,扫描指令“Id grl, #2 ; ”之前的寄存器状态表寻找空闲的寄存器比如gr30,并且这个寄存器一直处于空闲状态。那么用寄存器gr30替换指令“Id grl, #2 ; ”和“Id gr3, grl ; ”之间所有的寄存器grl,而指令“ Id grl,gr4 ; ”中的寄存器grl不必替换,因为它已经被重新赋值了。实施例2:指令打包及调度设计方法在指令打包及调度过程中,跳转指令前后指令的执行顺序是需要被保护的,这种保护主要通过下面两种方式:在跳转指令之前出现的指令不能被放到跳转指令之后执行;在跳转指令之后出现的指令不能被放到跳转指令之前执行。对于跳转指令前后指令执行顺序的保护,主要通过程序分段的方式,保证指令正确的执行顺序。整个程序的指令打包及调度的流程如图2所示。首先对整个程序根据跳转指令和目标标号进行分段,程序分段后段内的指令调度不再受跳转指令的限制;然后对每个段内指令进行打包及调度,此时需要注意处理器VLIW指令内及VLIW指令间冲突和部分指令执行顺序,保证程序的功能不会改变;再检测相邻程序段首尾连接部分是否存在V LIff指令间的冲突(这根硬件实现有关),如果存在冲突,插入几条空(NOP) VLIW指令消除冲突;再进行跳转指令标号的匹配,将跳转指令和目标指令连接起来,以便跳转指令的二进制代码中的目标地址或偏移量的生成和跳转指令与目标指令冲突检测;再检测跳转指令和目标指令是否存在V LIW指令间的冲突,如果存在冲突,同样插入几条空(NOP) VLIW指令消除冲突;最后进行跳转指令标号的重新匹配,将消除冲突之后的VLIW指令程序中的跳转指令和目标指令重新匹配,这个过程和上面的跳转指令标号的匹配是相同的。步骤1:把用户编写的整个功能程序分成多个段落,对每个段内指令进行打包、冲突检测和指令调度。将程序分段的目的是程序分段后段内的指令调度不再受跳转指令的限制。程序分段的方法是根据跳转指令和目标标号把程序分开。需要注意的是,不同的指令和目标标号分段的方式是不同。例如条件跳转指令和循环指令跟它前面的指令分到同一个段中,程序暂停指令idle要单独分到一个段中,循环指令对应的目标指令要跟它前面的指令分到同一个段中,其它跳转指令对应的目标指令要跟它前面的指令分到不同的段中。步骤2:段内的指令打包及调度是在程序分段之后,在每个段内根据处理器的需要将若干条指令打包成一条VLIW指令并且不存在打包冲突,即VLIW指令内是和VLIW指令间都没有冲突。VLIW指令内冲突包括写后写冲突或写后读冲突;VLIW指令间的冲突跟微处理器硬件电路流水相关,某种指令操作流水级数越多受到该指令影响的VLIW指令就越多,例如乘法操作是3级流水,包含乘法操作的VLIW指令之后的两条VLIW指令都不能使用该乘法操作的结果。段内指令打包及调度流程如图3所示。段内的指令打包及调度的主要操作是将所有的指令都存放在一个双向的指令链表中,按顺序搜索指令,将各程序段中位置相近并且不存在冲突的指令打包成一条VLIW指令;如果打包过程中存在指令冲突,跳过该冲突的指令继续搜索找到与之前所有指令都不存在冲突的指令,将其插入的当前位置并跟冲突之前的指令打包成一条VLIW指令;如果直到程序段结束都也不存在冲突的指令,就在当前位置插入空(NOP)指令。其中,所谓的与之前所有指令都不存在冲突的指令是指该指令不仅不存在打包冲突还要与它之前所有的未打包的指令不存在数据冲突即写后写冲突、写后读冲突和读后写冲突。VLIW指令间的冲突跟微处理器硬件电路流水相关;指令调度将程序段中不存在冲突的指令提前更改指令顺序,提高指令级并行性。步骤3:段间指令冲突检测是检测相邻程序段首尾连接部分VLIW指令间的冲突,如果存在VLIW指令间冲突,根据冲突的不同类型插入若干条空(NOP) VLIW指令。这个过程不需要指令调度,这是由于所有的VLIW指令已经形成,倘若将各个VLIW指令进行冲突检测和调度,势必会影响本来已经形成VLIW指令顺序,可能会产生新的冲突。所述的段间指令冲突检测及调整阶段插入的空“NOP "VLIff指令数量与硬件流水级数相关。步骤4:跳转指令的二进制代码包含了目标地址或偏移量,必须检测出跳转指令和目标标号所在的位置。汇编器会把源程序中的跳转指令和目标标号所在的行号信息记录下来,然后可以根据记录下来的信息查找出这些的跳转指令和目标标号的行号,并把它们的标号进行逐一匹配。这样,我们就可以得到跳转指令和目标标号在打包后VLIW指令程序中的行号,进而就可以得到跳转的目标地址或偏移量信息。这个行号的匹配不仅在段间冲突检查和调整之后需要执行,还需要在跳转指令冲突检查和调整之后重新进行匹配,因为跳转指令和目标地址的指令之间也可能存在冲突,需要加入若干条空(NOP)VLIW指令。步骤5:由于跳转指令和目标指令之间也可能存在冲突,在上一个环节已经得到了在VLIW指令程序跳转指令和目标指令的行号,可以根据这些信息检查跳转指令和目标指令是否存在VLIW指令间的冲突。这里的冲突检查过程和段间冲突检查过程相似,不同的只是检查程序跳转指令和目的标号所在的行的指令是否存在冲突。步骤6:跳转指令标号重新匹配是在完成跳转指令冲突检测并调整之后,将跳转指令和目标指令重新连接起来,其过程与步骤4相同。经过对寄存器重命名和指令打包及调度的设计,在汇编阶段增加指令的并行度,提高指令级并行性;在本汇编器的基础上,可以采用普通RISC处理器编译器的设计方法来进行基于超长指令字的专用指令集处理器的专用编译器的设计,从而大大提高其设计效率,极大地扩展了基于超长指令字的专用指令集处理器的应用领域。
权利要求
1.一种基于超长指令字专用指令集处理器的汇编器设计方法,其特征在于,通过在汇编器中设计寄存器重命名和指令打包及调度的功能,实现汇编器的改进,提高指令级并行性,所述寄存器重命名是在检测到指令中的写后写冲突之后,搜索一直处于空闲的寄存器替代指令中目的寄存器以消除写后写冲突;所述指令打包及调度设计同时执行,汇编器在打包指令的同时,检测指令间的冲突,通过指令调度调整指令的执行顺序消除指令冲突,指令打包及调度设计包括程序分段、段内指令打包及调度、段间指令冲突检测及调整、跳转指令标号匹配、跳转指令冲突检测及调整和跳转指令标号重新匹配步骤; 步骤1:所述的程序分段根据跳转指令和目标标号分段,程序分段既保证跳转指令前后指令的执行顺序,又使段内的指令调度不再受跳转指令的限制; 步骤2:所述的段内指令打包及调度将各程序段中位置相近并且不存在冲突的指令打包成一条超长指令字“VLIW”指令;如果打包过程中存在指令冲突,跳过该冲突的指令继续搜索,找到与搜索到指令都不存在冲突的指令,将搜索到指令插入到当前位置并跟冲突之前的指令打包成一条VLIW指令;如果直到程序段结束也不存在冲突的指令,就在当前位置插入空“NOP “指令; 步骤3:所述的段间指令冲突检测及调整是检测相邻程序段首尾连接部分VLIW指令间的冲突,如果存在冲突,直接在段头插入空“NOP” VLIff指令; 步骤4:所述的跳转指令标号匹配是将跳转指令和目标指令连接起来,以便生成跳转指令的二进制代码中的目标地址或偏移量,及检测跳转指令与目标指令的VLIW指令间冲关; 步骤5:所述的跳转指令冲突检测及调整是检测跳转指令和目标指令是否存在VLIW指令间的冲突,如果存在冲突,直接在目标地址的指令前插入空“NOP “VLIW指令; 步骤6:所述的跳转指令标号重新匹配是在完成跳转指令冲突检测并调整之后,将跳转指令和目标指令重新连接起来。
2.如权利要求1所述的一种基于超长指令字专用指令集处理器的汇编器设计方法,其特征在于,所述的寄存器重命名中搜寻空闲的寄存器是通过建立、更新和检测寄存器状态表实现的。
3.如权利要求1所述的一种基于超长指令字专用指令集处理器的汇编器设计方法,其特征在于,所述的指令打包及调度阶段打包过程中存在指令冲突包括VLIW指令内冲突和VLIW指令间冲突,VLIW指令内冲突包括写后写冲突、写后读冲突和读后写冲突;VLIW指令间的冲突跟微处理器硬件电路流水相关;指令调度将程序段中不存在冲突的指令提前更改指令顺序,提高指令级并行性。
全文摘要
本发明公开了一种基于超长指令字专用指令集处理器的汇编器设计方法,通过在汇编器中设计寄存器重命名和指令打包及调度的功能,实现汇编器的改进。本发明寄存器重命名在检测到指令中的写后写冲突后,搜索一直处于空闲的寄存器替代指令中目的寄存器以消除写后写冲突;所述指令打包及调度设计同时执行,汇编器在打包指令的同时,检测指令间的冲突,通过指令调度调整指令的执行顺序消除指令冲突,指令打包及调度设计包括程序分段、段内指令打包及调度、段间指令冲突检测及调整、跳转指令标号匹配、跳转指令冲突检测及调整和跳转指令标号重新匹配步骤。本发明提高了汇编器指令级并行性,极大地扩展了基于超长指令字的专用指令集处理器的应用领域。
文档编号G06F9/38GK103116485SQ201310054280
公开日2013年5月22日 申请日期2013年1月30日 优先权日2013年1月30日
发明者张犁, 宋云朋, 李森, 李甫, 石光明, 李钦鹏 申请人:西安电子科技大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1