支持缩小代码长度的常量还原型处理器的制作方法

文档序号:6414380阅读:188来源:国知局
专利名称:支持缩小代码长度的常量还原型处理器的制作方法
技术领域
本发明涉及一种微处理器,特别涉及一种使指令中所产生的无效区域和未使用区域有效的技术。
随着近年来微处理器应用产品的多功能化和高速化,人们期待着能够执行编码效率高的程序的微处理器(以下简称为“处理器”)的出现。即,期待着在构成程序的各指令中不包含无效代码和未使用区域的处理器的出现。
然而,特别是在象VLIW(VERY LONG INSTRUCTION WORD)一样的定长指令中,需要在指令中产生非操作码(nop码)等无效代码。VLIW由多个操作字段组成,在每个操作字段中指定了与处理器所包括的多个运算单元相对应的操作,但也不限制根据操作的依存关系等而经常并列执行的多个并列的操作。
作为避免了编码效率随nop码的插入而降低的现有技术,在特开平8-161169中公开了一种VLIW方式的计算机系统。


图1是上述现有技术中的指令格式示意图。
在此现有技术中,例如在需要将nop码设置到操作字段#2中的情况下,以其他指令所用的常量代替nop码而设置到该操作字段#2中,并在操作字段#1的一部分区域中设置表示该含义的指令有效化信息。处理器在执行该指令时,通过参照指令有效化信息,在操作字段#2中设有常量的情况下进行译码,并将其作为操作数而用于运算。由此,通过在指令中插入nop码而避免了无效区域的产生。
但是,在上述现有技术中,存在覆盖无效区域的常量的大小受限的问题。
例如,在只需要在一个32位长的操作字段中设置nop码时,就不能在其中设置64位数字常量。还例如,在32位定长指令中只有8位为未使用区域时,就规定只能用低于8位的常量来覆盖该8位区域,例如以32位表示的绝对地址是不能覆盖该区域的。
即,上述现有技术中存在在产生的无效区域位数较大时具有所述效果而在指令位数如32位之类位数较小的情况下,由于指令中所产生的无效区域也比较小,故许多不能用常量覆盖的无效区域仍原样保留的问题。
为了避免上述问题,在处理器中设计了用于存储常量的专用寄存器(常量寄存器)。但是,利用具有这样的常量寄存器的处理器,产生增加了在多任务情况下任务前后关系转换的处理时间的问题。即,为了执行多个任务而进行分时多路转换而一边转换一边执行,需要频繁地执行任务前后关系转换,所述任务前后关系转换就是在该任务的执行过程中,将控制转移到操作系统,将再次执行该任务所必需的信息(前后关系)保存到存储器等保存区域中,并返回接着应该执行的任务的前后关系,但是由于常量寄存器的值也包含在前后关系中,所以增加了任务前后关系转换的处理时间。
因此,本发明的第一目的就是针对上述问题,提供一种用于覆盖指令中无效区域的常量大小不由该指令的位数限制的处理器。由此,即便是指令中的位数很小的区域也不会作为无效区域而保留,从而达到了实现编码效率高的程序编制的目的。
本发明的第二目的是如实现上述第一目的的处理器一样,提供了一种缩短任务前后关系转换所需时间的处理器。
实现上述第一目的的本发明的译码并执行指令的处理器,包括用于保存前述指令的指令寄存器;用于对所保存的指令进行译码的译码装置;具有用于保存常量的存储区域的常量寄存器;用于在由前述译码装置译出应存储在前述常量寄存器中的常量被设置在前述指令中的情况下,当常量没有被存储在前述常量寄存器中时,将前述指令中设置的常量存储在前述常量寄存器中,而当前述常量寄存器中已经存储了其他常量时,将设置在原样保留该常量的前述指令中的常量存储到前述常量寄存器中的常量存储装置;以及用于在前述译码装置译出前述指令为利用前述常量寄存器的运算指令的情况下,读出存储在前述常量寄存器中的全部常量并执行前述运算的执行装置。
由此,分开设置在多个指令中的部分常量被存储在常量寄存器中和累积,并被还原为原来的一个常量。从而,在指令中产生位数小的无效区域时,可以用大位数常量的一部分来覆盖该无效区域,实现了编码效率高的程序的编制。
这里,前述常量存储装置能够一边对已经存储在前述常量寄存器中的常量移位,一边存入新的常量。
由此,由于通过只在常量寄存器的相同位置存储常量来累计这些常量,所以就没有必要再管理下一个应存入的常量在常量寄存器的位置。
而且,前述常量存储装置还能够从前述常量寄存器的低位向高位顺序累积和存储常量。
由此,由于常量寄存器从低位开始被覆盖,故实现了适于在常量寄存器中设置有效位长度可变的常量的处理器。
而且,前述处理器还包括对上述常量至少进行零扩展及符号扩展中的一种扩展处理的扩展装置。
由此,在常量寄存器中所存储的常量被用作操作数时,保证了该操作数成为经过零扩展或符号扩展的适当常量。
而且,前述扩展装置能够对存储在前述常量寄存器中的以前的常量进行前述扩展处理。
由此,保证了常量寄存器中存储的常量为经常进行扩展处理的适当常量,由于不必在从常量寄存器中读出常量之后进行扩展处理,所以缩短了在利用常量寄存器中所存储的常量的操作中所需要的时间。
而且,前述扩展装置还能够对从前述常量寄存器中读出的常量进行前述扩展处理。
由此,由于在将常量存储到常量寄存器中时不再需要扩展处理,所以缩短了存储到常量寄存器中所需要的时间。
而且,前述常量存储装置还能够从前述常量寄存器的高位向低位顺序累积和存储常量。
由此,由于常量寄存器从其高位开始被覆盖,故实现了能够在常量寄存器中设置使低位中的每一位都为零的常量的处理器。
而且,前述常量存储装置还能够无需移动已经存在前述常量寄存器中的常量而将前述新的常量存到邻接于该常量的位置上。
由此,常量一旦被存入常量寄存器中,其所在位的位置就不会变动,因此在用于将一个常量分开设置在多个指令的无效区域中的程序编译器中,调度变得很容易。
而且,前述常量存储装置还能够在前述执行装置读出存在前述常量寄存器中的常量之后,使前述常量寄存器置零。
由此,通过只在常量寄存器中存储常量而保证了存在常量寄存器中的常量是适于经常进行零扩展的常量,从而在每次使用常量寄存器的存储值时,不再需要用于使常量寄存器清零的清零指令。
而且,前述执行装置具有根据前述指令执行分支操作的分支执行部件,前述常量存储装置能够在前述分支执行部件执行分支操作时使前述常量寄存器置零。
由此,随着分支操作的执行,常量寄存器的存储值被清零,从而避免了在常量寄存器中保留不需要的存储值。
而且,连接并利用用于存储处理器内部状态的外部存储器,前述处理器还包括在前述译码装置译出前述指令而将前述常量寄存器的内容保存到前述外部存储器中的保存指令时,执行该保存操作的保存装置,和在前述常量寄存器中没有存储常量时禁止前述保存装置保存前述内容的保存禁止装置。
由此,在常量寄存器为空或存有无效常量的情况下避免了无用的保存操作,从而提高了在执行多任务时前后关系转换的处理速度。
而且,前述处理器还包括在前述译码装置译出前述指令而将前述外部存储器的内容恢复到前述常量寄存器中的恢复指令时,执行该恢复操作的恢复装置和在前述恢复指令表示由前述保存禁止装置所禁止的保存对应的恢复时,禁止前述恢复装置恢复前述内容的恢复禁止装置。
由此,对于原先保存的常量来说,避免了从外部存储器向常量寄存器的恢复,从而提高了在执行多任务时前后关系转换的处理速度。
而且,还包括用于存储表示常量是否存入前述常量寄存器中的有效信息的有效信息存储装置,前述保存装置具有将存在前述有效信息存储装置中的有效信息保存到前述外部存储器中的有效信息保存部件,前述保存禁止装置在参照前述有效信息判断出常量没有被存储在前述常量寄存器中时,禁止保存前述内容,前述恢复装置具有将存在前述外部存储器中的有效信息恢复到前述有效信息存储装置中的有效信息恢复部件,前述恢复禁止装置在参照保存在前述外部存储器中的有效信息判断出前述恢复指令表示由前述保存禁止装置所禁止的保存对应的恢复时,禁止前述内容的恢复。
由此,处理器通过参照有效信息避免了上述无用的保存和恢复,从而使电路更加简化。
而且,在前述译码装置译出保存在前述指令寄存器中的指令为前述保存指令的情况下,前述有效信息保存部件能够将前述有效信息保存到前述外部存储器中,在前述译码装置译出保存在前述指令寄存器中的指令为前述恢复指令的情况下,前述有效信息恢复部件能够将存储在前述外部存储器中的有效信息恢复到前述有效信息存储装置中。
由此,只用一个指令就能够将常量寄存器的内容和有效信息组合在一起保存或恢复,从而缩小了用于任务前后关系转换的程序大小。
而且,前述有效信息表示存储在前述常量寄存器中的常量的有效位数,前述保存禁止装置在前述有效信息为零时禁止前述保存操作,前述恢复禁止装置在前述有效信息为零时也禁止前述恢复操作。
由此,有效信息同时表示常量寄存器内容的有效性和常量的有效位数,所以不仅在常量保存和恢复的执行控制中,而且在利用常量的运算处理中的位控制中,都可以利用该有效信息。
而且,在执行由多个并列执行的操作构成的指令的VLIW处理器中,在没有能够并列执行的操作时,可以执行设置在后面指令中所使用的常量指令来代替该操作。
由此,不仅能够以常量覆盖在指定一个操作的指令中产生的无效区域,而且能够覆盖在一个指令中指定2种以上操作的VLIW中产生的无效区域。
而且,在执行由多个并列执行的操作构成的指令的VLIW处理器中,在没有能够并列执行的操作的情况下,在通过并列执行位于设置常量的指令中的除前述常量以外的操作来代替该操作的同时,上述常量也能够用于顺序存入的后续指令中。
由此,即使在只有VLIW的一部分操作中设置了常量的情况下,也可以并列执行该常量的存储和其他操作。由于该常量被累计和存储,并在后续的指令中被利用,故即使常量的位数较大,也可以将其分开覆盖在多个指令中。
而且,作为对指令进行译码和执行的VLIW处理器,所述指令包含用于设置指定指令格式的格式码的格式字段和多个用于指定并列执行的操作的操作字段,还包括用于存储常量的常量寄存器、用于参照前述格式码,对至少在前述1个操作字段中设置常量进行译码的译码装置、在前述译码装置译出前述常量被设置的情况下,当判断出常量没有被存入前述常量寄存器中时,将前述常量存入预定位置,而当判断出常量已经被存入前述常量寄存器中时,保留已被存入前述常量寄存器的常量并将新的常量存入前述常量寄存器中的常量存储装置,以及读出存入前述常量寄存器中的全部常量并执行将该常量作为操作数操作的执行装置。
由此,在产生处理器中所执行的VLIW序列时,可以将位数大的常量分开设置在多个VLIW中。虽然格式码明确指定了常量在被设置的指令中的位置(操作字段),但是由于它还隐含指定了常量的存储端(常量寄存器)和存储位置(常量寄存器上的位位置),所以就不再需要明确指示指令中设置的常量在常量寄存器中的特定位置的操作码。
如上所述,依据本发明,在由程序编译器等生成机器语言指令序列时,即使需要在这些指令序列中设定较小的无效区域,由于所谓的将在后续的指令中使用的常量预先分开覆盖的调度成为可能,所以缩小了程序的代码长度,尤其提高了作为内部处理器的实用价值。
图1表示现有技术中的指令格式。
图2(a)表示本发明相关的处理器所执行的指令字段的构成。
图2(b)到图2(d)表示16种指令格式。
图2(b)表示能够同时指定3种操作的指令格式,图2(c)表示能够同时指定2种操作的指令格式,图2(d)表示能够同时指定1种操作的指令格式。
图3表示图2所使用的3种操作码“cc”、“op1”及“op2”分别指定的具体操作的操作码示例。
图4是表示相同的处理器硬件构成的方框图。
图5是表示相同处理器的常量寄存器36及其外围电路具体结构的方框图。
图6(a)-(d)表示图5所示的常量寄存器控制部件32的常量存储方法。
图6(a)表示格式码为“0”或“1”时的存储方法,图6(b)表示格式码为“4”时的存储方法,图6(c)表示格式码为“5”时的存储方法,图6(d)表示操作码为“2”、“3”及“A”中的一个或常量寄存器36的存储值作为操作数被指定时的存储方法。
图7是表示相同处理器的PC部件33的具体结构的方框图。
图8是表示一个32位常量处理示例的流程图。
图9表示在相同处理器中进行图8所示的处理的程序示例。
图10是表示执行图9所示的程序时本处理器的操作的时序图。
图11表示在相同处理器中进行16位常量处理的程序示例。
图12(a)表示常规处理器所执行的指令字段定义。图12(b)表示相同的指令格式。
图13表示在上述常规处理器中进行图9所示的程序和同一内容的处理的程序示例。
图14表示在上述常规处理器中进行图11所示的程序和同一内容的处理的程序示例。
图15是表示与第一变形例相关的常量寄存器36外围电路的结构方框图。
图16(a)-(h)表示在格式码为“0”或者“1”的情况下存储位计数器91的值分别为0-7时,利用常量寄存器控制部件90的常量存储方法。
图17表示在格式码为“4”的情况下存储位计数器91的值分别为0-7时,利用常量寄存器控制部件90的常量存储方法。
图18表示在格式码为“5”的情况下存储位计数器91的值分别为0-7时,利用常量寄存器控制部件90的常量存储方法。
图19表示在格式码为“2”、“3”及“A”中的一个或常量寄存器36的存储值作为操作数被指定时利用常量寄存器控制部件90的常量存储方法。
图20是表示与第二变形例相关的常量寄存器36外围电路的结构方框图。
图21是表示图20所示的读出标记存储部件192的值的变化的变迁图。
图22(a)-(f)表示同一变形例中的常量寄存器36及读出标记存储部件192的值的变化,图22(a)表示存在常量寄存器36中的常量“0x87654321”被读出后的内容,图22(b)-(e)表示其后4位常数“0x8”、“0x7”、“0x6”、“0x5”被顺序存入后的内容,图22(f)表示图22(e)中的常数“0xFFFF8765”被读出后的内容。
图23是表示与第三变形例相关的常量寄存器36外围电路的结构方框图。
图24是表示与第四变形例相关的常量寄存器36外围电路的结构方框图。
图25是表示与第五变形例相关的常量寄存器36外围电路的结构及其接连关系的方框图。
图26是表示读出标记存储部件28的值的变化的状态迁移图。
图27是表示一个24位常数处理示例的流程图。
图28表示在本变形例相关的处理器中进行图27所示的处理内容的程序示例。
图29表示在实施例1的处理器中进行与图27所示的流程图内容相同的处理的程序示例。
图30是表示与实施例2相关的处理器500的硬件结构方框图。
图31表示有效位数寄存器321的存储值与常量寄存器320的有效位数的对应关系。
图32表示本实施例中使用的指令及其指令格式。
图33是表示常量还原电路322的具体结构的方框图。
图34是多路转接器3224、3225、3226和第二有效位数生成电路3227的操作定义图。
图35表示保存恢复无效化电路301的具体结构。
图36(a)是说明本处理器操作的流程图,图36(b)表示与其对应的程序(指令571-573)序列。
图37(a)是表示在0b10(低26位有效)被存入有效位数寄存器321的时刻进入插入处理的情况(情形1)下的指令流的流程图。
图37(b)是表示在0b00(所有位都无效)被存入有效位数寄存器321的时刻进入插入处理的情况(情形2)下的指令流的流程图。
图38是简略示出情形1及情形2下的处理器操作,即常量寄存器320的值的保存及恢复操作的流程图。
图39表示用于保存和恢复有效位数寄存器321的值的专用指令的格式。
图40是相当于将实施例2中的任务前后关系转换功能附加到实施例1的VLIW处理器中的VLIW处理器600的功能方框图。
图41是本处理器600执行的VLIW670的示例。
下面结合附图详细说明本发明中处理器的实施例。在本说明书中,“指令”的含义是本处理器能够同时并列译码和执行的全部代码,“操作”的含义是用于指定本处理器能够并列执行的数字运算、逻辑运算、传送和分支等处理单元或其他处理单元的代码。
(实施例1)作为实现上述第一目的的处理器,实施例1中的处理器的特征在于具有通过将分开设置在多个指令中的常量的各个部分累积到专用寄存器中并同时进行存储,使其还原成原来的1个常量的功能。
(指令格式)首先,说明本处理器执行译码的指令结构。
本处理器是采用VLIW体系结构的处理器(以下称“VLIW处理器”),对32位定长指令进行译码并执行之。
图2(a)表示本发明相关的处理器所执行的指令50的字段构成。图2(b)到图2(d)表示16种指令格式。图2(b)表示能够同时指定3种操作的指令格式,图2(c)表示能够同时指定2种操作的指令格式,图2(d)表示能够同时指定1种操作的指令格式。
这个指令50的长度为32位,由8个4位字段(从高位起,P0.0字段51、P1.0字段、…、P3.2字段58)构成。而且,将P2.0字段53-P2.2字段55作为一组总称为第一运算字段59,将P3.0字段56-P3.2字段58作为一组总称为第一运算字段60。
在图2(b)-图2(d)中,“const”为常量,根据利用的操作类型而表示立即数、绝对地址、位移量等数字常量和字符常量。“op”表示用于指定操作类型的操作码,“Rs”表示作为源操作数的寄存器,“Rd”表示作为目的操作数的寄存器,“cc”表示用于指定将本处理器具备的专用32位寄存器(图4所示的常量寄存器36)的存储值作为分支目的地的绝对地址或相对地址(位移量)的分支操作的操作码。
而且,这些代码后面附加的数字表示第一运算字段59及第二运算字段60的哪种操作被使用。例如,如果是格式码为“6”的指令格式下,则将设置在P1.0字段52中的4位常量“const1”与设置在P2.1字段54中的4位常量“const2”结合在一起,作为8位常量,表示对应于第一运算字段59的操作码“op1”的源操作数。
后面没有附加数字的常量“const”表示被存储在本处理器具备的专用32位寄存器(图4所示的常量寄存器36)中的常量。例如,设置在格式码为“0”的指令格式中的P1.0字段52中的4位常量“const”是被隐含指定的常量寄存器36中所存储的常量。
图3说明由图2所使用的3种操作码“cc”、“op1”及“op2”分别指定的具体操作。
4位操作码“cc”指定16种分支操作中的一种。每一种分支操作由分支条件和分支形式决定。分支条件包括等于(“eq”)、不等于(“neq”)、大于(“gt”)等。分支形式包括将上述常量寄存器36的存储值作为分支目的地的绝对地址的分支形式(在助记符后没有附加“i”)和将其作为分支目的地的相对地址的分支形式(在助记符后附加有“i”)。例如,操作码“eq”表示在以前的比较结果相等时进行取决于绝对地址指定的操作,操作码“eqi”表示在以前的比较结果相等时进行取决于相对地址指定的操作。
4位操作码“op1”包括指定属于“add”(加法运算)、“sub”(减法运算)、“mul”(乘法运算)、“and”(逻辑积)、“or”(逻辑和)等算术逻辑运算中的一种操作的情况和指定属于“mov”(字(32位)数据传送)、“movh”(半字数据的传送)、“movb”(字节数据的传送)等寄存器与寄存器之间传送中的一种操作的情况。
4位操作码“op2”除了与上述操作码“op1”相同的算术逻辑运算及寄存器与寄存器间传送的情况之外,还包括指定属于“1d”(从存储器向寄存器装入一个字数据)、“st”(从寄存器向存储器存储字数据)等寄存器与存储器间传送中的一种操作的情况。
下面,说明图2(a)中所示的各个字段51、52、59、60的特征。
P0.0字段51是用于设置规定此指令50的格式的42位格式码的字段,具体地说,就是规定图2(b)-图2(d)所示的16种指令格式中的一种。
P1.0字段52是用于设置常量或分支用操作码的字段。
常量被设置在这个P1.0字段52中的情形(格式码=0,1,4-9的情况)包括该常量作为常量寄存器36中的存储对象的情形(格式码=0,1,4,5)和该常量构成第一运算字段59或第二运算字段60的操作码的一部分的情形(格式码=5,7,8,9,B)。而且,在作为常量寄存器36中存储的对象的情形下,又包括只有这4位常量被存储的情形(格式码=0,1)和第一运算字段59或第二运算字段60中设置的12位常量被同时存储的情形(格式码=4,5)。
另一方面,在将分支用的操作码“cc”设置在这个P1.0字段52中的情形(格式码=2,3,A)中,意味着将存储在常量寄存器36中的常量作为分支目的地的绝对地址或相对地址(位移量)来进行分支。
第一运算字段59设置用于指定与本处理器和外部(存储器)的数据传送无关的操作(算术逻辑运算、寄存器间的数据传送)的操作码组(源操作码和目的操作码)或常量。
第二运算字段60除了上述第一运算字段59的功能外,还设置用于指定伴随于本处理器和外部(存储器)的数据传送的操作(寄存器与存储器间的数据传送)的操作码组。
并且,在本诺曼处理器中不需要同时执行两种以上分支操作和本处理器与外部存储器的操作数输入输出端口(图4中的操作数存取部件40)被限定为1个的基础上,对上述不同种类操作的各个字段进行分配。
这里,图2(b)-图2(d)所示的指令格式具有以下特征。
第一,由常量“const”可知,常量被存储在常量寄存器36中的指令格式有以下3种形式。
(1)格式码为“0”或“1”的情形通过此指令,P1.0字段52中设置的4位常量被存储在常量寄存器36中。
(2)格式码为“4”的情形通过此指令,P1.0字段52-P2.2字段55中设置的16位常量被存储在常量寄存器36中。
(3)格式码为“5”的情形通过此指令,P1.0字段52和P3.0字段56-P3.2字段58中设置的16位常量被存储在常量寄存器36中。
第二,本处理器能够在一个指令中最多指定3种操作,但在该场合下,从图2(b)所示的3种操作所使用的指令格式可知,这3种操作为如下组合中的任一种。
(1)将4位常量设置在常量寄存器36中的操作与两种通用操作(格式码为“0”,“1”)的组合(2)将常量寄存器36中的设置值作为绝对地址或相对地址来进行分支的操作与两种通用操作(格式码为“2”,“3”)的组合由此,虽然本处理器的指令只有32位,但具有能够最多同时指定3种操作的、高编码效率的字段结构。
(处理器的硬件结构)
下面说明本处理器的硬件结构。
图4是依据实施例1的处理器硬件结构的方框图。
如上所述,本处理器为最多能并列执行三种操作的VLIW处理器,顺序由指令寄存器10、译码部件20和执行部件30构成。
指令寄存器10是用于保存从指令读取部件39发送的一个指令的32位寄存器。
译码部件20用于对保存在指令寄存器10中的指令进行译码并将对应于该译码结果的控制总线输出到执行部件30,顺序由格式译码器21和指令译码器22构成。
指令译码器22又由用于对保存在P1.0字段12中的操作码“cc”进行译码并根据译码结果控制PC部件33的分支译码器23、用于对保存在P2.0字段13中的操作码进行译码并根据译码结果控制第一运算部件37的第一运算译码器24及用于对保存在P3.0字段16中的操作码进行译码并根据译码结果控制第二运算部件38和操作数存取部件40的第二运算译码器25构成。
通过对保存在P0.0字段11中的4位格式码进行译码,格式泽码器21指定保存在指令寄存器10中的指令格式为图2(b)-图2(d)所示的16种中的哪一种,根据该结果允许或禁止分支译码器23、第一运算译码器24和第二运算译码器25的译码操作并对执行部件30的常量寄存器控制部件32进行操作。
上述译码器21、23-25基本上在一个时钟周期内对一种操作进行译码并将控制信号提供给执行部件。连接指令寄存器10和执行部件30的26位常量信号线26是用于将设置在指令寄存器10中的常量和操作数传送到执行部件30的总线。
执行部件30是根据译码部件20的译码结果并列执行最多三种操作的电路单元,由执行控制部件31、PC部件33、寄存器组34、第一运算部件37、第二运算部件38、指令读取部件39及操作数存取部件40构成。关于该执行部件30中的常量寄存器控制部件32、PC部件33及常量寄存器36,在其它的附图中示出其具体结构。
执行控制部件31是根据译码部件20的执行结果控制执行部件30的各个组成部分33-40的控制电路和配线的总称,除常规处理器具备的构成部件(定时控制、操作许可禁止控制、状态管理、插入控制等电路)之外还具有本处理器中特有的常量寄存器控制部件32。常量寄存器控制部件32根据格式译码器21的指示,进行将保存在指令寄存器10中的4位或16位常量(const)存入常量寄存器36中的控制。
在分支译码器23的控制下,PC(程序计数器)部件33将存有下面应执行译码指令的外部存储器(图中未示)上的地址输出到指令读取部件39中。
指令读取部件39通过32位IA(指令地址)总线及32位ID(指令数据)总线,从图中未示的外部存储器中取出指令块,并在将其存入内部指令高速缓冲存储器的同时,将与PC部件33输出的地址相对应的指令提供给指令寄存器10。
寄存器组34由15个32位通用寄存器35和1个32位常量寄存器36构成。根据第一运算译码器24及第二运算译码器25的译码结果,被存储在这16个寄存器35、36中的值被传送到第一运算部件37及第二运算部件38中执行运算,或在通过第一运算部件37及第二运算部件38之后被传送到寄存器组34或操作数存取部件40中。另外,存在常量寄存器36中的值除了用于第一运算部件37及第二运算部件38的运算之外,还被传送到PC部件33中用于生成作为分支目的地的有效地址。
第一运算部件37内部具有对2个32位数据执行算术逻辑运算的ALU和执行乘法运算的乘法器,并在第一运算译码器24的控制下执行2种操作(算术逻辑运算和寄存器间的传送)。
与第一运算部件37相同,第二运算部件38内部也具有对2个32位数据执行算术逻辑运算的ALU和执行乘法运算的乘法器,并在第二运算译码器25的控制下执行2种操作(算术逻辑运算和寄存器间的传送)。
操作数存取部件40是用于在第二运算译码器的控制下,在寄存器组34和图中未示的外部存储器之间传送操作数的电路,其内部包括用于存储该操作数和操作数地址的缓冲器。具体地说,例如,在操作数“1d”被设置在指令寄存器10的P3.1字段16中的情况下,置于外部存储器中的1个字数据经过操作数存取部件40而被装入寄存器组34中的任一寄存器中,而在操作数“st”被设置的情况下,寄存器组34中的任一寄存器的存储值被存入外部存储器中。
如图所示,上述PC部件33、寄存器组34、第一运算部件37、第二运算部件38及操作数存取部件40通过内部总线(L1总线、R1总线、L2总线、R2总线、D1总线、D2总线)相连接。L1总线及R1总线分别被连接到第一运算部件37的2个输入端口,L2总线及R2总线分别被连接到第二运算部件38的2个输入端口,D1总线及D2总线分别被连接到第一运算部件37和第二运算部件38的输出端口。
(常量寄存器36及其外围电路的具体结构)下面,详细说明常量寄存器36及其外围电路。
图5是表示常量寄存器36及其外围电路具体结构和连接关系的方框图。图中的固定值(“0”)27意味着表示常量“0”的4条信号线的固定连接。
常量寄存器控制部件32由5个3输入选择器32a-32e和3个4输入选择器32f-32h构成,常量寄存器36由8个4位寄存器36a-36h构成。而且,每个输入输出数据为并列4位数据。
常量寄存器控制部件32通过依据来自格式译码器21及指令译码器22的控制信号控制上述4个输入选择器32a-32h,利用如下所示的4种存储方法之一将保存在指令寄存器10中的常量或零存入常量寄存器36中。
图6(a)-图6(d)说明了4种存储方法。
图6(a)示出了保存在P0.0字段11中的值为“0”或“1”并由格式译码器21进行译码时的存储方法。这相当于只将设置在P1.0字段12中的4位常量存入常量寄存器36中时的情形。
具体地说就是在将保存在常量寄存器36中的数据以4位为单位向高位移位的同时,将保存在指令寄存器10的P1.0字段12中的4位常量存入常量寄存器36的最低的4位寄存器36h中。
图6(b)示出了保存在P0.0字段11中的值为“4”并由格式译码器21进行译码时的存储方法。这相当于将设置在P1.0字段12-P2.2字段15中的16位常量存入常量寄存器36中时的情形。
具体地说就是在将保存在常量寄存器36的低16位36e-36h中的数据移至高16位36a-36d的同时,将保存在指令寄存器10的P1.0字段12-P2.2字段15中的16位常量存入常量寄存器36的低16位36e-36h中。
图6(c)示出了保存在P0.0字段11中的值为“4”并由格式译码器21进行译码时的存储方法。这相当于将设置在P1.0字段12和P3.0字段16-P3.2字段18中的16位常量存入常量寄存器36的低16位36e-36h中时的情形。
具体地说就是在将保存在常量寄存器36的低16位36e-36h中的数据移至高16位36a-36d的同时,将保存在指令寄存器10的P1.0字段12和P3.0字段16-P3.2字段18中的16位常量存入常量寄存器36的低16位36e-36h中。
图6(d)示出了保存在P0.0字段11中的值为“2”、“3”或“A”并由格式译码器21进行泽码,或在常量寄存器(R15)被指定到P2.1字段14、P2.2字段15、P3.2字段17及P3.3字段18中的至少一个且由指令译码器22进行译码时的存储方法。这相当于在由P1.0字段12中设置的分支操作、第一运算字段59及第二运算字段60中的至少一种操作使用(读出)常量寄存器36的存储值之后,使常量寄存器36中全为零(常量寄存器36清零)时的情形。
具体地说就是在常量寄存器36的存储值被读到PC部件33、第一运算部件37及第二运算部件38中的任一个之后,在常量寄存器36的32位中都存入常数“0”。
在使用常量寄存器36之后将其清零,是为了保证在常量寄存器36中经常存入经零扩展的值。这里所谓的零扩展就是在具有的数值的有效位数不满足规定的位数时,用零覆盖高于该有效位的全部位的处理。
如上所述,在指令寄存器10的P0.0字段11中的值为“0”、“1”、“4”、“5”时,一边对已经存在常量寄存器36中的常量移位,一边将新的常量存入常量寄存器36中。而且,一旦常量寄存器36的存储值被读出使用,则其内容就被消除。据此,常量寄存器36能够接连不断地累积存入的常量直到其内容被读出时为止。
(PC部件33的具体结构)下面说明PC部件33的具体结构。
图7示出了PC部件33的具体结构的方框图。
PC部件33由作为表示常数“4”的固定配线的固定值(“4”)33a、2输入选择器33b、加法器33c、用于保存下一执行译码的指令地址的PC33d及4输入选择器33e构成。
利用此PC部件33,通过选择器33b、33e在来自译码部件20的控制信号的控制下的操作,将以下3种值之一作为有效地址从选择器33e输出到指令读取部件39中。
(1)PC33d的内容相加“4”后的值这相当于没有分支顺序执行时,即在译码执行的指令中没有指定分支操作时的情形。在一个指令的长度为4字节(32位)的基础上与“4”相加。
(2)常量寄存器36的内容与PC33d的内容相加后的值这相当于在将常量寄存器36的内容作为相对地址进行分支时,例如,在由P1.0字段12指定根据相对地址的分支时由分支译码器23进行译码的情形。
(3)常量寄存器36的内容这相当于在将常量寄存器36的内容作为绝对地址进行分支时,例如,在由P1.0字段12指定根据绝对地址的分支时由分支译码器23进行译码的情形。
如上所述,由于PC部件33在构成上包括专用加法器33c并可直接利用保存在常量寄存器36中的值,所以第一运算部件37及第二运算部件38的运算能够独立并行,且能够进行对将常量寄存器36的存储值作为绝对地址或相对地址的分支的执行控制。
(处理器的操作)下面说明译码执行具体指令时本处理器的操作。
图8是表示32为常量的处理示例的流程图。
在本图中,示出了这样的处理求出寄存器R0与R1的存储值之差(步骤S80),将该结果与寄存器R2的存储值相乘(步骤S81),再将该结果与32位常量“0x87654321”(16进制的“87654321”)相加(步骤S82、S83),最后将寄存器R3清零(步骤S85)。
图9示出了在本处理器中进行图8所示的处理内容的程序示例。
该程序由3个指令71-73构成。1行相当于1个指令,用各字段中设置的助记符表示各个指令的内容。常量全部用16进制表示。“fmtn(n=0-F)”表示格式码“n”,“Rn(n=0-15)”表示寄存器组34中的1个寄存器。“R15”表示常量寄存器36。
图10是表示在执行图9所示的程序时本处理器的操作的时序图。
本图中示出了时钟周期、通用寄存器R0-R3及常量寄存器R15的内容、经过4条总线L1、R1、L2、R2的数据。利用上述图9和图10,说明本处理器对各指令71-73的操作。
(指令71)
在指令71被装入指令寄存器10中时,本处理器进行图10中时钟周期t0-t1所示的操作。
格式码译码器21从指令寄存器10的P0.0字段11中的值(“fmt4”)判断出这个指令为格式码为“4”的双操作指令,并控制用于并列执行以下2种操作的执行部件30。
(1)第一操作常量寄存器控制部件32通过控制内部的8个选择器32a-32h,利用图6(b)所示的存储方法,将P1.0字段12-P2.2字段15中保存的16位常量(0x8765)存储到常量寄存器36的低16位中。其结果是,如图10中时钟周期t0-t1所示,常量寄存器R15的内容从“0x00000000”变为“0x00008765”。
(2)第二操作第二运算部件38以通用寄存器R0的内容(“0x33333333”)和通用寄存器R1的内容(“0x22222222”)作为输入,进行减法运算,然后将该运算结果再次存入通用寄存器R0中。其结果是,如图10中时钟周期t0-t1所示,通用寄存器R0的内容从“0x33333333”变为“0x11111111”。
(指令72)接着,在指令72被装入指令寄存器10中时,本处理器进行图10中时钟周期t1-t2所示的操作。
与上述指令71相同,格式码译码器21从指令寄存器10的P0.0字段11中的值(“fmt4”)判断出这个指令为格式码为“4”的双操作指令,并控制用于并列执行以下2种操作的执行部件30。
(1)第一操作常量寄存器控制部件32通过控制内部的8个选择器32a-32h,利用图6(b)所示的存储方法,将P1.0字段12-P2.2字段15中保存的16位常量(0x4321)存储到常量寄存器36的低16位中。其结果是,如图10中时钟周期t1-t2所示,常量寄存器R15的内容从“0x00008765”变为“0x87654321”。
(2)第二操作第二运算部件38以通用寄存器R2的内容(“0x00000004”)和通用寄存器R0的内容(“0x11111111”)作为输入,进行乘法运算,然后将该运算结果再次存入通用寄存器R0中。其结果是,如图10中时钟周期t1-t2所示,通用寄存器R0的内容从“0x11111111”变为“0x44444444”。
(指令73)最后,在指令73被装入指令寄存器10中时,本处理器进行图10中时钟周期t2-t3所示的操作。
格式码译码器21从指令寄存器10的P0.0字段11中的值(“fmt7”)判断出这个指令为格式码为“7”的双操作指令,并控制用于并列执行以下2种操作的执行部件30。
(1)第一操作第一运算部件37以常量寄存器R15的内容(“0x87654321”)和通用寄存器R0的内容(“0x44444444”)作为输入,进行加法运算,然后将该运算结果再次存入通用寄存器R0中。其结果是,如图10中时钟周期t2-t3所示,通用寄存器R0的内容从“0x44444444”变为“0xCBA98765”,常量寄存器R15的内容被清除。
(2)第二操作第二运算部件38以分别设置在P1.0字段12和P3.1字段17中的8位常量(“0x00”)作为输入,不进行任何运算后存入通用寄存器R3中。其结果是,如图10中时钟周期t2-t3所示,通用寄存器R3的内容从“0xFEDCBA98”变为“0x00000000”。
如上所述,在本处理器中,32位常量“0x87654321”在被分开设置在2条指令71和72中并在常量寄存器36中一边顺序移位,一边被存储之后,被第3条指令73利用。由此,通过3条指令执行了图8的流程图所示的处理。
下面,利用其他处理16位常量的程序来说明本处理器的操作。
图11示出了处理16位常量的程序示例。
该程序由5个指令74-78构成。
本处理器对各指令74-78的操作如下所述。
(指令74)在指令74被装入指令寄存器10中时,格式码译码器21从指令寄存器10的P0.0字段11中的值(“fmt0”)判断出这个指令为格式码为“0”的3操作指令,并控制用于并列执行以下3种操作的执行部件30。
(1)第一操作常量寄存器控制部件32通过控制内部的8个选择器32a-32h,利用图6(a)所示的存储方法,将P1.0字段12中保存的4位常量(”0x8”)存储到常量寄存器36的最低4位寄存器36h中。
(2)第二操作第一运算部件37以通用寄存器R6的值为输入,不进行任何运算后存入通用寄存器R1中。
(3)第三操作同样地,第二运算部件38以通用寄存器R7的值为输入,不进行任何运算后存入通用寄存器R2中。
(指令75)同样地,在指令75被装入指令寄存器10中时,格式码译码器21判断出这个指令为格式码为“0”的3操作指令,并控制用于并列执行以下3种操作的执行部件30。
(1)第一操作常量寄存器控制部件32通过控制内部的8个选择器32a-32h,利用图6(a)所示的存储方法,将P1.0字段12中保存的4位常量(“0x7”)存储到常量寄存器36的最低4位寄存器36h中。其结果是在常量寄存器36的低8位中设置常量“0x87”。
(1)第二操作第一运算部件37以通用寄存器R0和R1的值为输入,进行加法运算后将其结果再次存入通用寄存器R1中。
(2)第三操作同样地,第二运算部件38以通用寄存器R0和R2的值为输入,进行加法运算后将其结果再次存入通用寄存器R2中。
(指令76、指令77)同样地,通过执行指令76、77,常量“0x8765”被设置在常量寄存器36的低16位中。
(指令78)在指令78被装入指令寄存器10中时,本处理器执行与图9所示的指令73相同的操作。
如上所述,在本处理器中,16位常量“0x8765”在被分开设置在4条指令74-77中并在常量寄存器36中一边顺序移位,一边被存储之后,被第5条指令78利用。
(与常规处理器的比较)下面,说明在常规处理器中执行与上述图9及图11所示的处理器相同的内容的处理时的情况,并与实施例1的处理器进行比较。这里所谓的常规处理器就是不具有用于累积和存储分开设置的常量的装置,如依据实施例1的处理器的常量寄存器36和常量寄存器控制部件32并执行32位定长指令的处理器。
图12(a)表示常规处理器所执行的指令字段的定义,图12(b)表示该指令格式。即,常规处理器能够执行3种双操作指令101-103和1种单操作指令104。
图13是在常规处理器中进行与图9所示的程序内容相同的处理,即图8的流程图所示的处理的程序示例。
比较图13和图9可知,常规处理器所用的程序比依据实施例1的处理器所用的程序多2个指令。
而且,指令105、106中包含nop码,由于指令106利用了指令105的运算结果,所以不能并列执行这些指令。而在将1个常量“0x87654321”分成高16位和低16位两部分并设置于常量寄存器Ri中的情况下,不能在1个32位指令中同时没置设定指令的操作码和32位常数。
同样地,图14是在常规处理器中进行与图11所示的程序内容相同的处理的程序示例。
比较图14和图11可知,常规处理器所用的程序比依据实施例1的处理器所用的程序多1个指令。
如上所述,利用依据实施例1的处理器,即使16位和32位常数被分开设置在多个指令中,也可以通过在常量寄存器36中累积并存储这些常数将其还原为原来的常数,并在分支和算术运算等操作中使用。即,即使是在指令中生成的区域较小,由于能够将常量分开进行覆盖,从而与在常规处理器中执行时相比,程序的代码长度被缩小了。
(常量寄存器36的外围电路的变形例)下面对图5所示的常量寄存器36的外围电路的几个变形例进行说明。
(第一变形例)图15是表示依据第一变形例的常量寄存器36的外围电路的结构及其连接关系的方框图。
图5的常量寄存器控制部件32具有将常量寄存器36作为移位寄存器的功能,但与图15的常量寄存器控制部件32将常量寄存器作为并列输入寄存器的功能是不同的。具体地说,常量寄存器控制部件90和格式译码器21的连接以及常量寄存器控制部件90的构成要素与图5所示的不同。
常量寄存器控制部件90由存储位计数器91和8个8输入选择器90a-90h构成。存储位计数器91为3位计数器,以半字节(4位)为单位表示该时刻累积在常量寄存器36中的常量的有效位数。
在常量寄存器控制部件90从格式译码器21中接收表示将保存在指令寄存器10中的常量进行存储的指示时,通过参照该时刻的存储位计数器91的值,将该常量存到常量寄存器36的适当位置上,然后更新存储位计数器91。在从格式译码器21或指令译码器22中接收表示读出用于任何操作的常量寄存器36的存储值的通知时,使常量寄存器36全部为0,然后存储位计数器91清零。
具体地说,常量寄存器控制部件90在从格式译码器21接收表示P0.0字段11的值为“0”或“1”的指示时,控制选择器90a-90h以便利用对应于该时刻存储位计数器91的值为0-7、分别示于图16(a)-图16(h)的存储方法,将P1.0字段12中的1个半字节常量存入常量寄存器36中,然后存储位计数器91加1。
同样地,常量寄存器控制部件90在从格式译码器21接收表示P0.0字段11的值为“4”的指示时,控制选择器90a-90h以便利用对应于该时刻存储位计数器91的值为0-7、分别示于图17(a)-图17(h)的存储方法,将P1.0字段12-P2.2字段15中的4个半字节常量存入常量寄存器36中,然后存储位计数器91加4。
同样地,常量寄存器控制部件90在从格式译码器21接收表示P0.0字段11的值为“5”的指示时,控制选择器90a-90h以便利用对应于该时刻存储位计数器91的值为0-7、分别示于图18(a)-图18(h)的存储方法,将P1.0字段12、P3.0字段16-P3.2字段18中的4个半字节常量存入常量寄存器36中,然后存储位计数器91加4。
而且,常量寄存器控制部件90在从格式译码器21接收表示P0.0字段11的值为“2”、“3”或“A”的指示或从指令译码器22接收表示执行将常量寄存器36的存储值作为操作数的操作的指示的情况下,如图19中的常量寄存器36所示,32位的常数“0”被存入常量寄存器36中,然后存储位计数器91被清零。
如上所述,利用依据第一变形例的常量寄存器控制部件90,与上述常量寄存器控制部件32的相同之处在于,分开设置在多个指令中的常量经过在常量寄存器36中被累积和存储,还原成原来的常量。
但与上述常量寄存器控制部件32的不同之处在于,后面执行的指令中设置的常量被存入常量寄存器36的高位中。从而,为了在此变形例的处理器中执行图8中流程图所示的处理,需要在图9所示的程序中调换指令71的常数“0x8765”和指令72的常数“0x4321”。
(第二变形例)下面说明第二变形例。
图20是表示依据第二变形例的常量寄存器36的外围电路的结构及其连接关系的方框图。
第二变形例在一边将常量寄存器36的存储值移位,一边累积新的常量这一点上,与图5所示的相同,但在存入常量寄存器36之前对常量进行符号扩展以及即使在常量寄存器36的存储值被读出之后,常量寄存器36也不清零这两点上是不相同的。
所谓符号扩展就是在具有的数值的有效位数不满足规定的位数时,将该数值的最高位看作符号位,并用与该符号位相同的逻辑值覆盖高数位的处理。
在指令寄存器10中设置的常量为常量寄存器36的存储值被读出后最先存入的值的情况下,符号扩展控制部件191控制常量寄存器控制部件190以便于在符号扩展之后将该常量存入常量寄存器36中,在非上述情况时,控制常量寄存器控制部件190以便于将未经符号扩展的该常量存入常量寄存器36中。为此,符号扩展控制部件191内部包括用于存储1位读出标记的读出标记存储部件192,并根据来自格式译码器21和指令译码器22的指示,更新读出标记存储部件192。
图21是表示读出标记存储部件192的值的变化的状态迁移图。
符号扩展控制部件191在从格式译码器21和指令译码器22接收到常量寄存器36的存储值被读出的通知时,在读出操作之后将读出标记存储部件192设为“1”,在从格式译码器21和指令译码器22接收到指令寄存器10中设置的常量被存入常量寄存器36中的通知时,在存储操作后将读出标记存储部件192设为“0”。符号扩展控制部件191在将新的常量存入常量寄存器36中时,参照读出标记存储部件192,当其值为“1”时,在进行符号扩展后将该常量存入常量寄存器36中。
在图20中,从选择器190h和190e的输出端开始分支并与其它选择器相连的信号线为相当于各自输出4位中的最高位的信号线。
图22(a)-22(f)是表示第二实施例中的常量寄存器36和读出标记存储部件192的值的变化的状态迁移图。
图22(a)表示它们在常量寄存器36中存储的常量“0x87654321”被读出后的内容,图22(b)-22(e)表示它们在4位常数”0x8”、”0x7”、”0x6”、”0x5”被顺序存储后的内容,图22(f)表示它们在图22(e)中的常量”0xFFFF8765”被读出后的内容。
由此,在本第二变形例中,通过由符号扩展控制部件191根据读出标记存储部件192来管理有无进行符号扩展的必要,分开设置在多个指令中的常量被累积和存储在常量寄存器36中,并被还原为经符号扩展的原来的常量。
(第三变形例)下面说明第三变形例。
图23是依据第三变形例的常量寄存器36的外围电路结构及连接关系的方框图。
第三变形例与上述第二变形例相比较,在一边将常量寄存器36的存储值移位一边累积新的常量以及进行符号扩展这两点上是相同的,但在将常量存入常量寄存器36中时不进行扩展处理、在从常量寄存器36读出常量时进行扩展处理这一点上是不相同的。
与图5所示的外围电路及其连接关系相比较时,在第三变形例中没有设计用于将常量寄存器36全部存为0的结构,但添加了新的扩展控制部件291及零/符号扩展控制部件293。
除了不对常量寄存器36清零以外,常量寄存器控制部件290进行与图5所示的常量寄存器控制部件32相同的操作。
在常量寄存器36中所存储的常量被读出时,扩展控制部件291控制零/符号扩展部件293以对该常量适当地进行零扩展或符号扩展。为此,扩展控制部件291内部具有由三位计数器构成的存储位计数器292。存储位计数器292用于以半字节为单位存储累积在常量寄存器36中的常量的有效位数。扩展控制部件291在从格式译码器21接收到新的常量被存入常量寄存器36中的通知时,将该常量的位数(半字节为单位的位数)的存储位计数器292加1,在从格式译码器21或指令译码器22接收到常量寄存器36的存储值被读出的通知时将存储位数器292复位。
扩展控制部件291将用于根据指令译码器22的指示指定扩展形式(零扩展或符号扩展)的1位控制信号和用于表示存储位计数器292的值的3位控制信号输出到零/符号扩展部件293。
零/符号扩展部件293将从常量寄存器36输出的32位存储值作为输入,根据来自扩展控制部件291的扩展形式和有效位数(半字节单位的位数),进行零扩展或符号扩展。具体地说,如果由扩展控制部件291指定的扩展形式为符号扩展,则根据输入的存储值,将相当于扩展控制部件291所通知的有效位数的最高位的位逻辑值复制到高于该有效位数的全部位中并输出所得到的值,另一方面,如果扩展形式为零扩展,则输出全部高位为零的值。
例如,输入的存储值为“0x87654321”,在扩展控制部件291所通知的扩展形式为符号扩展且有效位数为4个半字节的情况下,零/符号扩展部件293输出“0x00004321”。
由此,依据本第三变形例,分开设置在多个指令中的常量通过被累积和存储在常量寄存器36中而被还原为原来的常量,并在进行零扩展或符号扩展之后被应用到分支和运算等操作中。
(第四变形例)下面说明第四变形例。
图24是依据第四变形例的常量寄存器36的外围电路结构及连接关系的方框图。
第四变形例与图5所示的相比较,在一边将常量寄存器36的存储值移位一边累积新的常量这一点上是相同的,但在移位的方向和对常量寄存器36的存储位置上是不相同的。具体地说,在将常量寄存器36的存储值从高数位向低数位移位的同时,将指令寄存器10中设置的新的常量存入常量寄存器36的高数位。还有,在常量寄存器36的存储值被读出后对常量寄存器36清零这一点上与图5所示的相同。
比较图24和图5可知,它们的连接关系与位方向对称,所用的附图标记相同。
通过第四变形例,可以利用较少的存储次数在常量寄存器36中设置使全部低数位为零的数值。例如,在常量寄存器36被清零后设置新的32位常数“0x87650000”时,如果按照图5所示的连接,则需要存入两个16位常数“0x8765”和“0x0000”,但如果按照图24所示的连接,则只存入一个16位常数“0x8765”即可。这在设置使小数点以后全部为零的固定小数点数值的情况下非常方便。
(第五变形例)下面说明第五变形例。
依据第五变形例的处理器与上述实施例1相比较,在一边将常量寄存器36的存储值移位一边累积新的常量这一点上是相同的,但在具有将能够连结被直接指定作为第一运算字段59的源操作数的常量和已经存入常量寄存器36中的常量而生成的新的32位常量作为第一运算字段59的实际源操作数,并将其提供给第一运算部件37的功能上不同。
下面具体说明与上述实施例1的不同点。
图25是依据第五变形例的常量寄存器36的外围电路结构及连接关系的方框图。
读出标记存储部件28是用于存储常量寄存器36的内部状态的1位存储器,用于分析是否应对常量寄存器36清零。
图28是表示读出标记存储部件28的值的变化的状态迁移图。在常量寄存器36的存储值被读出且向常量寄存器36进行常量存储的情况下,读出标记存储部件28的值被设为“1”。在读出标记存储部件28的值为“1”的状态下,在指定存储常量的操作时,通过常量寄存器控制部件490的控制使常量寄存器36的内容在常量被设定之前被清零。然后,读出标记存储部件28的值被设为“0”。
通过留意上述读出标记存储部件28,能够在存储新的常量时判断有无清零的必要,并没有必要在使用常量寄存器36的值的时刻对常量寄存器36清零。由此,使如下所示的常量寄存器36的全部存储值的再利用成为可能。
依据本变形例的处理器针对图2所示的各种格式的指令,根据读出标记存储部件28的值执行以下不同操作。依据本变形例的处理器将读出标记存储部件28的值设为“1”并将其作为初始状态。
关于格式码(P0.0字段11的存储值)“0”(1)读出标记存储部件28的值为“1”时首先,执行第一运算字段59中指定的“op1”。源操作数为“Rs1”,目标操作数为“Rd1”。
与此同时,执行第二运算字段60中指定的“op2”。源操作数为“Rs2”,目标操作数为“Rd2”。
接着,P1.0字段52中指定的“const”被存入常量寄存器36的36h,36a-36g被清零。然后,读出标记存储部件28的值设为“0”。
(2)读出标记存储部件28的值为“0”时首先,执行第一运算字段59中指定的“op1”。源操作数为“Rs1”,目标操作数为“Rd1”。
与此同时,执行第二运算字段60中指定的“op2”。源操作数为“Rs2”,目标操作数为“Rd2”。
接着,由于常量寄存器36的36b-36h被向左移4位到36a-36g,所以P1.0字段52中指定的“const”被存入常量寄存器36的36h。读出标记存储部件28的值仍为“0”。
关于格式码“1”(1)读出标记存储部件28的值为“1”时首先,执行第一运算字段59中指定的“op1”。目标操作数为“Rd1”,源操作数为P2.1字段54中指定的4位常量“const1”。
与此同时,执行第二运算字段60中指定的“op2”。源操作数为“Rs2”,目标操作数为“Rd2”。
接着,P1.0字段52中指定的“const”被存入常量寄存器36的36h,36a-36g被清零。然后,读出标记存储部件28的值设为“0”。
(2)读出标记存储部件28的值为“0”时首先,执行第一运算字段59中指定的“op1”。目标操作数为“Rd1”,源操作数为连接常量寄存器36的36b-36h和P2.1字段54中指定的4位常量“const1”而成的32位常量。由于常量寄存器36的内容被读出,故读出标记存储部件28的值设为“1”。
与此同时,执行第二运算字段60中指定的“op2”。源操作数为“Rs2”,目标操作数为“Rd2”。
接着,由于此时读出标记存储部件28的值为“1”,所以P1.0字段52中指定的“const”被存入常量寄存器36的36h,36a-36g被清零。然后,读出标记存储部件28的值没为“0”。
关于格式码“2”(1)读出标记存储部件28的值为“1”时首先,执行第一运算字段59中指定的“op1”。源操作数为“Rs1”,目标操作数为“Rd1”。
与此同时,执行第二运算字段60中指定的“op2”。源操作数为“Rs2”,目标操作数为“Rd2”。
接着,判断是否满足P1.0字段52中指定的“cc”操作的分支条件,如果满足,则根据PC部件33中的常量寄存器36的内容求出分支目的地的地址,并将其存入PC(程序计数器)中。
读出标记存储部件28的值仍为“1”。
(2)读出标记存储部件28的值为“0”时首先,执行第一运算字段59中指定的“op1”。源操作数为“Rs1”,目标操作数为“Rd1”。
与此同时,执行第二运算字段60中指定的“op2”。源操作数为“Rs2”,目标操作数为“Rd2”。
接着,判断是否满足P1.0字段52中指定的“cc”操作的分支条件,如果满足,则根据PC部件33中的常量寄存器36的内容求出分支目的地的地址,并将其存入PC(程序计数器)中。
最后,读出标记存储部件28的值设为“1”。
关于格式码“3”
(1)读出标记存储部件28的值为“1”时首先,执行第一运算字段59中指定的“op1”。目标操作数为“Rd1”,源操作数为P2.1字段54中指定的4位常量“const1”。
与此同时,执行第二运算字段60中指定的“op2”。源操作数为“Rs2”,目标操作数为“Rd2”。
接着,判断是否满足P1.0字段52中指定的“cc”操作的分支条件,如果满足,则根据PC部件33中的常量寄存器36的内容求出分支目的地的地址,并将其存入PC(程序计数器)中。
读出标记存储部件28的值仍为“1”。
(2)读出标记存储部件28的值为“0”时首先,执行第一运算字段59中指定的“op1”。目标操作数为“Rd1”,源操作数为P2.1字段54中指定的4位常量“const1”。
与此同时,执行第二运算字段60中指定的“op2”。源操作数为“Rs2”,目标操作数为“Rd2”。
接着,判断是否满足P1.0字段52中指定的“cc”操作的分支条件,如果满足,则根据PC部件33中的常量寄存器36的内容求出分支目的地的地址,并将其存入PC(程序计数器)中。
最后,读出标记存储部件28的值设为“1”。
关于格式码“4”(1)读出标记存储部件28的值为“1”时首先,执行第二运算字段60中指定的“op2”。源操作数为“Rs2”,目标操作数为“Rd2”。
接着,将P1.0字段52-P2.2字段55中指定的16位常量“const”存入常量寄存器36的低16位36e-36h,36a-36d被清零。然后读出标记存储部件28的值为“0”。
(2)读出标记存储部件28的值为“0”时首先,执行第二运算字段60中指定的“op2”。源操作数为“Rs2”,目标操作数为“Rd2”。
接着,由于常量寄存器36的低16位36e-36h被移位到36a-36d,所以P1.0字段52-P2.2字段55中指定的16位常量“const”被存入常量寄存器36的低16位36e-36h。读出标记存储部件28的值仍为“0”。关于格式码“5”(1)读出标记存储部件28的值为“1”时首先,执行第一运算字段59中指定的“op1”。源操作数为“Rs1”,目标操作数为“Rd1”。
接着,将P1.0字段52和P3.0字段56-P3.2字段58中指定的16位常量“const”存入常量寄存器36的低16位36e-36h,36a-36d被清零。然后读出标记存储部件28的值为“0”。
(2)读出标记存储部件28的值为“0”时首先,执行第一运算字段59中指定的“op1”。源操作数为“Rs1”,目标操作数为“Rd1”。
接着,由于常量寄存器36的低16位36e-36h被移位到36a-36d,所以P1.0字段52和P3.0字段56-P3.2字段58中指定的16位常量“const”被存入常量寄存器36的低16位36e-36h。读出标记存储部件28的值仍为“0”。关于格式码“6”(1)读出标记存储部件28的值为“1”时首先,执行第一运算字段59中指定的“op1”。目标操作数为“Rd1”,源操作数为连接P1.0字段52中指定的4位常量“const1”和P2.1字段54中指定的4位常量“const1”而成的8位常量。
与此同时,执行第二运算字段60中指定的“op2”。源操作数为“Rs2”,目标操作数为“Rd2”。
(2)读出标记存储部件28的值为“0”时首先,执行第一运算字段59中指定的“op1”。目标操作数为“Rd1”,源操作数为连接常量寄存器36的低24位36c-36h、P1.0字段52中指定的4位常量“const1”和P2.1字段54中指定的4位常量“const1”而成的32位常量。由于常量寄存器36的内容被读出,故读出标记存储部件28的值设为“1”。
与此同时,执行第二运算字段60中指定的“op2”。源操作数为“Rs2”,目标操作数为“Rd2”。
关于格式码“7”
(1)读出标记存储部件28的值为“1”时首先,执行第一运算字段59中指定的“op1”。源操作数为“Rs1”,目标操作数为“Rd1”。
与此同时,执行第二运算字段60中指定的“op2”。目标操作数为“Rd2”,源操作数为连接P1.0字段52中指定的4位常量“const1”和P3.1字段57中指定的4位常量“const1”而成的8位常量。
(2)读出标记存储部件28的值为“0”时首先,执行第一运算字段59中指定的“op1”。源操作数为“Rs1”,目标操作数为“Rd1”。
与此同时,执行第二运算字段60中指定的“op2”。目标操作数为“Rd2”,源操作数为连接常量寄存器36的低24位36c-36h、P1.0字段52中指定的4位常量“const1”和P3.1字段57中指定的4位常量“const1”而成的32位常量。由于常量寄存器36的内容被读出,故读出标记存储部件28的值设为“1”。
关于格式码“8”(1)读出标记存储部件28的值为“1”时首先,执行第一运算字段59中指定的“op1”。目标操作数为“Rd1”,源操作数为连接P1.0字段52中指定的4位常量“const1”和P2.1字段54中指定的4位常量“const1”而成的8位常量。
与此同时,执行第二运算字段60中指定的“op2”。目标操作数为“Rd2”,源操作数为P3.1字段57中指定的4位常量“const2”。
(2)读出标记存储部件28的值为“0”时首先,执行第一运算字段59中指定的“op1”。目标操作数为“Rd1”,源操作数为连接常量寄存器36的低24位、P1.0字段52中指定的4位常量“const1”和P2.1字段54中指定的4位常量“const1”而成的32位常量。由于常量寄存器36的内容被读出,故读出标记存储部件28的值设为“1”。
与此同时,执行第二运算字段60中指定的“op2”。目标操作数为“Rd2”,源操作数为P3.1字段57中指定的4位常量“const2”。关于格式码“9”(1)读出标记存储部件28的值为“1”时首先,执行第一运算字段59中指定的“op1”。目标操作数为“Rd1”,源操作数为P2.1字段54中指定的4位常量“const1”。
与此同时,执行第二运算字段60中指定的“op2”。目标操作数为“Rd2”,源操作数为连接P1.0字段52中指定的4位常量“const2”和P3.1字段57中指定的4位常量“const2”而成的8位常量。
(2)读出标记存储部件28的值为“0”时首先,执行第一运算字段59中指定的“op1”。目标操作数为“Rd1”,源操作数为连接常量寄存器36的低28位36b-36h和P1.0字段52中指定的4位常量“const1”而成的32位常量。由于常量寄存器36的内容被读出,故读出标记存储部件28的值设为“1”。
与此同时,执行第二运算字段60中指定的“op2”。目标操作数为“Rd2”,源操作数为连接P1.0字段52中指定的4位常量“const2”和P3.1字段57中指定的4位常量“const2”而成的8位常量。
关于格式码“A”(1)读出标记存储部件28的值为“1”时首先,执行第二运算字段60中指定的“op2”。目标操作数为“Rd1”,源操作数为连接P2.0字段53-P2.2字段55中指定的12位常量“const2”和P3.1字段57中指定的4位常量“const2”而成的16位常量。
接着,判断是否满足P1.0字段52中指定的“cc”操作的分支条件,如果满足,则根据PC部件33中的常量寄存器36的内容求出分支目的地的地址,并将其存入PC(程序计数器)中。
读出标记存储部件28的值仍为“1”。
(2)读出标记存储部件28的值为“0”时首先,执行第二运算字段60中指定的“op2”。目标操作数为“Rd1”,源操作数为连接P2.0字段53-P2.2字段55中指定的12位常量“const2”和P3.1字段57中指定的4位常量“const2”而成的16位常量。
接着,判断是否满足P1.0字段52中指定的“cc”操作的分支条件,如果满足,则根据PC部件33中的常量寄存器36的内容求出分支目的地的地址,并将其存入PC(程序计数器)中。
最后,读出标记存储部件28的值设为“1”。
关于格式码“B”是只执行1种操作的指令,且无论读出标记存储部件28的值如何,都不参照常量寄存器36的内容。操作数为连接P1.0字段52-P2.2字段55中指定的16位常量“const2”和P3.1字段57-P3.2字段58中指定的8位常量“const2”而成的24位常量。
下面,对译码执行具体指令时依据本变形例的处理器的操作进行说明。
图27是一个示出了用于处理24位常量的流程图。
在本图中,示出了这样的处理过程求出寄存器R0和R1的存储值之差(步骤S100),将24位常数“0x876543”加到该结果上(步骤S101、S102),最后将寄存器R2的存储值传送到寄存器R1中(步骤S103)。
图28是在依据本变形例的处理器中进行图27所示的处理内容的程序示例图。该程序由2个指令171、172构成。下面说明包含了指令171和172且依据本变形例的处理器的操作。
首先,以读出标记存储部件28的值为“1”为初始状态。
(指令171)指令171被装载到指令寄存器10中时,格式译码器21根据指令寄存器10中P0.0字段11的值(“fmt4”),判断出该指令为格式码为“4”的双操作指令,并控制执行部件30以并列执行以下2种操作。
(1)第一操作常量寄存器控制部件490通过控制其内部的8个选择器490a-490h,利用图5(c)所示的存储方法,将保存在P1.0字段12-P2.2字段15中的16位常数(0x8765)存入常量寄存器36的低16位中。常量寄存器36的高16位被清零。然后,读出标记存储部件28的值设为“0”。
(2)第二操作第二运算部件38以通用寄存器R0的内容和通用寄存器R1的内容为输入,在从R0的内容中减去R1的内容后,将结果再次存入通用寄存器R0中。
(指令172)指令172被装载到指令寄存器10中时,格式译码器21根据指令寄存器10中P0.0字段11的值(“fmt6”),判断出该指令为格式码为“6”的双操作指令,并控制执行部件30以并列执行以下2种操作。
(1)第一操作P2.0字段13的操作为以常量为操作数的操作,由于读出标记存储部件28的值为“0”,所以在将连接常量寄存器36的低24位(0x008765)、P1.0字段12中指定的4位常数(0x4)和P2.1字段14中指定的4位常数(0x3)得到的值(0x00876543)与通用寄存器R0的内容相加后,该结果被再次存入通用寄存器R0中。
然后,读出标记存储部件28的值被设为“1”。
(2)第二操作第二运算部件38以通用寄存器R2的值为输入,原样通过后存入通用寄存器R1中。
如上所述,利用常量寄存器36的存储值,通过以连接常量寄存器36和操作中所指定的常量而得到的常量为操作数,能够执行利用2个指令处理24位常量的操作。
图29是在实施例1的处理器中执行与图27所示的流程图内容相同的处理的程序示例图。由比较图29和图28可知,上述实施例1的处理器所用的程序比依据本变形例的处理器所用的程序多1个指令。如图29所示,实施例1的处理器在1个操作中只能进行对常量寄存器的值的设定或常量寄存器的存储值的利用,因此为了完成图27所示的处理,需要执行由在24位常量设定中所必需的2个指令173和174以及利用该常量的指令175合起来的3个指令173-175。其结果是,不能插入无动作操作“nop”(指令175的第二运算字段60)。
如上所述,利用依据本变形例的处理器,可以在生成由常量寄存器累积的常量和在指令操作中指定的常量构成的实质上的操作数的同时,执行利用该常量的操作。由此,与实施例1相比,减少了执行周期数。
以上根据实施例1及其5个变形例,对实现第一目的的处理器进行了说明,但并不意味着本发明仅限于这些实施例及其变形例。即(1)作为将常量存入常量寄存器36中的位置包括从低位开始进行覆盖的方式(例如图5所示的方式)和从高位开始覆盖的方式(例如图24所示的方式)。
而且在将新的常量存入常量寄存器36中时,包括对已经存入的常量移位的方式(例如图5所示的方式)和存入到不同于不移位的位的位置上的方式(图15所示的方式)。
而且,作为常量的高数位的扩展方式,包括进行零扩展(例如图5所示的方式)和进行符号扩展的方式(例如图20所示的方式)。
而且,作为进行零扩展和符号扩展的时刻,包括在向常量寄存器36存储之前进行的方式(例如图20所示的方式)和从常量寄存器36读出之后进行的方式(例如图23所示的方式)。
而且,作为进行零扩展的具体实现方式,包括在读出常量寄存器36的存储值之后,在常量寄存器36中全部存入0的方式(例如图5所示的方式)和在存储常量和读出常量时插入定值“0”的方式(例如图23所示的方式)。
从而,通过组合这些有关存储位置、有无移位、扩展方式、扩展时刻、以及读出后的自动清零的各种方式,可以很容易地构成多种不同方案。
在上述实施例中,示出了只包括上述各方式中的一方面的示例,但本发明并不仅限于此。例如,包括用于进行常量的零扩展的结构和用于进行符号扩展的结构,且根据指令中设置的操作数来选择其中一种结构进行操作的方式也是可以的。
(2)在上述实施例中示出了处理数值常量的例子,当然也同样适用于字符常量。分开设置在多个指令中的字符常量也可以通过向常量寄存器36进行多次存储,还原成原来的位数较长的字符常量。
(3)在上述实施例中,由图2(b)-图2(d)所示的指令格式可知,能够通过1个指令而被存入常量寄存器36中的常量的位数为4位或16位,但本发明对位数的限定并不仅限于此。例如,也可以定义用于将12位和28位常量存入常量寄存器36中的指令格式。为此,最好改变常量寄存器36的外围电路的连接关系。
(4)上述实施例的处理器为包括2个运算部件37、38的VLIW处理器,但本发明也同样适用于只包括1个运算部件且不采用执行用于在1个指令中只指定一种操作的单操作指令的VLIW体系结构的处理器。
特别是,在定长指令的情况下有许多具有未使用区域的指令被定义。例如,MIPS公司的RISC处理器“R2000”执行32位定长指令,但在这个处理器的指令设置中,定义了具有未使用区域的指令(例如ADD指令具有5比特的未使用区域)。而利用本发明则避免了在这样的单操作指令中生成的无用区域的产生。
(5)在上述实施例中,4位操作数“cc”意味着参照常量寄存器36的隐含存储值的间接分支,但本发明并不仅限于此,作为操作数“cc”,也可以包含相对于固定的偏移地址部分而分支的操作和利用通用寄存器35的存储值的间接分支操作。在这种情况下,常量寄存器控制部件32不仅在常量寄存器36的存储值被读出后对常量寄存器36清零,而且在操作数“cc”所表示的分支操作被执行后也对常量寄存器36清零。这些是有关在4位操作数“cc”中配置什么样的操作的设计事项,通过改变分支译码器23和常量寄存器控制部件32可以很容易地实现。
(实施例2)下面对依据实施例2的处理器进行说明。依据实施例2的处理器是实现上述第二目的的处理器,其特征是具有通过只在必要的情况下保存·还原常量寄存器的值来避免任务的前后转换中的无用操作的功能。而且,以0b开头的数值表示二进制数。
(处理器的硬件结构)图30是依据实施例2的处理器500的硬件结构方框图。本处理器由指令寄存器510、指令译码电路520、执行部件530及指令读取部件540构成。在本图中,还同时示出了与本处理器500相连接的外围电路,即用于保存任务前后关系等的外部存储器540。
指令读取部件540由用于存储多个指令的指令存储装置和从指令存储装置读出应执行的指令并将其传送到指令寄存器510中的指令读取电路构成。
指令寄存器510是用于保存从指令读取部件540传送来的指令的16位寄存器。
指令译码电路520对保存在指令寄存器510中的指令译码,并根据该译码结果将控制信号输出到执行部件530。上述指令译码电路520基本上在1个时钟周期内对1个指令译码,并向执行部件530提供控制信号。执行部件530是根据指令译码电路520的译码结果执行指令的电路单元,由执行控制电路300、保存还原无效化电路301、通用寄存器310、运算器311、操作数存取电路312、常量寄存器320、有效位数寄存器321、常量还原电路322及多路转接器330、331、332构成。关于这个执行部件530中的保存还原无效化电路301和常量还原电路322,将在其它附图中予以详细说明。
通用寄存器310为16个32位寄存器R0-R15,根据指令译码电路520的译码结果及执行控制电路300生成的控制信号,存储在这16个寄存器中的值被传送到运算器311和操作数存取电路312中,在这里进行运算或被传送到外部存储器540或只是通过这里后被传送到通用寄存器310中。
常量寄存器320为32位寄存器,根据指令译码电路520的译码结果及执行控制电路300生成的控制信号,存储在这个寄存器中的值被传送到常量还原电路322或操作数存取电路312中。
根据指令译码电路520的译码结果、执行控制电路300生成的控制信号及有效位数寄存器321的值,常量还原电路322利用指令寄存器510中存储的指令中包含的常量和常量寄存器320的存储值,生成新的值,并将其传送到运算器311和操作数存取电路312中,在这里进行运算或被传送到外部存储器540或只是通过这里后被传送到通用寄存器310中。但在象后述的sfst指令一样的只是累积值的情况下,生成新的值,并在只是通过运算器311后将其传送到常量寄存器320中。后面将详细说明新值的生成方法。连接指令寄存器510和执行部件530的13位常量信号线11是用于将指令寄存器中设置的常量传送到执行部件530中的总线。
有效位数寄存器321表示分开的常量被存到常量寄存器320的哪一位为止时,常量寄存器320在被更新为新值的同时,有效位数寄存器321也被更新。在保存存储值指令寄存器510中且使用常量寄存器320中的常量的指令(例如后述的addi指令)时,由执行控制电路300将0b00(全部位无效)存入有效位数寄存器321中。有效位数寄存器321的存储值与常量寄存器320的有效位数的具体对应关系如图31所示。
执行控制电路300是用于根据指令译码电路520的执行结果,控制执行部件530的各个构成部分310-332的控制电路和连接关系的总称,除了常规处理器所包括的构成部分(定时控制电路、操作允许禁止控制电路、状态寄存器及状态管理电路、插入控制电路等)之外,还包括常量寄存器320的控制电路。
保存还原无效化电路301是本处理器所特有的电路,根据来自指令译码电路520和执行控制电路300的指示,在指令寄存器510中所存的指令为常量寄存器320的保存或还原指令且有效位数寄存器321中表示常量寄存器320的值为无效(值为0b00)的情况下,将操作数存取电路312的控制信号303变成后面所述的“无操作”。
运算器311是对2个32位数据进行算术逻辑运算的ALU,并在执行控制电路300的控制下进行操作。
操作数存取电路312是以运算器311的输出为操作数地址,以多路转接器332的输出为操作数,在与外部存储器之间进行操作数传送的电路,其内部具有用于保存该操作数和操作数地址的缓冲器。
在保存还原无效化电路301输出的控制信号表示“装入”时,经过操作数存取电路312和多路转接器331读出置于外部存储器540中的1个字,并将其存入通用寄存器310的R0-R15中的任一个,或在后述的常量寄存器320的还原的情况下存入常量寄存器320中。
在控制信号303表示“存储”时,存在通用寄存器310的R0-R15中的任一个或在后述的常量寄存器320的保存的情况下存在的常量寄存器320中的值经多路转接器332选择,由操作数存取电路312写入外部存储器540中。
在控制信号303表示“无操作”时,操作数存取电路312忽视操作数地址和操作数,并不进行向外部存储器540的传送。
(指令格式)下面对本处理器的指令进行说明。图32中示出了用于说明本实施例的指令及其格式。如图32所示,每个指令为16位定长指令,高3位为操作1(op1)的字段,sfst指令通过对这个字段译码来判断指令的种类。在sfst指令以外的指令中,后面的3位为操作2(op2)的字段,这些指令通过对op1和op2译码来判断指令的种类。在addi指令中,后面的4位为寄存器字段(Rn),用于放置目标寄存器号。接着的字段中为常量(imm6),用于放置在Rn中进行加法运算的6位常量。
下面说明各指令的功能。
(1)sfst imm13上述指令是将常量寄存器320的值向左移13位,在低位侧插入13位立即数(imm13)并将其存入常量寄存器320中的指令。在常量寄存器320无效时,只对13位立即数进行符号扩展并将其存入常量寄存器320中。(sfst是shift-set的缩写)
(2)addi imm6,(Rn)上述指令将常量寄存器320的值向左移6位,将在低位侧插入了13位立即数(imm13)的值与通用寄存器310中Rn(n为0-15)的值相加并将其存入Rn中的指令。在常量寄存器320无效时,只对13位立即数进行符号扩展并用于加法运算。在执行本指令时,常量寄存器320被无效。
(3)save IMR,(Rn)上述指令为将常量寄存器320保存到外部存储器540中的指令,并且该保存目标地址利用通用寄存器310中Rn的值。
(4)restore(Rn),IMR上述指令为将常量寄存器320还原到外部存储器540中的指令,并且该保存器标地址利用通用寄存器310中Rn的值。
(常量还原电路322的详细说明)图33为常量还原电路322的详细结构方框图。
3220是连接从指令寄存器510经总线11传送的13位常量和常量寄存器320的存储值的低19位的电路,常量寄存器320的值位于高位侧,整个值为32位。
同样地,3221是连接从指令寄存器510经总线11传送的6位(13位中的低6位)常量和常量寄存器320的存储值的低26位的电路,常量寄存器320的值位于高位侧,整个值为32位。
3222是将从指令寄存器510经总线11传送的13位常量符号扩展为32位的电路,3223是将从指令寄存器510经总线11传送的6位(13位中的低6位)常量符号扩展为32位的电路。
3224-3226是多路转接器,3227是次有效位数生成电路。
图34是定义多路转接器3224、3225、3226和次有效位数生成电路3227的操作的图,根据执行控制电路300的控制信号305和有效位数寄存器321的值来确定操作。在图34中的sfst和use表示指令寄存器510中保存的指令的种类时,根据执行控制电路300的控制信号来进行表示。sfst是sfst指令被保存在指令寄存器510中时的操作,use是使用addi等指令的常量的指令被保存时的操作。次有效位数是次有效位数生成电路3227的输出值,在下一个时钟周期被存入有效位数寄存器321中。
(保存还原无效化电路301的详细说明)图35示出了保存还原无效化电路301的具体结构。
逻辑电路3010是在有效位数寄存器321的存储值为0x00时输出1,在为其它值时输出0的电路。门单元3011为AND电路,门单元3012为OR电路,门单元3013、3014为以AND电路3011的输出端的逻辑反转为输入的AND电路。
在信号线302(a)、302(b)、302(c)表示图30中3位宽的控制信号302的每一位,信号线303(a)、303(b)、303(c)表示图30中3位宽的控制信号303的每一位时,根据图30的操作数存取电路312,分别对无操作、装入、存储进行控制。
控制信号304是图30所示的执行控制电路300输出的控制信号,并在指令寄存器510中保存的指令为save指令或restore指令时输出1而在其它情况下输出0。
利用此结构,在有效位数寄存器321的存储值为0b00且控制信号304为1,即指令寄存器510中保存的指令为save指令或restore指令的情况下,使与控制信号302无关的控制信号303(a)为1,303(b)和303(c)为0,操作数存取电路312的操作为“无操作”。
另一方面,在在有效位数寄存器321的存储值不为0b00且控制信号304为0的情况下,控制信号302被原封不动地输出到控制信号303中。
(处理器的操作)下面对执行具体指令时本处理器的操作进行说明。在本实施例中假定通过不同时的插入来起动任务前后关系的转换。在此省略了关于插入处理程序的具体处理,而只对常量寄存器的保存和还原操作进行说明。
图36(a)是用于说明本处理器操作的流程图,图36(b)示出了其对应的程序(指令571-573)清单。这里,示出了将32位常数0x12345678加到通用寄存器R0中的程序。图36(c)-(f)示出了有效位数寄存器321及常量寄存器320的内容随着上述指令571-573的执行的变化,图36(g)示出了执行指令573时实际上的操作数。
下面说明每条指令571-573的操作。在本程序执行前,如图36(c)所示,表示常量寄存器320无效的值0b00被存入有效位数寄存器321中。
(1)sfst 0x0246(指令571)在上述指令571被保存在指令寄存器510中时,执行控制电路300执行进行以下控制的指令571。
首先,在常量还原电路322中,如图34所示,由于指令寄存器510中保存的指令为sfst指令且有效位数寄存器321为0b00,多路转接器3225选择A,多路转接器3226选择B,所以向多路转接器330输出对保存在指令寄存器510中的指令571的13位立即数0x0246进行13位符号扩展后的值0x00000246,向有效位数寄存器321输出0b01。
向多路转接器330输出的值0x00000246在只是通过运算器311后,经多路转接器331被传送到常量寄存器320中。有效位数寄存器321被更新为0b01。
通过以上操作,常量寄存器320及有效位数寄存器321的内容变成如图36(d)所示。由于控制信号302和303表示“无操作”,所以操作数存取电路312不进行任何操作。通用寄存器310也没有任何变化。
(2)sfst 0x1159(指令572)在上述指令572被保存在指令寄存器510中时,执行控制电路300执行进行以下控制的指令572。
首先,在常量还原电路322中,如图34所示,由于指令寄存器510中保存的指令为sfst指令且有效位数寄存器321为0b01,多路转接器3224选择A,多路转接器3226选择A,所以向多路转接器330输出将常量寄存器320的存储值0x00000246向左移13位且将保存在指令寄存器510中的指令的13位立即数0x1159插入到低13位后的值0x0048d159,向有效位数寄存器321输出0b10。
向多路转接器330输出的值0x0048d159在只是通过运算器311后,经多路转接器331被传送到常量寄存器320中。有效位数寄存器321被更新为0b10。
通过以上操作,常量寄存器320及有效位数寄存器321的内容变成如图36(e)所示。由于控制信号302和303表示“无操作”,所以操作数存取电路312不进行任何操作。通用寄存器310也没有任何变化。
(3)addi 0x38,R0(指令573)
在上述指令573被保存在指令寄存器510中时,执行控制电路300执行进行以下控制的指令573。
首先,在常量还原电路322中,如图34所示,由于指令寄存器510中保存的指令为addi指令(适用于use栏)且有效位数寄存器321为0b10,多路转接器3224选择B,多路转接器3226选择A,所以向多路转接器330输出将常量寄存器320的存储值0x0048d159向左移6位且将保存在指令寄存器510中的指令的6位立即数0x38插入到低6位后的值0x12345678(图36(g)所示的值),向有效位数寄存器321输出0b00。
向多路转接器330输出的值0x12345678被输入到运算器311的A端。另外,从通用寄存器310中读出R0的值,将其输入到运算器311的另一端B端。在执行控制电路300的控制下,运算器311将各个输入值相加,经多路转接器331传送到通用寄存器310的R0中。有效位数寄存器321被更新为0b00。
通过以上操作,常量寄存器320及有效位数寄存器321的内容变成如图36(f)所示。由于控制信号302和303表示“无操作”,所以操作数存取电路312不进行任何操作。
这里,关于在上述程序中发生插入且进行前后关系转换时的操作,说明各自插入的位置不同的2种情况。
(情况1)下面说明在上述程序中的addi指令573之前发生插入并进行任务前后关系转换的情况。
图37(a)是情况1中的指令流的流程图。此种情况下,如图36(e)所示,在0b10(低26位有效)被存入有效位数寄存器321中时,常量寄存器320中的0x0048d159进行插入处理。
在插入处理中保存常量寄存器320的情况下,save IMR,(R15)指令被保存在指令寄存器510中并被执行。执行控制电路300执行进行以下控制的指令。
常量寄存器320的存储值经过多路转接器332,作为操作数被输入到操作数存取电路312中。另一方面,通用寄存器310中R15的值被输入到运算器311的B端,在通过后作为操作数地址被输入到操作数存取电路312中。
执行控制电路300在控制信号304表示保存或还原指令时输出1,通过将“存储”输出到控制信号302中进行保存。
在保存还原无效化电路301中,由于有效位数寄存器321的存储值为0b10,所以控制信号302被原样输出到控制信号303中并且操作数存取电路312进行“存储”操作,即常量寄存器320的保存。有效位数寄存器321的内容作为本处理器的状态寄存器的一部分,在状态寄存器的保存同时而被保存。
在进行常量寄存器320的还原时,首先状态寄存器中所具有的有效位数寄存器321的内容0b10被还原,然后,restore (R15),IMR指令被保存在指令寄存器510中并被执行。执行控制电路300执行进行以下控制的指令。
通用寄存器310中R15的值被输入到运算器311的B端,在通过后作为操作数地址被输入到操作数存取电路312中。
执行控制电路300在控制信号304表示保存或还原指令时输出1,通过将“装入”输出到控制信号302中进行还原。
在保存还原无效化电路301中,由于有效位数寄存器321的存储值为0b10,所以控制信号302被原样输出到控制信号303中并且操作数存取电路312进行“装入”操作,读出的值0x0048d159经过多路转接器331并被传送到常量寄存器320中,即进行常量寄存器320的还原。
(情况2)下面说明在上述程序中的addi指令之后发生插入并进行任务前后关系转换的情况。
图37(b)是情况2中的指令流的流程图。此种情况下,如图36(f)所示,在0b00(全部位均无效)被存入有效位数寄存器321中时,常量寄存器320中的0x0048d159进行插入处理。
在插入处理中保存常量寄存器320的情况下,save IMR,(R15)指令被保存在指令寄存器510中并被执行。执行控制电路300执行进行以下控制的指令。
常量寄存器320的存储值经过多路转接器332,作为操作数被输入到操作数存取电路312中。另一方面,通用寄存器310中R15的值被输入到运算器311的B端,在通过后作为操作数地址被输入到操作数存取电路312中。
执行控制电路300在控制信号304表示保存或还原指令时输出1,通过将“存储”输出到控制信号302中进行保存。
在保存还原无效化电路301中,由于有效位数寄存器321的存储值为0b00、控制信号304为1,所以控制信号302将“无操作”输出到在保存还原无效化电路301中被无效掉的控制信号303中。从而,操作数存取电路312不进行任何操作。有效位数寄存器321的内容作为本处理器的状态寄存器的一部分,在状态寄存器的保存同时而被保存。
在进行常量寄存器320的还原时,首先状态寄存器中所具有的有效位数寄存器321的内容0b00被还原,然后,restore(R15),IMR指令被保存在指令寄存器510中并被执行。执行控制电路300执行进行以下控制的指令。
通用寄存器310中R15的值被输入到运算器311的B端,在通过后作为操作数地址被输入到操作数存取电路312中。
执行控制电路300在控制信号304表示保存或还原指令时输出1,通过将“装入”输出到控制信号302中进行还原。
在保存还原无效化电路301中,由于有效位数寄存器321的存储值为0b00、控制信号304为1,所以控制信号302将“无操作”输出到在保存还原无效化电路301中被无效掉的控制信号303。从而,操作数存取电路312不进行任何操作。
由此,在情况2中操作数存取被无效并不进行对外部存储器540的实际传送。为此,减少了由常量寄存器的部分保存/还原引起的存储器访问次数,缩短了任务前后关系转换的处理时间。如本实施例所示,在立即数被分开设置且累积于常量寄存器320中的情况下,位数大的常量越少,常量寄存器320有效的机会就越少。从而,与位数大的常量越少的程序相比,本发明的效果就越明显。
图38是简略示出上述情况1及2中的处理器操作,即关于常量寄存器320的值的保存及还原的操作的流程图。这个处理器在执行常量寄存器320的保存或还原时(步骤S200),参照有效位数寄存器321的存储值,并在该存储值为0b00,即有效常量没有被存储在或未曾存储在常量寄存器320中时(步骤S201),不进行上述无用的保存及还原(步骤S202)。
以上根据实施例2说明了达到第二目的的处理器,但本发明并不仅限于此实施例2。即,(1)在实施例2中,利用了16位定长指令格式并利用13位和6位立即数,但本发明并不仅限于此。而且,利用32位寄存器作为通用寄存器310和常量寄存器320,但同样地,本发明并不仅限于此。
(2)以包括1个常量寄存器320的实施例2的处理器为例进行了说明,但本发明也可以包括多个常量寄存器320。
(3)在实施例2的处理器中示出了任务前后关系转换的保存和还原,但本发明同样适用于在与任务前后关系转换无关的常量寄存器和存储装置之间进行传送的情况。
(4)在实施例2的处理器中,设计了用于表示常量寄存器320中所存储的常量的有效位数的有效位数寄存器321,但其他形式的用于保存有效/无效状态的寄存器也能够得到相同的效果。
(5)在实施例2的处理器中,以addi指令作为使用立即数的指令,但本发明也可以利用其他同样使用立即数的指令。
(6)在实施例2的处理器中,分别定义save IMR,(Rn)指令和restore(Rn),IMR指令作为常量寄存器320的保存·还原指令,但也可以利用其他形式的指令。
例如,由包括在寄存器列表形式的操作数中定义常量寄存器320的保存还原和包含在通常任务前后关系中的通用寄存器310(Rn)中的一个或状态寄存器的保存·还原来定义常量寄存器320的保存·还原也是可以的。后者是在保存·还原例如R15和状态寄存器时将常量寄存器320作为隐含的保存·还原对象的指令。
在save IMR,(Rn)指令和restore(Rn),IMR指令中,存在由于常量寄存器320的保存·还原无效而使得用于这些专用指令的代码长度被增加的问题,但通过上述操作,就具有了不需要明确指定常量寄存器320的保存·还原的指令,从而缩短了代码长度的效果。
(7)在实施例2中,有效位数寄存器321的值作为状态寄存器的一部分在任务前后关系转换时被保存及还原,但本发明并不仅限于此。如图39所示,也可以定义用于保存及还原有效位数寄存器321的值的专用指令。在图39中,IMB表示有效位数寄存器321,Rn表示用于存储应保存或还原的外部存储器540地址的通用寄存器310。
(8)在实施例2的处理器中,执行在一个如sfst指令和addi指令一样的指令中定义一种操作的指令,但也可以执行在如实施例1的1个指令中定义多种操作的所谓的VLIW形式的指令。
图40是相当于在实施例1的VLIW处理器中附加了实施例2的任务前后关系转换功能的VLIW处理器600的功能方框图。这个处理器600的执行部件630包括具有与实施例2功能相同的有效位数寄存器631及保存还原无效化电路632。
图41是本处理器600执行的VLIW670的示例。在格式码54为0x0的指令670的第二运算字段60中,设置了用于将常量寄存器R15的内容保存到通用寄存器R3所表示的外部存储器的存储区域中的操作(save)。由第二运算译码器25对这个操作数译码时,常量寄存器36的内容通过第二运算部件38被发送到操作数存取部件40中。然后,保存还原无效化电路632参照该时刻有效位数寄存器631的值,按照图38所示的流程,允许或禁止操作数存取部件40将上述内容保存到外部存储器中。
由此,通过在实施例1的常量还原型VLIW处理器中附加实施例2的任务前后关系转换功能,实现了能够避免在插入NOP指令过程中无用代码长度的增加和任务转换中无用关系的保存及还原的处理器,即支持缩短代码长度并高速执行任务转换的VLIW处理器。
权利要求
1·一种对指令进行译码并执行指令的处理器,包括·用于保存上述指令的指令寄存器;·用于对所保存的指令译码的译码装置;·具有用于保存常量的存储区域的常量寄存器;·常量存储装置,在上述指令中设置了应存于上述常量寄存器中的常量时,由上述译码装置进行译码的情况下,在常量没有被存入上述常量寄存器中时将上述指令中设置的常量存入上述常量寄存器中,在其它常量已被存入上述常量寄存器中时,原样保留该常量并将上述指令中设置的常量存入上述常量寄存器中;以及·执行装置,用于在上述指令为利用上述常量寄存器的运算指令时由上述译码装置进行译码的情况下,读出存在上述常量寄存器中的全部常量并执行上述运算。
2·如权利要求1所述的处理器,其中上述常量存储装置一边将已经存在上述常量寄存器中的常量移位,一边存储上述指令中所设置的常量。
3·如权利要求2所述的处理器,其中上述常量存储装置从上述常量寄存器的低数位向高数位顺序存储和累积常量。
4·如权利要求3所述的处理器,其中包括对上述常量至少进行零扩展或符号扩展中的一种扩展处理的扩展装置。
5·如权利要求4所述的处理器,其中上述扩展装置对存储在上述常量寄存器中的前面的常量进行上述扩展处理。
6·如权利要求4所述的处理器,其中上述扩展装置对从上述常量寄存器中读出的常量进行上述扩展处理。
7·如权利要求2所述的处理器,其中上述常量存储装置从上述常量寄存器的高数位向低数位顺序累积和存储常量。
8·如权利要求1所述的处理器,其中上述常量存储装置不移动上述常量寄存器中已存入的常量,将上述指令中所设置的常量存入该常量的相邻位置。
9·如权利要求8所述的处理器,其中上述常量存储装置从上述常量寄存器的低数位向高数位顺序累积和存储常量。
10·如权利要求8所述的处理器,其中上述常量存储装置从上述常量寄存器的高数位向低数位顺序累积和存储常量。
11·如权利要求1所述的处理器,其中上述常量存储装置在利用上述执行装置读出上述常量寄存器中所存储的常量后,在上述常量寄存器中存入零。
12·如权利要求1所述的处理器,其中上述执行装置具有根据上述指令执行分支操作的分支执行部件,上述常量存储装置在上述分支执行部件执行分支操作时,将零存入上述常量寄存器中。
13·如权利要求1所述的处理器,还包括这里上述处理器与用于存储处理器内部状态的外部存储器相连接;·保存装置,用于在上述指令为将上述常量寄存器的内容保存到上述外部存储器中的保存命令时并由上述译码装置进行译码的情况下,执行该保存操作;·保存禁止装置,用于在常量没有被存入上述常量寄存器中时,禁止由上述保存装置进行的上述内容的保存。
14·如权利要求13所述的处理器,还包括·还原装置,用于在上述指令为将上述外部存储器的内容还原到上述常量寄存器中的还原命令时并由上述译码装置进行译码的情况下,执行该还原操作;·还原禁止装置,用于在上述还原指令指示与上述保存禁止装置所禁止的保存相对应的还原操作时,禁止上述还原装置对上述内容的还原。
15·如权利要求14所述的处理器,还包括·有效信息存储装置,用于存储表示常量是否被存入上述常量寄存器中的有效信息;上述保存装置具有用于将上述有效信息存储装置中所存储的有效信息保存到上述外部存储器中的有效信息保存部件,上述保存禁止装置在通过参照上述有效信息,判断出常量没有被存入上述常量寄存器中时,禁止保存上述内容,上述还原装置具有用于将上述外部存储器中所保存的有效信息还原到上述有效信息存储装置中的有效信息还原部件,上述还原禁止装置在通过参照上述外部存储器中所保存的有效信息,判断出上述还原指令指示与上述保存禁止装置所禁止的保存相对应的还原操作时,禁止还原上述内容。
16·如权利要求15所要求的处理器,其中上述有效信息保存部件在上述指令寄存器中保存的指令为上述保存指令时并由上述译码装置进行译码的情况下,将上述有效信息保存到上述外部存储器中,上述有效信息还原部件在上述指令寄存器中保存的指令为上述还原指令时并由上述译码装置进行译码的情况下,将外部存储器中所保存的有效信息还原到上述有效信息存储装置中。
17·如权利要求16所述的处理器,其中上述有效信息表示上述常量寄存器中所存储的常量的有效位数,在上述有效信息为零时,上述保存禁止装置禁止上述保存操作,在上述有效信息为零时,上述还原禁止装置禁止上述还原操作。
18·一种对包含了用于设置指定指令格式的格式码的格式字段和用于指定能够并列执行的操作的多个操作字段的指令进行译码并执行该指令的VLIW处理器,包括·用于保存上述指令的指令寄存器;·用于对所保存的指令译码的译码装置;具有通过参照上述格式码,对设置在至少一个上述操作字段中的常量进行译码的格式译码部件;·具有用于保存常量的存储区域的常量寄存器;·常量存储装置,在上述指令中设置了应存于上述常量寄存器中的常量时,由上述译码装置进行译码的情况下,在常量没有被存入上述常量寄存器中时将上述指令中设置的常量存入上述常量寄存器中,在其它常量已被存入上述常量寄存器中时,原样保留该常量并将上述操作字段中设置的常量存入上述常量寄存器中;以及·执行装置,用于在上述指令为利用上述常量寄存器的运算指令时由上述译码装置进行译码的情况下,读出存在上述常量寄存器中的全部常量并执行上述运算。
19·如权利要求18所述的处理器,其中上述常量存储装置一边将已经存在上述常量寄存器中的常量移位,一边存储上述操作字段中所设置的常量。
20·如权利要求19所述的处理器,其中上述常量存储装置从上述常量寄存器的低数位向高数位顺序存储和累积常量。
21·如权利要求20所述的处理器,其中包括对上述常量至少进行零扩展或符号扩展中的一种扩展处理的扩展装置。
22·如权利要求21所述的处理器,其中上述扩展装置对存储在上述常量寄存器中的前面的常量进行上述扩展处理。
23·如权利要求21所述的处理器,其中上述扩展装置对从上述常量寄存器中读出的常量进行上述扩展处理。
24·如权利要求19所述的处理器,其中上述常量存储装置从上述常量寄存器的高数位向低数位顺序累积和存储常量。
25·如权利要求18所述的处理器,其中上述常量存储装置不移动上述常量寄存器中已存入的常量,将上述操作字段中所设置的常量存入该常量的相邻位置。
26·如权利要求25所述的处理器,其中上述常量存储装置从上述常量寄存器的低数位向高数位顺序累积和存储常量。
27·如权利要求25所述的处理器,其中上述常量存储装置从上述常量寄存器的高数位向低数位顺序累积和存储常量。
28·如权利要求18所述的处理器,其中上述常量存储装置在利用上述执行装置读出上述常量寄存器中所存储的常量后,在上述常量寄存器中存入零。
29·如权利要求18所述的处理器,其中上述执行装置具有根据上述指令执行分支操作的分支执行部件,上述常量存储装置在上述分支执行部件执行分支操作时,将零存入上述常量寄存器中。
30·如权利要求18所述的处理器,还包括这里上述处理器与用于存储处理器内部状态的外部存储器相连接;·保存装置,用于在上述指令为将上述常量寄存器的内容保存到上述外部存储器中的保存命令时并由上述译码装置进行译码的情况下,执行该保存操作;·保存禁止装置,用于在常量没有被存入上述常量寄存器中时,禁止由上述保存装置进行的上述内容的保存。
31·如权利要求30所述的处理器,还包括·还原装置,用于在上述指令为将上述外部存储器的内容还原到上述常量寄存器中的还原命令时并由上述译码装置进行译码的情况下,执行该还原操作;·还原禁止装置,用于在上述还原指令指示与上述保存禁止装置所禁止的保存相对应的还原操作时,禁止上述还原装置对上述内容的还原。
32·如权利要求31所述的处理器,还包括·有效信息存储装置,用于存储表示常量是否被存入上述常量寄存器中的有效信息;上述保存装置具有用于将上述有效信息存储装置中所存储的有效信息保存到上述外部存储器中的有效信息保存部件,上述保存禁止装置在通过参照上述有效信息,判断出常量没有被存入上述常量寄存器中时,禁止保存上述内容,上述还原装置具有用于将上述外部存储器中所保存的有效信息还原到上述有效信息存储装置中的有效信息还原部件,上述还原禁止装置在通过参照上述外部存储器中所保存的有效信息,判断出上述还原指令指示与上述保存禁止装置所禁止的保存相对应的还原操作时,禁止还原上述内容。
33·如权利要求32所要求的处理器,其中上述有效信息保存部件在上述指令寄存器中保存的指令为上述保存指令时并由上述译码装置进行译码的情况下,将上述有效信息保存到上述外部存储器中,上述有效信息还原部件在上述指令寄存器中保存的指令为上述还原指令时并由上述译码装置进行译码的情况下,将外部存储器中所保存的有效信息还原到上述有效信息存储装置中。
34·如权利要求33所述的处理器,其中上述有效信息表示上述常量寄存器中所存储的常量的有效位数,在上述有效信息为零时,上述保存禁止装置禁止上述保存操作,在上述有效信息为零时,上述还原禁止装置禁止上述还原操作。
全文摘要
一种处理器,包括用于存储常量的常量寄存器36,用于对指令寄存器10中保存的指令的P0.0字段中所设置的格式码进行译码的格式译码器21,以及用于在格式译码器21译出应存在常量寄存器36中的常量被置于该指令中时,一边对常量寄存器中已存入的常量移位,一边将上述新的常量存入常量寄存器中的常量寄存器控制部件32。
文档编号G06F9/46GK1204089SQ9811727
公开日1999年1月6日 申请日期1998年6月16日 优先权日1997年6月16日
发明者高山秀一, 桧垣信生, 田中哲也, 瓶子岳人, 铃木正人 申请人:松下电器产业株式会社
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1