精简指令集流水线结构的微控制器的指令定义方法

文档序号:6417365阅读:240来源:国知局

专利名称::精简指令集流水线结构的微控制器的指令定义方法
技术领域
:本发明涉及一种应用于微控制器(MCU)或中央处理器(CPU)等各种微控制器的指令定义方法,尤其涉及一种应用于精简指令集流水线结构的MCU或CPU的指令定义方法。目前已公之于世的大多数精简指令集流水线结构微控制器的指令长度为32位(请见参考文献1,2,3)。典型的指令定义如下表一所示。表一表一中各字段的意义如下。IT规定指令类型。例如IT=“00”表示数学运算类指令;IT=“01”表示逻辑运算类指令;IT=“10”表示位移或循环类指令;IT=“11”表示跳转类指令。OP规定操作码。例如OP=“000101”表示A-B;OP=“010001”表示A与B;OP=“000011”表示A+1。WR规定存放操作运算结果的地址,称为目标地址。RA规定操作数A的地址。RB规定操作数B的地址。已有技术的指令定义方案参见以下文献参考文献1.美国AT&amp;T的NeilH.E.Weste和KamramEshraghian的PrinciplesofCMOSVLSIDesign,1993。参考文献2.美国PrenticeHall的AdvancedRISCMachinesLtd.的ARMArchitecturalreferenceManual,1996。参考文献3.美国PrenticeHall的MarkGordonArnold的VerilogDigitalComputerDesign,AlgorithmsintoHardware,1999。参考文献4.美国IntelCorporation的MCS51Micro-controllerFamilyUser’sManual,1994。在复杂指令集微控制器中,指令的长度是可变的。例如,INTEL8051的指令可从8位到24位变化(参考文献4)。每条指令的执行在时间上不能与相邻指令重叠,执行各指令所需的时间也互不相同。但在精简指令集流水线结构微控制器中,每条指令的长度是一样的,执行时间也是一样的,在每一个时钟周期中,都有一条指令进入指令“流水线”,且都有一条指令从“流水线”中出来。所以,微控制器的执行速度是平均每个时钟周期执行一条指令(个别指令如跳转,读表等指令除外)。流水线结构的目的是提高执行速度。例如,如果执行一条指令平均所需的时间为1μs,若不采取流水线结构,则其执行速度为平均1条指令/1μs;如果采用5阶段的流水线结构,则其执行速度为平均5条指令/1μs。现以4阶段流水线为例来说明流水线结构微控制器的工作原理第一阶段,取指令阶段程序计数器提供一个地址给指令存储器;该存储器将输出一条与此地址对应的指令。该指令包含数学逻辑单元的操作码、操作数、操作数地址及目标地址等信息。第二阶段,读操作数阶段根据指令中所提供的操作数地址从随机存取存储器中读取相应的操作数,并将操作数加到数学逻辑单元的输入端。第三阶段,执行运算阶段数学逻辑单元执行操作码所规定的操作运算,并得出结果。第四阶段,写结果阶段将运算结果写入目标地址规定的存储单元中。上述四阶段流水线结构的操作可用表二来观察。表二在周期0,指令1在取指令阶段,此时指令1已从指令存储器中取出,在周期1,指令1移到读操作数阶段,根据指令中规定的地址,读取操作数A,B;此时,指令2进入取指令阶段。在周期2,指令1进入执行阶段,将操作码提供给数学逻辑单元并将执行规定的操作运算;指令2移到读操作数阶段;指令3进入取指令阶段。最后,在周期3,指令1进入写结果阶段,将数学逻辑单元的运算结果写入到目标地址规定的存储单元中。从上述流水线图表中,可以看到,指令2与3中的操作数正在或已被读取时,指令1的结果被写入到存储单元中。如果指令2与3在读操作数或执行指令的阶段需要用指令1的运算结果,那么指令1的运算结果就必须被提前传递到数学逻辑单元的输入端,否则,就会发生“数据灾难”(DATAHAZARD)或得到错误的结果。例如,若指令2要用指令1的结果,那么在周期3,指令1的结果在被写入存储器的同时必须被向前转送到指令2的执行阶段。(这种数据转送是通过下列方法来实现的将读操作数阶段和执行阶段的操作数地址或位置与写结果阶段的目标地址或位置进行比较,并用一组多路选择开关将适当的操作数据传递给数学逻辑单元。考虑下列程序片段SUBA,B,C----A-B,结果存放到CADDD,C,F----D+C,结果存放到F指令X指令Y上述程序片段的执行次序可用下表三的流水线图表来表示。表三<tablesid="table3"num="003"><table>周期取指令阶段读操作数阶段执行阶段写结果阶段0SUBA,B,C1ADDD,C,FSUBA,B,C2指令XADDD,C,FSUBA,B,C3指令Y指令XADDD,C,FSUBA,B,C</table></tables>在上表三的周期3中,A-B的结果被写入C。可是在执行阶段,C却被用来计算D+C。因此,正常的读操作数路径必须被绕开,并必须将写结果阶段中的C值传递到执行阶段的数学逻辑单元的输入端。否则,就得不到预期的结果。在复杂指令集微控制器中,由于相邻指令的执行在时间上是互不重叠的,即在当前这条指令执行完毕之后,下一条指令才被从指令存储器中取出并开始执行,但在精简指令集流水线结构微控制器中,由于相邻指令的执行在时间上是相互重叠的,如果某一条指令的操作数是相邻前一条或二条指令的执行结果(这种情况称为数据相关),那么就必须将这一个结果向前传递到执行阶段;否则,就会发生所谓的“数据灾难”(datahazard),也就不可能得到期望的运算结果。为了实现各阶段之间数据的正确传递,需要将读操作数阶段的指令和执行阶段的指令中的操作数地址与写结果阶段的指令中的目标地址进行比较;然后用比较的结果所产生的信号来控制一组多路选择开关,从而将适当的操作数传送到数学逻辑单元的数据输入口。为了准确无误地实现这种数据传递,在指令定义中,必须设法严格区别操作数地址与目标地址。即,普遍采用的方法就是表一所示的定义方法,即分别利用不同的指令定义区域来规定操作数地址与目标地址。本发明的目的在于通过一种简化的指令定义方法来缩短采用传统指令定义方法的指令的长度,但仍可完全实现与传统指令相同的功能。本发明提供了一种新的精简指令集流水线结构微控制器的指令定义方法,该方法利用三个指令定义区域,其中用同一指令定义区域来规定立即数、操作数地址或目标地址,用另一指令定义区域来规定不同操作运算的操作码,以及用还有一个指令定义区域来规定用于识别指令中的操作数地址或位置及目标地址或位置从而控制精简指令集流水线结构中流水线各阶段之间的数据传递的识别控制码。依据本发明的一个方面,提供了一种用于精简指令集流水线结构的微控制器的指令定义方法,其指令长度包括17位,比上述指令定义少了15位,其中把指令中的三位作为识别指令中的操作数地址或位置及目标地址或位置从而控制所述精简指令集流水线结构中流水线各阶段之间的数据传递的识别控制码;把该指令中的八位作为指令所执行的立即数、操作数地址或目标地址;以及把该指令中的六位作为规定不同操作运算的操作码。本发明提出的精简指令流水线结构微控制器的指令定义将指令长度从原来的32位缩短为17位而且不必区别操作数地址与目标地址,这样既缩短了指令长度又完全可以实现同样的功能。因而,缩小了指令存储器的面积,继而可缩小微控制器芯片的面积。实际上,指令存储器的面积可以缩小47%。图1是示出依据本发明的指令定义方法的原理的示意图。图2是采用依据本发明方法的精简指令集流水线结构微控制器的方框图。从以下详细描述并结合附图将使本发明的目的和优点变得更加明显起来。在下表四中,指令中的低8位(第0位到第7位)既可以用来定义立即数、操作数地址,也可以用来定义目标地址;中间6位(第8位到第13位)为操作码,规定CPU的不同操作运算;最高3位(第14位到第16位)为识别控制码,用来识别指令中操作数地址或位置及目标地址或位置,从而准确控制流水线各阶段之间的数据传递。为了清楚,以下用表四的指令格式为例来描述本发明的指令定义方法,但本领域内的技术人员应理解,不应把此作为对本发明的限制。表四在表四中,当第16位为‘1’时,表示有一个操作数从累加器中读出;当第16位为‘0’时,表示没有操作数来自累加器;当第15位为‘1’时,表示有一个操作数从RAM(随机存取存储器)中读取;当第15位为‘0’时,表示没有操作数从RAM中读取。当第14位为‘1’时,表示写结果的目标是RAM,当第14位为‘0’时,表示写结果的目标是累加器A。根据第14到第16这三位信号在流水线中不同阶段的不同组合,并通过比较指令中低8位在流水线中不同阶段的数值,就可以准确判别相邻指令的数据是否相关,从而实现流水线中各阶段之间数据的正确传输。当然,上述三位还可以用不同的方式来规定,但为了清楚,以下采用此规定来描述本发明。现在参考图1来说明本方法的工作原理。在图1中,长度为17位的指令向量1经指令译码器2译码后输出各种不同的微代码向量。其中微代码向量3是地址(指令的最低八位),分别输给随机存取存储器10(作为数据读出地址)和数据相关判别电路11。在数据相关判别电路11中,有二级地址寄存器,向量3首先进入第一级寄存器,然后输出给第二级寄存器。向量3在进入数据相关判别电路前是读探作数阶段的地址;经第一级寄存器后输出为执行阶段的地址;经第二级寄存器后输出为写结果阶段的地址。向量5是指令的最高三位(即第14位到第16位)。与向量3相似,向量5也要经过两级寄存器。根据向量5在不同阶段的信息并通过比较向量3在不同阶段的数值,再经过所需的逻辑组合,输出控制向量15。数据选择传递电路16根据控制向量15,从下列5个不同的输入数据中选出2个适当的数据并通过其输出端17及18传递给数学逻辑单元19(1)数学逻辑单元19的运算结果输出12;(2)累加器9的输出13;(3)写结果寄存器的输出7;(4)随机存取存储器10的数据输出14;(5)指令译码器2的输出向量4(立即数)。数学逻辑单元19根据输入操作数17、18及操作码24(相应于来自寄存器23的操作码6)所规定的运算操作类型,进行运算操作并输出操作结果12。本发明提出的精简指令集流水线结构微控制器的指令定义将指令长度从过去的32位缩短为17位而又具有实现原来所有功能的性质。与
背景技术
相比,本发明的最大好处是大大地缩小了RAM中指令存储器的面积,从而降低了精简指令集流水线结构微控制器芯片的生产成本,而且产品的可靠性也随之提高。这样制造指令存储阵列的面积可以减少47%。本发明可应用于要求运算速度快、芯片面积小的精简指令集流水线结构微控制器。现以精简指令集流水线结构微控制器的方框图(图2)来说明其实现方式。以下参考图2,描述使用本发明的指令定义方法的精简指令集流水线结构微控制器各阶段的工作原理(1)取指令阶段(时钟周期0)程序计数器1根据控制单元7输出的控制信号6,输出指令地址2。指令存储器3根据地址2输出对应的指令向量4(指令长度为17位)。(2)读操作数阶段(时钟周期1)指令向量4经指令寄存器5后成为指令向量10(比指令向量4延迟一个时钟周期)。指令向量10经指令译码器11译码后输出各种不同的微代码向量(12、13、15和16)。根据这些微代码向量,读取相应的操作数。(3)执行阶段数学逻辑单元30根据操作控制码向量31对输入操作数28、29进行相应的运算,并将运算结果22输送给写结果寄存器18。(4)写结果阶段将存在写结果寄存器中的运算结果通过其输出端17写入随机存取存储器21或累加器20中。现说明本发明在精简指令集流水线结构微控制器中的应用实现工作原理。长度为17位的指令向量10经指令译码器11译码后输出微代码向量12、13、15、16。其中向量12为指令的最高三位(第14位到第16位),向量15为地址(最低8位)。向量16表示立即数,向量13为操作码(次高的6位)。向量12、15都进入数据相关判别电路25的输入端。在数据相关判别电路25中,有二级寄存器与两个地址比较器,两个地址比较器用来比较读操作数阶段地址与执行阶段地址,读操作数阶段地址与写结果阶段地址。向量12、15都要经过数据相关判别电路25中的二级寄存器。向量12、15在进入数据相关判别电路25之前,为读操作数阶段。数据相关判别电路25内第一级寄存器的输出为执行阶段地址;第二级寄存器的输出为写结果阶段地址。根据向量12在不同阶段的信息,并通过比较地址向量15在不同阶段的值,再经过所需的逻辑组合,数据相关判别电路25输出一个控制向量26。根据控制向量26,数据选择传递电路27从5个不同阶段、不同来源的输入数据中选出2个适当的数据并通过其输出端28、29,输送到数学逻辑单元30的输入端。数学逻辑单元30根据操作控制向量31,对输入数据28、29进行数学、逻辑、循环或移位等运算操作,并将运算结果22输送给写结果寄存器18与数据选择传递电路27。以下继续参考图2来描述本发明的两个具体实施例子。例一,考虑下列2条指令MOV[m1],AADDA,[m1]第一条指令的含义是将累加器A中的数据传送给以m1为地址的存储单元中。第二条指令执行A+[m1]运算并将结果送给累加器A。在此实例中,第二条指令的操作数[m1]是第一条指令的运算结果。当第二条指令处于读操作数阶段时,第一条指令处于执行阶段,后者的结果尚未写入以m1为地址的存储单元中,故第二条指令所需的操作数[m1]不能直接从该存储单元读出;因而必须将第一条指令的执行结果直接传送到数学逻辑单元30的输入端,从而在下一个时钟周期内,即当第二条指令处于执行阶段时,数学逻辑单元30的输入端能得到正确的操作数。这种正确的数据传递是通过数据相关判别电路25来实现的。首先,数据相关判别电路25中的地址比较器将第一条指令中的目标地址(执行阶段地址)与第二条指令中的操作数地址(读操作数阶段地址)进行比较,由于这两个地址是相同的,所以比较器输出‘1’信号,第一条指令的最高三位(第14到16位)信号为‘101’[第16位为‘1’表示有一个操作数是累加器A;第15位为‘0’表示没有操作数来自RAM;第14位为‘1’表示写结果的目标在RAM中]。第二条指令的最高三位信号为‘110’[第16位为‘1’表示有一个操作数来自累加器A;第15位为‘1’表示另一个操作数来自RAM;第14位为‘0’表示目标位置为累加器A]。根据比较器的输出信号与指令最高三位在不同阶段的信号,数据相关判别电路25输出相应的控制问量26。数据选择传递电路27根据控制向量26,将第一条指令的操作结果与累加器中的内容分别传送到数学逻辑单元30的输入端28、29进行ADD操作。例二,请看下列三条指令SUB[m1],ADEC[m2]ADDA,[m1]第一条指令的含义是以m1为地址的RAM单元中的数据与累加器中的数据相减,运算结果存在以m1为地址的RAM单元中。第二条指令所执行的运算是将以m2为地址的RAM单元中的数据减去1,运算结果存在以m2为地址的RAM单元中。第三条指令所执行的运算是累加器中的数据与以m1为地址的RAM单元中的数据相加,运算结果存在累加器中。在此实例中,第一条指令与第二条指令无数据相关;第二条指令与第三条指令也无数据相关,但第一条指令与第三条指令存在数据相关,因为第三条指令的操作数[m1]是第一条指令的操作结果。当第三条指令处于读操作数阶段时,第一条指令处于写结果阶段,但结果尚未写入以m1为地址的RAM单元。所以第三条指令的操作数[m1]不能直接从RAM里读出;因而必须将写结果寄存器18的输出17直接转送给数学逻辑单元30的输入端。此例的数据选择传递原理与例一类似。应理解,上述例子仅是本发明的特定实例,决不能视为对本发明的限制。权利要求1.一种精简指令集流水线结构的微控制器的指令定义方法,其特征在于该方法利用三个指令定义区域,其中用同一指令定义区域来规定立即数、操作数地址或目标地址,用另一指令定义区域来规定不同操作运算的操作码,以及用还有一个指令定义区域来规定用于识别指令中的操作数地址或位置及目标地址或位置从而控制精简指令集流水线结构中流水线各阶段之间的数据传递的识别控制码。2.如权利要求1所述的方法,其特征在于所述三个指令定义区域包括十七位,其中作为识别指令中操作数地址或位置及目标地址或位置从而控制所述精简指令集流水线结构中流水线各阶段之间的数据传递的识别控制码包括三位;作为规定不同操作运算的操作码包括六位;以及作为指令所执行的立即数、操作数地址或目标地址包括八位。3.如权利要求2所述的方法,其特征在于所述三位为所述指令的最高三位。4.如权利要求3所述的方法,其特征在于所述六位为所述指令的次高六位。5.如权利要求4所述的方法,其特征在于所述八位为所述指令的最低八位。6.如权利要求2到4中任一项所述的方法,其特征在于所述三位的值分别表示是否有一操作数来自累加器、是否有一操作数来自RAM以及写结果的目标是累加器还是RAM。7.如权利要求6所述的方法,其特征在于所述三位中的最高位表示是否有一操作数来自累加器,所述三位中的次高位表示是否有一操作数来自RAM,所述三位中的最低位表示写结果的目标是累加器还是RAM。8.如权利要求6所述的方法,其特征在于如果所述三位中的最高位为‘1’,则表示有一操作数来自累加器,如果为‘0’,则表示没有操作数来自累加器;如果所述三位中的次高位为‘1’,表示有一操作数来自RAM,如果为‘0’,则表示没有操作数来自RAM;如果所述三位中的最低位为‘1’,则表示写结果的目标是RAM,如果为‘0’,则表示写结果的目标为累加器。9.如权利要求6所述的方法,其特征在于如果所述三位中的最高位为‘0’,则表示有一操作数来自累加器,如果为‘1’,则表示没有操作数来自累加器;如果所述三位中的次高位为‘0’,表示有一操作数来自RAM,如果为‘1’,则表示没有操作数来自RAM;如果所述三位中的最低位为‘0’,则表示写结果的目标是RAM,如果为‘1’,则表示写结果的目标为累加器。全文摘要一种用于精简指令集流水线结构的微控制器的指令定义方法,其特征在于该方法利用三个指令定义区域,其中用同一指令定义区域来规定立即数、操作数地址或目标地址,用另一指令定义区域来规定不同操作运算的操作码,以及用还有一个指令定义区域来规定用于识别指令中的操作数地址或位置及目标地址或位置从而控制精简指令集流水线结构中流水线各阶段之间的数据传递的识别控制码。文档编号G06F9/22GK1300004SQ9912424公开日2001年6月20日申请日期1999年12月13日优先权日1999年12月13日发明者谢卫国,严晓浪,滕强华申请人:杭州华盛微电子有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1