本专利申请要求下列申请以优先权:申请于1999年5月13日的美国临时专利申请、申请号为U.S.Serial No.60/134,253、标题为“Method And Apparatus For Synthesizing And Implementing IntergratedCircuit Designs”,和共同待审的申请于1999年10月14日、申请号为U.S.Serial No.09/418,663、标题为“Method And Apparatus For ManagingThe Configuration And Functionality Of A Semiconductor Design”的专利申请,该申请要求申请于1998年10月14日申请号为U.S.Serial No.60/102,271、并具有同样标题的的美国临时专利申请的优先权。
背景技术
RISC(或称精简指令集计算机)处理器在计算技术中为人所熟知。RISC处理器通常具有利用大幅精简的——相比于非RISC(通常称为“CISC”)处理器而言——指令集的基本特征。一般地,RISC处理器机器指令并非全部微编码化,而是可直接执行、无需解码,从而在运行速度上提供了明显的高效率。而且这一“流线型的”指令处理能力在处理器的设计中又允许进一步的简化(与非RISC装置相比),从而提供了更小的硅片以及更低的制造成本。
RISC处理器通常还具有这样的特征:(i)装入/储存存储器体系结构(亦即仅装入和储存指令具有对存储器的入口,其它指令则经由处理器内的内部寄存器而进行操作);(ii)处理器和编译程序结合;(iii)流水线作业。
流水线作业是一种通过将处理器中的操作顺序分成分立部分——一旦有可能这些分立部分即被高效地同时执行——以提高处理器性能的技术。在典型的流水线化的处理器中,相应于处理器算术运算(如ADD,MULTIPLY,DIVIDE等等)的运算单元通常被“分段”,从而在任一时钟周期中,可令操作的一个特定部分在该单元的一个给定部分完成。图1表示一个具有这样分段的运算单元的典型处理器体系结构。所以这些单元可在任一给定时钟周期对不同的计算结果进行运算。例如在第一时钟周期,两个数A和B被馈送到乘法单元10并由该单元的第一部分12部分地加以处理。在第二时钟周期,来自于A和B相乘的部分结果被传送到第二部分14,而此时第一部分12接收两个新数(比如C和D),开始进行处理。净结果为初始的启动周期之后,每个时钟周期都由运算单元10完成一次乘法运算。
流水线深度会依体系结构而异。在这里上下文中,“深度”一词意指出现于流水线中的分立阶段的数目。总的来说,一条流水线的阶段愈多,运行程序愈快,但也会愈加难以编程——虽然对程序员来说流水线作用显而易见。大多数流水线化的处理器为三阶段(取指令,解码,执行)或四阶段(例如取指令,解码,取操作数,执行或者还可为取指令,解码/取操作数,执行,写回),不过也有使用多于或少于三或四阶段的流水线化的处理器。
在开发一个流水线化处理器的指令集时,必须考虑到若干“冒险”。例如,所谓“结构”或“资源争夺”冒险起因于重叠指令争夺同样的资源(例如总线,寄存器,或其它功能单元),这些冒险通常用一个或更多的流水线阻塞加以解决。所谓“数据”流水线冒险发生于读/写冲突的情况,这种冲突会改变存储器或寄存器存取的顺序。“控制”冒险则一般由程序流中的转移或类似变化所产生。
流水线化处理器通常需要联锁以解决许多这类冒险。例如,考虑这种情况:在一个稍前流水线阶段中的一个后继指令(n+1)需要来自于一个稍后阶段的指令n的结果。对上述问题的一个简单解答是以一个或一个以上的时钟周期来延迟处于解码阶段中的操作数计算。然而这种延迟的一个结果,即为对处理器的一个给定指令的执行时间部分地由流水线内围绕该指令的指令所决定。这就使对处理器的编码优化此复杂化,因为使程序员在编码内确定联锁情况通常是困难的。
可在处理器中用“记分牌”来实现联锁;在这种方法中,为每个处理器寄存器附加一位,用以作为寄存器内容的指示符;具体地说,指示是否(i)寄存器内容已被更新并因此而可以使用,或者(ii)内容正在进行由其它寄存器所写入这样的改动。在有些体系结构中这一记分牌也用于生成联锁,这种联锁防止执行要依赖于记分牌寄存器内容的指令,直至记分牌指示该寄存器可用为止。这种方法被称为“硬件”联锁,这是因为这种联锁纯粹通过记分牌的检查、经由处理器中的硬件而被调用。这种联锁生成“阻塞”,它们阻碍了对于数据依赖指令的执行(从而阻塞了流水线),直至寄存器可用为止。
另外,还可将NOP(空操作操作码)插入编码中,以在需要时延迟相应的流水线阶段。这后一种方法被称为“软件”联锁,具有加大编码长度及程序——使用了要求联锁指令的程序——复杂性的缺点。就其编码结构而言,大量使用了软件联锁的设计同样往往不能充分优化。
在处理器设计中另一个重要的考虑是程序转移或“跳转”。所有的处理器都支持某种类型的转移指令。简而言之,转移指的是程序流被中断或改变的情况。其它的操作——例如循环设置和子例程调用指令——也以类似方式中断或改变程序流。“跳转延迟时隙”一词经常用于表示在一条流水线中,处于解码中的转移——或称跳转——之后的时隙。当等待转移/装入指令完成时,执行在转移(或装入)之后的指令。转移可为有条件的(亦即基于一个或更多的参数的真或数值)或无条件的。还可为绝对的(例如基于绝对内存地址),或是相对的(例如基于相对地址以及不依赖于任一特定的内存地址)。
转移会对流水线系统具有深远影响。在一个转移指令被插入并由处理器的指令解码阶段进行解码(指示该处理器必须开始执行其它的存取)前,在该指令序列中的下一个指令字即已被取出并插入这一流水线中。对于这一问题的一个解答即为清除所取出的指令字并暂停——或称阻塞——进一步的取操作,直至转移指令被执行完毕,如图2所示。但这一方法由于在若干指令周期内执行转移指令的需要,而若干指令周期的数目通常为1和在处理器设计中所使用的流水线深度之间的数。这种结果对于处理器速度及效率是有害的,因为在这一期间处理器不能进行其它操作。
此外,还可使用延迟转移方法。这一方法中,当一个转移指令到达解码阶段时,流水线并不进行清除,而一般是在该转移被执行之前,执行出现于流水线稍早阶段的后续指令。因此当转移指令被解码时,该转移即表现得是以执行流水线中所有后续指令所需的指令周期的数目而延迟。转移方法与上述的多周期转移相比,提高了流水线效率,然而也增加了基本编码的复杂性(还减少了程序员的理解)。
现有技术中已经提出了在数字处理器中用于跳转(转移)控制的各种方法和装置。例如参见作者为WARREN,H.S.名称为“InstructionScheduling for the IBM RISC System/6000 Processor”,IBM Journalof Research and Development,IBM Corporation,Vol.34,no.1,1990,其中使用分离的转移和执行单元;转移单元分配指令给执行单元,并且在分配之前至少部分解码所述指令,以确定所述指令是否设置或使用条件寄存器,并且将所述条件寄存器“锁存”为适合。然而此结构非常复杂,并不能给程序员提供将指令调度进不影响后序转移的预转移指令槽(instruction slot)。还可参见欧洲专利(申请)号为0365188,转让给阿波罗计算机公司,发明名称为“中央处理器条件编码方法和装置”以及“条件寄存器相干展望”研究披露的内容,Industrial Opportunities,Ltd.,no.348,1993年4月,其中每个披露的内容都不是在处理器中执行条件编码和控制跳转/转移指令操作的最优方法。
基于上述,处理器设计员及程序员必须与非联锁体系结构相对,仔细权衡相应于利用硬件或软件联锁的折衷方案。而且,必须考虑在具有选定联锁模式的指令集内,转移指令(以及延迟或多周期转移)的交互作用。对流水线及联锁,需要有一种改进方法,该方法既优化了处理器流水线性能,而同时又为程序员提供了附加的编码灵活性。而且,随更多的流水线阶段(甚至于多条多阶段流水线)添加进处理器设计中,在该处理器内改进流水线性能及编码优化的益处可成倍增加。另外,以某种特定方式、方便地综合这些经过改进的流水线处理器设计以及使用现有综合工具的能力,对于设计员和程序员也具有明显效益。
具体实施方式
现对附图进行编号,全部附图中同样的编号指同样的部分。
在此所用的“处理器”一词意为任何集成电路或其它能够根据至少一个指令字完成一次操作的电子器件,包括——但不限于——诸如本申请受让人所生产的用户配置计算机这样的精简指令集计算机(RISC)处理器,中央处理器(CPU),以及数字信号处理器(DSP)。这些设备的硬件可集成到单独一个芯片(“小片”)上,或分布于两个或更多的小片上。而且处理器的各种功能特征可依照相应于本发明的软件或者固件而完全实现。
另外,本领域普通技术人员会认识到,此处所用的“阶段”一词指的是流水线处理器中各个连续阶段,即阶段1指的是第一流水线阶段,阶段2指的是第二流水线阶段,等等。
还应认识到,尽管以下讨论就VHSIC硬件描述语言(VHDL)而进行,然而还可使用其它如Verilog这样的硬件描述语言,同样成功地描述本发明的各个实施例。而且,尽管使用了一个示范性的Synopsy综合引擎——如Design Compiler 1999.05(DC99)——以对此处提出的各个实施例进行综合,但也可使用其它综合引擎——例如,特别是可从Cadence Design Systems,Inc.购到的Bui1dgates。“IEEE标准1076.3-1997”,IEEE Standard VHDL Synthesis Packages规定了一种工业接受的语言,用于规定硬件定义语言基的设计及综合能力——一个本领域的普通技术人员也许希望能对此加以使用。
最后,应认识到,尽管以下描述说明了逻辑——该逻辑由本申请受让人使用上述综合引擎及VHSIC硬件描述语言进行了综合——的特定实施例,这类实施例在某些方面受到约束,然而这些实施例对于本发明的设计过程来说仅仅为示范性的及说明性的。而且,尽管对于这些实施例规定了1.0μm工艺,其它工艺(如0.35μm或0.18μm)相信也可结合这里所公布的本发明而使用。
现描述根据本发明,经过改进的、控制在处理器内跳转(包括转移、循环设置、子例程调用等等)的方法。
本发明的方法概括地说,包括在处理器指令集内的一个指令字——它设置一个标志——以及一个作为该标志结果的跳转(指令)之间设置一个或更多的联锁。在以下参照图3所描述的一个实施例中,禁止先于某个给定的跳转指令若干预定周期的设置标志指令影响该跳转的执行。例如,要求在一个设置标志指令与任一作为该标志结果的跳转之间由该指令设置最低数目的周期(n)。在另一实施例中(图6),在第一阶段的跳转指令被延迟,直至在某个稍后阶段的设置标志指令被移出该阶段为止。为说明起见,假定处理器结构体系每个机器周期执行一个指令——尽管可认识到可使用其它的结构体系。
考虑一个流水线化的结构体系,其中可令跳转以一个处理器标志为条件,而且该跳转指令在一个早于该标志为一个指令所设置前的阶段被执行。可能在一个有条件跳转的同时执行一个设置标志指令,因为这两个指令在同一时刻处于流水线的不同阶段。假定在每个周期结束时更新处理器标志,则这一有条件跳转就会基于周期开始的值而确定是否改变程序流——而非基于由设置标志指令在该周期当中所计算出的标志值。这样跳转指令就不会受到设置标志指令的影响。
为确保跳转指令会使用由设置标志指令所设的标志值,不执行该跳转指令,直到标志值已被更新为止。因此在设置标志指令的执行与跳转指令的执行之间,会有若干周期(n)。
但如果该跳转由于某种原因而阻塞于流水线上,而且在一个稍后阶段的设置标志指令不受这一阻塞影响、被允许完成并更新处理器标志,则当跳转被允许继续时,它即会以这个更新了的处理器标志为条件并得到一个不同的结果。
熟练程序员会希望确保有用的指令可在设置标志指令与跳转指令之间的所需周期得以执行。如非描述于此的本发明,程序员就不得不确保位于设置标志指令与跳转指令之间的任何指令都不得改变由跳转指令所检测的处理器标志值。
这里所描述的改进的方法和装置允许程序员在某个第一设置标志指令与其相应的有条件跳转之间的所需周期中,调度一个第二设置标志指令,并确保该有条件跳转不受该第二设置标志指令影响——如果这个跳转阻塞于流水线上的话。这就会——举例来说——允许一个第二有条件跳转指令与该第二设置标志指令配成对,其方式使得这两对指令重叠,从而节省了运行时间。
现在参见图3,描述根据本发明、控制在一个流水线化的处理器内跳转的一般化方法的第一实施例。在方法300的第一步骤302,提供一个适于在处理器上运行并包括多个指令字的程序。在该程序中的每个指令字都表示为并包括了多个数据位,并且至少其中一个指令字包括一个设置标志指令(如下面更详细讨论的“xor.f”指令),而至少另一个字包括一个跳转指令。但请注意此处所用的“跳转”一词可指任何转移、跳转、循环设置或调用指令,尽管其它要求改变处理器指令处理流程的指令也相信可与所公布的本发明一起使用。设置标志指令与跳转指令二者的形式与内容都在数字处理器技术中为人所熟知。
设置标志指令字对于跳转指令字可为任何顺序或关系;然而,情况是在程序内至少一个设置标志指令字位于至少一个跳转指令字之前。这一设置标志指令字先于一个后续跳转指令字的这种相对的邻近关系(以程序序列中相应于指令字的机器或处理器周期的数目加以衡量)还会变化。在原有技术方法中,当设置标志指令字以一个程序序列中小于预定增量或数目的指令字而先于一个跳转指令字时,该跳转指令的操作即会受由直接在它的设置标志指令之前所设置标志的影响,相应地,跳转操作也依是否在先于该跳转的时隙中调度进了设置标志指令而变化;设备程序员需要清楚地考虑到这一行为。
相比之下,本发明实施例的联锁特性防止了出现于一个跳转指令之前小于预定增量的一个设置标志指令影响该跳转的操作。特别地,在所描述的实施例中,这个增量包括了一个机器周期,并且相应地任何在处理器中算术逻辑单元(ALU)或其它单元内、在直接优先于该跳转的周期或时隙内的设置标志都不能在该跳转指令完成之前进行标志的设置,所以它不改变跳转所要考虑的标志(例如ALU的那些标志)。
作为一个一般性命题,当在阶段3有一个装入指令,以防止一个在阶段2上的跳转指令(例如“Jcc rn”)与一个在阶段3上的装入指令(例如“LD rn,[…]”)之间可能的锁位情况时,所说明实施例的联锁信号不置于真(即联锁未启动)。在这种情况下,记分牌会防止装入完成,这意味着该记分牌不会被清零、导致一种完全死锁的情况。不认为这种装入排除相应于本发明有问题,因为装入并不设置标志。
在步骤306,对出现于跳转指令一个指令之前的设置标志指令进行解码并执行,从而在ALU或处理器内的其它寄存器内设置指定标志。请注意在本实施例中,在阶段2的一个跳转指令及一个在阶段3的设置标志指令必须依它们能被分析之前的关系而被解码。
下面在步骤308,流水线已从步骤306移来并分析了出现于流水线上的任何跳转及设置标志指令之间的关系。确定了这样的联锁:出现于阶段3的设置标志指令直接在出现于阶段2的跳转指令之前。该跳转指令被阻塞于当前周期的结尾,因为一个用于阶段2的阻塞请求被置于真。为防止设置标志指令影响后续的跳转,设置标志指令也必须被阻塞于当前周期的结尾。这个联锁生成了一个用于阶段3的阻塞请求。在这个周期结束时,该阻塞请求信号防止了在阶段2和阶段3的指令移到流水线上的下一阶段。
在步骤312,被调度到设置标志指令之后的一个跳转指令在阶段2阻塞被取消、并取出了指定跳转的某个稍后时间由处理器进行解码及执行。对指令解码有用的方法及装置为计算机技术领域所熟知,相应地就不在此处进一步详述。
在步骤314,阻塞的(第二)设置标志指令在步骤312的跳转完成的同时也被解码并执行。这种同时完成确保了该第二设置标志指令不影响跳转的结果。
提供了图3方法的以下示例(特别是在本申请人的ARC Core的版本5或“v5”中)用以说明。如前所述,在一个设置标志的指令与一个作为该标志的结果的转移之间要求有最少一个周期;这使得设置标志的指令可被调度到转移之前、不会影响这个转移结果的时隙,如下所述:
xor.f 0,r1,-1 ;为jz指令设置标志
and.f r0,r1,r2 ;不影响转移结果
jz [r10] ;进行跳转
经常以一个NOP(空操作)指令填入该时隙,如下例所示:
xor.f 0,r0,-2 ;测试是否r0为-2
nop ;留下一个空时隙(“填充”)
bz r0_is_minus_2 ;进行跳转
规定这个v5联锁以确保当第二设置标志指令到达阶段3时,该指令不会在转移指令完成前设置标志,并从而使它不能改变该转移所要考虑的标志(如ALU标志)。在上述例子中,联锁检测这种情况会出现的场合,并阻塞在阶段3中的设置标志指令。
所述实施例的v5联锁信号(“ibch_holgp3”)进一步考虑会影响一个跳转的阶段2阻塞的三种类型;
i.后续指令未出现
ii.一个转移(如,Jcc[rn])引用了一个上记分牌的寄存器
iii.一个转移(如,Jcc[rn])由一个扩展阶段2阻塞所保持
i.在ARC v5处理器中,直接后续于一个跳转指令的指令被称为‘延迟时隙’指令。该跳转指令以模式为特征,用以根据转移的结果而控制延迟时隙指令的执行。为进行所要控制的后续指令的执行,它必须处于流水线中。如无后续的指令字可置于阶段1中,跳转指令就会阻塞于阶段2,如一个寄存器‘失误’导致的结果。
ii.如对于一个跳转的目标地址从一个寄存器取得,而该寄存器被标记为一个未完成装入的目的地(一个上了记分牌的寄存器),则该跳转必须被阻塞,直至该装入完成、并且寄存器值被更新为止。
iii.在ARC v5处理器中,提供一个接口以用于增加额外的‘扩展’寄存器。这个接口允许生成一个外部阻塞信号。一个外部阻塞会阻塞一个在阶段2的跳转指令——如果该跳转指令引用了一个扩展寄存器而该扩展寄存器不能在该周期上返回数据的话。
上述“ibch_holdp3”联锁功能的一个总结性VHDL表达式如下:
ibch_holdp3<=‘1’WHEN ip2bch=‘1’
AND imload 3=‘0’
AND((holdup12 Or ihp2_1d_nsc)=‘1’
OR xholdup12=‘1’
OR ivalid=‘0’)ELSE
‘0’;
注意,如果在阶段2的一个指令被阻塞,则相应于ibch_holdp3的逻辑将阻塞在阶段3的任何指令,除非在阶段3的指令为装入。在本实施例中,逻辑并不为设置标志指令进行特别校验,而只是一个可设置标志的指令。
这里的附录A提供了一个示范性VDHL表达式,用于综合ARC Core版本5(v5)的跳转流水线联锁。
注意,除了上述调度到预置空时隙中的NOP外,一个熟练的程序员会构造其编码、使之在这一时隙中完成某种有用操作。对这类编码的选择方案范围很广,依作为一个整体的程序总结构而定。例如在一个例子中,可能在这个预置空时隙中完成转移中的第一个编码逻辑运算。这就使得这个预置空时隙可用于有用的程序执行。再举一例,某些算法可被分段,使得在程序流的两个分支中执行同样的下一个指令。在这种情况下,就可能在这个预置空时隙中编码,令其执行而无论是否使用了这一分支。许多这样的选择方案都是可能的,并被认为属于这里所公布的本发明的范围。
图4表示了综合逻辑的第一实施例,用于实现本发明的v5的跳转流水线联锁。图4的逻辑使用上述的应用了LSI 10k 1.0μm工艺、未加约束的SynopsyDesign Compiler而进行综合。
图5表示了v5跳转流水线联锁的综合逻辑第二实施例,除了包括了“指令有效”信号(ivalid)与ibch_holdp3之间的延迟最小的约束。但可以认识到,还可将其它约束用于选择方案——与/或该ivalid与ibch_holdp3之间最小化约束一起。
现在参见图6,描述根据本发明、控制在一个流水线化的处理器内跳转的一般化方法的第二实施例。在方法600的第一个步骤602中,如前所述地提供了一个适配于运行在处理器上并包括有多个指令字的指令集。至少其中一个指令字包括一个设置标志指令(如上例中的“xor.f”指令),而且至少其中另一个字包括一个跳转指令。
不过相对于图3的方法,图6实施例的联锁不允许将一个NOP或设置标志指令调度到直接在跳转之前的时隙中。反之,处理器首先将设置标志指令移进解码阶段并在步骤604将该指令解码。其次在步骤606,该设置标志指令被移进执行阶段并被执行。此时,确定在执行阶段的指令的标识(步骤608);以下相应于表1描述一种可用于作出这一确定的示范性编码。跳转指令经步骤610而被移进解码阶段并进行解码。该跳转指令被阻塞于这个解码阶段(步骤612)直至经步骤614,设置标志指令被移出执行阶段并相应地设置了标志为止。注意仅在步骤608确定出现了一个设置标志指令时,才会发生步骤612的阻塞。这个跳转指令随后即被移进执行阶段并在步骤616执行。如所易知,这一方法特别允许为“如果—于是”结构而写入一种更紧致的编码。并且可以理解,许多上述步骤(例如设置标志指令移进执行阶段以及跳转指令移进解码阶段)都会同时发生。
以下示范性编码结构(涉及ARC Core的版本6或“v6”)说明图6的方法:
v6 code:xor.f 0,r0,-2;测试是否r0为-2
bz r0_is_minus_2;进行转移
以上v6联锁编码结构允许v5编码的NOP(此处图3)被省略,因为在阶段2的转移会被延迟直到设置标志指令已经移出阶段3并且该指令已被设置为止。v6编码执行时间与v5编码相同,但明显减少了编码长度,因为出现于v5编码中的许多NOP被略去。
对下列类型的有效指令必须在阶段3进行检测及识别,以启动v6联锁:
i.任何设置标志的ALU指令(例如“p3setflags”)
ii.设置标志跳转指令(例如Jcc.F或JLcc.F)
iii.FLAG指令
这些设置标志跳转指令被用于从子例程或中断返回,因为它们允许包含程序计数器及处理器标志的32位寄存器从一个寄存器中的一个单一储存的32位量进行同时重装。
本实施例中对这些指令检测的完成如表1所示:
表1
编码 |
被检测指令类型 |
ibch_p3flagset<=ip3iv WHEN(ip3setflags=‘1’))OR((ip3i=ojcc)AND(ip3_fbit=‘1’)OR((ip3i=oflag)AND(ip3c=so_fag)ELSE ‘0’ |
---ALU---Jcc/JLcc---FLAG |
注意,为生成阻塞,还要求检测出现于阶段2的有效转移指令(例如“ip2bch”)。因此,在下列两个条件同时出现时即生成一个阻塞:
1.在阶段3的一个指令正在试图设置标志;
2.在阶段2的一个转移指令需要使用这些新标志
下列示范性编码结构被用于v6以确定这两个条件是否为真:
表2
编码 |
被检测指令类型 |
ibch_holdup2<=‘1’WHEN(ibch_p3 flagset=‘1’))AND(ip2bch=‘1’)ELSE ‘0’ |
---阶段3设置标志---在阶段2转移 |
注意在所说明实施例中,还可能检测这样一些程序条件,其中或者(a)标志未被设置;或者(b)后续转移指令不校验所设置标志。在这两种情况下,均将在设置标志与后续转移之间的联锁取消。相应地,这些条件的检测就在处理器性能上提供了进一步潜在的改进,这是因为不必为设置标志/转移组合而生成联锁——如检测到该标志不会被设置(如指令随后被取消),或者该标志由不为选定转移条件所测试的指令所设置的话。
下列v6编码的特定例子说明了上述概念:
i.在阶段3的有条件设置标志指令不设置标志(例如add.cc.fr0,r0,r0,导致c=1)
ii.在阶段2的转移指令使用了AL(总是)条件模式。
此处附录B包括了一个相应于本发明的示范性跳转流水线联锁VHDL表达式,如同所用于ARC Core版本6(v6)综合的。但应认识到,上述方法并不限于这一特定实施方案,而是可与任意数量的不同处理器设计结合使用。
图7说明用以实现本发明v6跳转流水线联锁的综合逻辑的第一实施例。图7逻辑使用上述的应用了LSI 10k 1.0μm工艺、未加约束的SynopsyDesign Compiler而进行综合。
图8表示了v6跳转流水线联锁的综合逻辑第二实施例,只是包括了令输入与ibch_holdp3之间的延迟最小的约束。图8逻辑也使用上述的应用了LSI 10k 1.0μm工艺的SynopsyDesign Compiler而进行综合。
进一步可认识到,所实施于v5或v6(或与本发明相一致的其它实施例)的跳转流水线联锁功能可与其它跳转控制或流水线联锁技术结合。例如,描述于本申请人同处办理中的、标题为“用于流水线化处理器中的跳转延迟时隙控制的方法及装置”的美国专利申请中的跳转延迟时隙控制,以及本申请人同处办理中的、标题为“用于处理器流水线分段法及再装配的方法以及装置”的美国专利申请中的流水线撕裂与抓起方法,二者均与此同时提出申请,并且二者均于此全部被包括进来、作为参考资料。此外,各种寄存器编码模式——如公布于本申请人同处办理中的、标题为“用于在流水线化处理器内松散寄存器编码的方法及装置”的美国专利申请——地可与本发明结合使用。
综合方法
现参见图9,描述包括了上述的跳转流水线联锁功能综合逻辑的方法900。综合集成电路逻辑——它具有一个用户定制的(即“软的”)指令集——的一般化方法公布在本申请人同处办理中的、申请于1999年10月14日、申请号为U.S.Patent Application Serial No.09/418,663、标题为“用于管理半导体设计的结构以及功能的方法及装置”专利申请中,这里将其全部引入、作为参考资料。
虽然以下描述就运行于微型计算机或其它类似处理设备上的算法或计算机程序而进行,应认识到其它硬件环境(包括小型计算机、工作站、联网的计算机、“超级计算机”以及大型机)也可被用于应用这一方法。另外,还可将这个计算机程序的一个或一个以上的部分实施于相对于软件的硬件或固件上——如果愿意的话,这类备选实施例完全属于计算机技术人员的技术范围内。
首先,在步骤902根据设计结构而取得用户输入。具体地,由用户选择所要的功能块或功能,并根据需要而增加、减少或生成涉及设计的指令。例如,在信号处理应用中,令CPU包括一个单一的“乘和累加(MAC)”指令通常是有利的。在本发明中,将综合设计的指令集加以改进、以在其中包括上述的跳转流水线联锁(或另一个可比的联锁/控制结构体系)。对各VHDL文件的技术库位置也由用户在步骤902加以规定。本发明中的技术库文件储存所有为综合处理所需的单元,包括——举例来说——逻辑功能、输入/输出计时以及所有相关约束。本发明中,各用户可规定他/她自己的库名及位置,从而增加了更多的灵活性。
其次在步骤903,基于用户输入及在步骤902规定的现有功能库而创建定制的HDL功能块。
在步骤904,基于用户输入及上述库文件而确定设计层次结构。基于该设计层次结构而顺序生成一个层次结构文件、新库文件以及程序描述文件。这里所用的“程序描述文件”一词指普遍使用的UNIX程序描述文件功能或为具有计算机编程技术的人员所熟知的计算机系统类似功能。程序描述文件功能使驻存在计算机系统中的其它软件或算法以规定的顺序运行。另外,它还规定数据文据以及为指定程序的成功运行所必需的其它信息的名字及位置。不过注意,此处所公布的本发明可使用不同于该“程序描述文件”类型的文件结构来产生所需功能。在本发明程序描述文件生成过程的一个实施例中,用户经由显示器而被互动地要求输入关于所需设计的信息,例如“建立”的类型(例如总的设备或系统结构),扩展存储系统数据总线的宽度,扩展的不同类型,寄存器类型/大小,等等。但也可使用与本发明一致的输入信息的许多其它结构及资源。
在步骤906,运行在步骤904生成的程序描述文件以创建结构HDL。该结构HDL将设计中分立的功能块结合在一起,以作出一个完整的设计。
其后在步骤908,运行生成于步骤906的稿本以为仿真程序而创建一个程序描述文件。在步骤908还运行生成一个综合稿本的稿本。
此时在程序中决定是对设计进行综合还是进行仿真(步骤910)。如选择仿真,用户即在步骤912使用生成的设计及仿真程序描述文件运行仿真程序。另外,如选择综合,用户即在步骤914使用综合稿本及生成的设计而进行综合。在综合/仿真稿本完成后,在步骤916评估设计是否合适。例如,一个综合引擎也许会生成设计的一个特定的物理布局,该布局满足了总设计过程的性能条件但不满足这个小片的大小要求。在这种情况下,设计者会对控制文件、库或其它能够影响小片大小的单元进行改动。所得到的设计信息集合随后即被用于重新运行综合稿本。
如果生成的设计是可接受的,设计过程即结束。如果生成的设计是不可接受的,则重新进行开始于步骤902的过程步骤,直到取得一个可接受的设计。以这种方式,方法900为可重复的。
图10表示一个使用1.0μm工艺所生产、包括了图4、5、7或8的逻辑以及此处前述的跳转流水线联锁功能的示范性流水线化处理器。如图10所示,处理器1000为一个ARC微型处理器类的CPU设备,它特别地具有一个处理器核心1002,芯片上存储器1004,以及一个扩展接口1006。这个设备使用定制的、利用本发明的方法900而取得的VHDL设计生产,该设计随后被综合为一个逻辑级表达式,然后使用在半导体技术中为人所熟知的编译、布局以及生产技术归约为一个物理设备。
本领域技术人员会认识到,图10处理器可包含任何普通可得的外围设备,如串行通信设备,并行接口,计时器,高电流驱动器,模数(A/D)转换器,数模转换器(D/A),中断处理器,LCD驱动器,存储器以及其它类似设备。另外,该处理器还可包括用户特定或应用特定的电路元件。本发明并不限于外围设备及其它应用本方法及装置进行组合的电路元件的类型、数量或复杂性。反之,任何由现有半导体工艺的物理能力所施加的限制都会随时间而改进。因此可预期,随半导体工艺的进步,可能应用本发明的集成的复杂性及质量将进一步提高。
还请注意,许多IC(集成电路)设计目前使用微处理器核心或DSP(数字信号处理器)核心。但DSP仅会被要求用于有限数量的DSP功能(如有限脉冲响应分析或者话音编码),或用于IC的快速存储器直接存取(DMA)体系结构。这里所公布的本发明可支持许多DSP指令功能,并且其快速的本地RAM系统提供了对数据的立即存取。通过将公布于此的方法应用于IC的CPU及DSP功能二者,可节约可观的成本。
另外,请注意这里如前所述的方法(及相应的计算机程序)可容易地以相对简单的再综合适应于更新的生产技术,例如0.18或0.1微米工艺——而非使用“硬的”原有微技术系统时,为了适应这类技术通常要采用冗长昂贵的处理。
现在参见图11,描述一个能够综合——尤其是——此处图4-5及7-8的跳转流水线联锁逻辑结构的计算设备的实施例。计算设备1100包括一个母板1101,该母板有一个中央处理器(CPU)1102,随机存储存储器(RAM)1104,以及存储器控制器1105。还提供了一个存储设备1106(如硬盘驱动器或CD-ROM),输入设备1107(如键盘或鼠标),和显示设备1108(如CRT、等离子体或TFT显示器),以及必要的总线以支持主机和外围设备部件的运行。前述的VHDL描述及综合引擎以一个计算机程序目标代码表达式的形式储存在RAM 1104和/或存储设备1106中,以在设计综合期间由CPU 1102使用,后者在计算技术中为人所熟知。用户(未示)在系统运行期间,通过由程序显示器及输入设备1107、将设计结构规范输入进综合程序而综合逻辑设计。由程序所生成的经过综合的设计储存于存储设备1106中以便以后检索,显示于图形显示设备1108,或经由一个串行或并行接口1112而输出到一台外部设备,如打印机、数据存储设备、其它外围设备——如果需要的话。
虽然以上详述已表明、描述、并指出了本发明应用到各个实施例上的新颖特性,然而应认识到本领域技术人员可对所表述的设备或过程的形式及细节作出各种各样的省略、替换或改变而不偏离本发明。本描述绝不意味着限制、而只应将其作为本发明一般原理的说明。本发明的范围应参照权利要求书而确定。