本申请的优先权是于1999年5月13日申请的美国临时专利申请Serial No.60/134,253,标题为“Method And Apparatus For SynthesizingAnd Implementing Intergrated Circuit Designs”和共同待审的于1999年10月14日申请的美国专利申请No.09/418,663,标题为“Method AndApparatus For Managing The Configuration And Functionality Of ASemiconductor Design”,它的优先权是相同标题的于1998年10月14日申请的美国临时专利申请Serial No.60/104,271。
2.描述相关技术
在计算机领域中RISC(精简指令集计算机)处理器是大家所熟知的。RISC处理器与非-RISC(通常所说的“CISC”)处理器相比,通常具有利用充分精简指令集的基本特性。一般RISC处理器机器指令并不全是微编码的,可以立即执行而不用解码,因而在处理速度上可以提供有意义的经济效益。这一“流线型的”指令处理能力还允许进一步简化处理器的设计(与非RISC设备相比),从而允许更小的硅片和更少的生产成本。
此外,RISC处理器典型的特征在于若干或所有的下列属性:(i)装入/存储存储器结构体系(也就是,仅在装入和存储指令时必须存取存储器;其他的指令经过处理器中的内部寄存器操作);(ii)多数指令的单周期执行;(iii)固定长度易于解码的指令格式;(iv)处理器和编译器的统一性,以及较简单和更易于编写的一个编译器;(v)硬连线控制;(vi)较少的寻址模式;(vii)相对静态的指令格式;和(viii)流水线操作。
RISC装入/存储体系结构
如上所述,通过限制存取存储器而只是装入和存储指令,RISC处理器的装入/存储体系结构大幅简化了设备的操作;其他的操作是“寄存器到寄存器”。因此,典型的RISC处理器还使用大量的内部寄存器来处理这样的操作。以下说明一个简单的装入/存储的支持加法的运算:
运算 a=b+c
指令
load r3,a 用来自源定位a的值装入寄存器3
load r4,b 用来自源定位b的值装入寄存器4
add r5,r3,r4 加寄存器3和4,并在寄存器5中存储结果
store e,r5 在目的地位置e存储寄存器5的内容
如上例所示,原有技术的RISC通常是用一个中间寄存器(例如,r5)来保持整个装入/存储操作过程中到存储器的数据。由于大多数RISC处理器依靠这样的装入/存储机制来存取和修改存储器的值,当期望一种简单的存储器存取时指令的效率受损。
寻址模式
一种寻址模式是存取一个可以在任何地方被发现的操作数的一种方法。通常,操作数可以位于存储器中或一个CPU寄存器中或者它们可以是被定义在代码本身中的文字值。在微处理器中可能使用的寻址模式尤其包括,“隐含的”寻址,其中操作码规定操作数;“立即”寻址,其中指令本身包含操作数;“直接”寻址,其中操作数为一个存储器地址或寄存器目的地;“非直接”寻址,其中操作数规定期望操作数的地址;和“索引”寻址,其中添加或者说操作两个或多个值以得到操作数的地址。
在上述列出的寻址模式中,“立即”寻址在一个RISC处理器中经常使用,因为在指令内立即包含操作数。如上所述,一个立即指令(通常由语法“imm”表示或它的语法派生)一般在指令本身中包含操作数。一个立即指令通常具有这样的操作数,一个文字值跟随一个特殊的字符比如“#”符号。操作数的格式可以变化。例如,指令可以具有如下的一个操作数:
$1234 ;操作数是文字值$1234
Buffer ;操作数是被附属到“Buffer”的文字值
‘Y’ ;操作数是ASCII代码大写字母Y
短立即与长立即
当使用立即寻址/数据时,在规定操作数的双亲指令字内可以频繁编码较小的数据字(通常少于指令字大小的的一半)。这种方法经常称为“短立即”寻址/数据;然而,这种方法明显限制了可在单一指令字内使用的可允许地址/操作数。相反,长立即寻址/数据需要多于一个的指令字,但去掉了许多与短立即方式相关的限制。
寄存器编码
RISC处理器内的寄存器紧密地依靠指令集,因为通过指令这些寄存器被频繁规定作为操作数,或可替换的用于产生关于操作数的地址。
原有技术通常这样构成指令编码方案:将指令全部位数中的一或二位用于表示立即操作数的用途,或者通过一种可替换的指令类型隐含立即操作数的用途,如下所示。通常利用一个固定的位集——或者利用其它情况下会用于描述一个源数据寄存器的那些位——在指令字中对立即数据进行编码。
add r0,r1,r2 ;r0=r1+r2; 寄存器-寄存器相加
addi r0,r1,10 ;r0=r1+10; 寄存器-立即相加
这种方法符合试图最小化指令字和寄存器容量的趋势,从而减少了完成处理器设计需要的所要求的硅。然而,利用指令操作码来推断保持在指令内的立即数据减少了可用以编码指令的灵活性。例如,使用上述原有技术编码的方法,不可能有效的使用一个单一的指令产生多个长立即常数。此外,如果一个运算(比如一个减法)是不可交换的,并需要让立即数据表示成减法器或减数,就需要有指令的两个立即版本以及指令的寄存器-寄存器版本。图1a-1c示例了典型的原有技术的用于寄存器-寄存器、寄存器-立即和立即-寄存器指令的寄存器编码格式。使用指令字的一部分来编码立即数据,或者允许一个后面的指令字被全部用于立即数据以便可以允许编码更大范围的值,在这二者中常常不可能进行选择
通常,原有技术的处理器不允许将所有立即数据的组合与所有指令的方式一起使用。使用指令字的一部分来编码立即数据,或者允许一个后面的指令字被全部用于立即数据以便可以允许编码更大范围的值,在这二者中常常不可能进行选择。在一个带有用户-可扩展指令集的处理器中,这就对一个程序员任何使用一个新指令设置了一个限制,尤其是如果新指令的功能是不可交换的。
流水线操作
流水线操作是一种技术,用于通过把处理器中运算的顺序分成片段来增加处理器的性能,当可能时这些片段能以并行方式有效地被执行。在一个典型的流水线处理器中,与处理器运算操作程序(比如加法,乘法,除法等等)相关的运算单元通常被“分段”,以便整个任意时钟周期内在该单元的一个给定的片段中执行操作的一个具体部分。因此,在任意给定的时钟周期这些单元可以在一个不同计算的结果上进行运算。作为一个例子,在第一时钟周期中两个数A和B被送到乘法单元10并由单元的第一片段12进行部分处理。在第二时钟周期中,来自A和B相乘的部分结果被送到第二片段14,同时第一片段12接收开始进行处理的两个新的数(比方说C和D)。最终结果是在一个初始启动周期之后,每个时钟周期由运算单元10执行一次乘法运算。
从一个体系结构到另一个流水线的深度可以变化。在本文中,术语“深度”指的是在流水线中存在的分立阶段的数量。通常,带有较多阶段的一个流水线执行程序较快,但如果流水线的效果是明显可见的话,对于程序员来说编程也更加困难。大多数流水线处理器是三阶段(取指令、解码和执行)或四阶段(比如取指令、解码、操作数提取和执行,或者可替换的,取指令、解码/操作数提取、执行和写回),尽管可以使用更多的或更少的阶段。
当对一个流水线处理器的指令集进行开发时,必须考虑几种不同类型的“冒险”。例如,为了争夺相同的资源(比如总线,寄存器,或其他的功能单元)从重叠指令中会出现所谓的“结构上的”或“资源争夺”的危险性,这一般利用一个或多个流水线阻塞来解决。在读/写冲突的情况下出现所谓的“数据”流水线危险,该冲突可以改变存储器或寄存器存取的顺序。“控制”冒险通常产生于在程序流中的转移或类似的改变。
使用流水线结构通常需要以联锁来处理这些冒险。例如,考虑这种情况,即在一个早先流水线阶段中的一个跟随指令(n+1)需要来自一个后面阶段指令n的结果。解决上述问题的一个简单方法是通过一个或多个时钟周期延迟在指令解码阶段中的操作数计算。然而这种延迟的一个结果是,在处理器上一给定指令的执行时间部分地通过流水线内围绕它的指令而被确定。这使得用于处理器的代码优化变得复杂,因为对于程序员来说经常难于定点代码内的联锁情况。
在处理器中可以使用“记分板”来实现联锁,在该方法中,把一个位附加到每个处理器寄存器以便作为该寄存器内容的一个标志;特别是,是否(i)寄存器的内容已经被更新和因此准备使用,或者(ii)该内容正在经受修改,比如由另外的处理程序被写。这种记分板在一些体系结构中还用于产生防止指令执行的联锁,该指令依赖于来自正在执行的记分板的寄存器的内容,直到记分板表明寄存器准备好为止。这种类型的方法称为“硬件”联锁,因为经过处理器内的硬件,纯粹通过记分板的验证来调用该联锁。这样的联锁产生“阻塞”,防止数据相关指令的执行(从而阻塞流水线),直到寄存器准备好为止。
可替换的,NOP(空操作操作码)可以被插入代码中以便当期望时延迟适当的流水线阶段。后者的方法称为“软件”联锁,具有增加了代码尺寸的缺点,并且使用需要联锁的指令增加了程序的复杂性。此外,大量使用软件联锁的设计不易于对它们的代码结构进行全面的优化。
转移和跳转指令
在处理器设计中另一个重要的考虑是程序转移或“跳转”。所有的处理器都支持某些类型的转移指令。简单来说,在程序流被中断或被改变的情况下涉及转移。此外,诸如循环设置和子程序调用指令也以相同的方式中断或改变程序流。术语“跳转延迟时隙”通常指的是在一个转移或跳转指令被解码之后在一个流水线内的时间段。转移(或装入)之后的指令被执行的同时等待转移/装入指令的完成。转移可以是有条件的(也就是基于一个或多个参数的真值或值)或无条件的。它也可以是绝对的(例如,基于一个绝对存储器地址),或相对的(例如,基于相对的地址并与任何特殊存储器地址无关)。
在流水线系统上进行转移具有一种非常有意义的作用。当一个转移指令被插入并通过处理器的指令解码阶段被解码时(表示处理器必须开始执行一个不同的地址),在指令序列中的下一个指令字已经被提取和插入流水线中。解决该问题的一个方案是清除提取的指令字并暂停或阻塞另外的提取操作直到转移指令被执行完毕。然而,该方法需要在几个指令周期中转移指令的执行结果,通常指令周期的数目等于在处理器设计中使用的流水线的深度。这个结果对于处理器的速度和效率是不利的,因为在这一期间处理器不能实施其它的运算。
可替换的,可以使用一种延迟的转移方法。在该方法中,当一个转移指令到达解码阶段时流水线不被清除,而在转移被执行之前通常执行存在于流水线先前阶段中的后面的指令。因此,在该转移指令被解码的同时由指令周期数被延迟的出现的转移需要执行所有流水线中随后的指令。与上述的多周期转移相比,这种方法增加了流水线的效率,但也增加了基本代码的复杂性(程序员易于理解)。
基于上述内容,在一个流水线和联锁的RISC处理器内对于寄存器编码需要一种改进的方法。这样一种改进的方法可以使程序员/设计者在处理器内的编码寄存器中增加灵活性,而且克服与装入/存储体系结构相关的一些缺点(例如,需要使用一个立即寄存器来存储立即值),从而优化指令集和处理器性能。而且,一个程序员可以在任何处理器的指令字的源字段中推断使用的短立即数据(保持在指令字中)或长立即数据(在一个后面的指令字中)。
理想情况下,该改进的方法还兼容其它的处理器设计考虑方法,其中尤其包括联锁和转移控制机制。此外,在一个具体应用的方式中,能够容易地综合处理这种改进的流水线处理器设计,并且使用这些可获得的综合工具,对于设计者和程序员来说是实际有效的。
发明详述
现在参考给出的附图,其中相同的数字涉及整体相同的部分。
在此所使用的,术语“处理器”意味着包括任何集成电路或其它的能够在至少一个指令字上执行一个操作的其他的设备,包括,但不限于,精简指令集芯片(RISC)处理器,比如由本专利受让人制造的ARC用户结构的芯片,中央处理器(CPU),以及数字信号处理器(DSP)。
此外,作为本领域普通技术人员来说,应理解在此使用的术语“阶段”涉及一个流水线处理器内的各种连续阶段;即阶段1相当于第一流水线阶段,阶段2相当于第二流水线阶段,依此类推。尽管下面的讨论重点针对一个三阶段流水线(即取指令、解码和执行阶段),但应该清楚在此公开的方法和装置可广泛地应用于带有一个或多个流水线的处理器结构,流水线具有多于或少于三阶段。
此外应注意的是,尽管下面的描述仅与VHSIC硬件描述语言(VHDL)有关,然而诸如Verilog的其它硬件描述语言也可以用于描述具有相同作用的本发明的各种实施例。而且,虽然示例了一个Synopsys综合引擎,比如Design Compiler 1999.05(DC99)来用于综合处理在此所述的各种实施例,但也可以使用其它的综合引擎,比如从Cadence Design Systems,Inc.以及其他地方可获得的Buildgates。IEEE std.1076.3-1997,IEEE Standard VHDL Synthesis Packages描述了一种用于规定一种基于硬件描述语言的设计的一种工业接受的语言以及综合处理能力,这对于本领域普通技术人员来说,是可以得到的。
最后,应该清楚尽管下面描述了本申请受让人利用上述的综合处理引擎和VHSIC硬件描述语言来综合处理逻辑的具体实施例,该具体实施例以不同方式受到约束,但这些实施例仅仅作为本发明的设计示例。
现在描述按照本发明的用于松散寄存器编码的方法和装置。通常,本发明利用一种扩展的多位寄存器字域来表示寄存器立即操作数的使用情况。简而言之,本发明包括使用处理器内的寄存器数来表示短立即(“shimm”)和长立即(“limm”)操作数。该方法中称作的“松散”是因为它有效地扩展或拆开表示信息通常所需的位数。例如,本发明的CPU芯片的指令字的实施例使用6位寄存器字域来表示寄存器AND立即操作数使用情况(例如,shimm/limm)。相反,典型的原有技术的指令字仅利用1或2位来表示这种信息,或者利用指令的操作码隐含存在的立即数据。因此,该方法是稍微有点违反直觉的,因为它使用了多于最少所需的位容量来表示信息。
然而,本发明的“松散”寄存器编码体系结构对基于RISC的处理器(比如先前所述应用的ARC芯片)有许多好处,包括:(i)整体增强编程灵活性;(ii)能够把立即值直接存储到存储器而不用一个中间寄存器;(iii)能够在第一源寄存器字段(“源1”)或第二源寄存器字段(“源2”)中使用短或长立即数据,这对于带有不可交换特性的指令是有益的;(iv)通过使用在一个指令的目的地址字段中的一个‘立即数据’寄存器,能够指示应该丢弃一个指令的结果。这能够使程序员在两个值之间作出比较并设置作为结果的标志,而不引起处理器中任何一般目的的寄存器发生改变;和(v)能够使用短和长立即数据作为一个指令中的源数据。在扩展指令可以被加到一个处理器的情况下,后者的能力证明在设计和专用指令的操作中是有用的。由于多数RISC处理器依靠一种装入-存储机制来存取和修改存储器值(也就是,只有装入和存储操作可以存取存储器空间),当期望简单的存储器存器时指令的效率受损。通过使用本发明的松散编码方案,程序存储器可以被优化,同时在RISC结构体系中实现固有的简单性。
现在参考图2,描述按照本发明在“松散”编码的寄存器内定位数据的普通方法的一个实施例。方法200的第一步骤202包括确定是否当前指令内所关心的寄存器号指定了一个通用寄存器(例如,以下表1的实施例中的r0-r31)。如果寄存器号确实指定了一个通用寄存器,则经步骤204从指定的芯片中选择数据,并完成用于那个寄存器号的处理过程200。如果未指定一个通用寄存器,寄存器号接着经步骤206被验证以便确定是否它指定了一个立即数据值。如果指定了一个立即数据值,则立即数据值的类型,即短立即(shimm)或长立即(limm)在步骤208中被确定。如果在步骤206中不指定一个立即数据值,在步骤210从引证的源中获得适当的指定的数据值。
如果在步骤208中指定了短立即数据,从当前指令字的相关部分提取数据。如果在步骤208中指定了长立即数据,则从后面的指令字中提取适当的数据。
在如下表1中,描述了使用上述的方法的本发明的寄存器和指令体系结构的第一实施例:
表1
寄存器 |
立即操作数 |
说明 |
r0-r31 | |
寄存器值 |
r32-r59 | |
扩展寄存器(专用) |
r60 |
loopcnt |
循环计数寄存器 |
r61 |
shimmf |
使用来自指令字的9位有标志的短立即并在结果上设置状态标志。 |
r62 |
limm |
使用来自下一个指令字的32位长立即 |
r63 |
shimm |
使用来自指令字的9位有标志的短立即 |
如表1所示,指定了全部64个寄存器(即r0-r63)。第一组32个寄存器(r0-r31)是用于反映寄存器值的通用寄存器。接着的28个寄存器(r32-r59)是指定特殊应用的扩展寄存器。接着的寄存器(r60)是循环计数寄存器,在ARC处理器中它部分地用作零开销循环机构,以便维护保留在一个循环结构中重复号的计数。利用最后的三个寄存器(r61-r64)来表示一个立即操作数据(分别为shimmf,limm或shimm)。由于需要用于设置标志的指令字中的位来编码短立即数据,因此有两个shimm的版本;一个带有符号设置(即shimmf)而另一个没有符号设置(即shimm)。图3a-3c图示了按照本发明寄存器编码结构的上述实施例。
上述的方法使程序员/设计者完全灵活的指定各种不同的指令格式,包括下列八种示例的指令格式:
表2
格式编号 |
语法 |
1. |
op.<cc>.<f>a,b,c |
2. |
op.<cc>.<f>a,b,l |
3. |
op.<cc>.<f>a,l,c |
4. |
op.<cc>.<f>a,l,l |
5. |
op.<cc>.<f>a,b,c |
6. |
op.<cc>.<f>a,b,s |
7. |
op.<cc>.<f>a,s,c |
8. |
op.<cc>.<f>a,s,s |
其中:
op =指令操作
<cc> =用于执行的任选条件代码
<f> =任选的设置状态标志
a =目的地寄存器
b =源1寄存器
c =源2寄存器
s =shimm(9位带符号的短立即)
l =limm(32位长立即)
应该清楚,上述规定的表2的八个指令格式在此仅仅是为了示例,依赖于特殊的应用可以使用其他的格式。例如,可以使用具有少于或多于上述示例的64个寄存器的寄存器数的一种指令格式。而且,本发明可以被具体到仅具有两个源操作数的一种指令格式,或者一个源和一个目的操作数。此外,还应该清楚的是,可将本发明的指令格式实施得令字的语法不同于上述的图示;例如,源和目的字段的顺序可以被改变或序列改变。
表3提供了按照本发明的指令格式的第二实施例,结合使用应用的“ARC”RISC芯片:
表3
格式编号 |
语法 |
说明 |
9. |
op b,c |
两个源字段,目的地被隐含 |
10. |
op b,s |
一个源字段,一个shimm |
11. |
op b,l |
一个源字段,一个limm |
12. |
op s,c |
shimm,一个源字段 |
13. |
op l,c |
limm,一个源字段 |
14. |
op s,l |
shimm,limm |
15. |
op l,s |
limm,shimm |
16. |
op s,s |
shimm,shimm |
17. |
op l,l |
limm,limm |
18. |
op a,b |
一个目的字段,一个源 |
19. |
op a,s |
一个目的地,shimm |
20. |
op a,l |
一个目的地,limm |
应注意,在表3的第二实施例中,仅仅指定了两个字段(而不是指令操作“op”)。而且既没有指定有条件字段也没有指定标志设置字段,但显而易见的是这样的条件的和/或标志设置字段可以被用于这些格式。
应特别注意表2的下列两个格式:
4. op.<cc>.<f> a,l,l
8. op.<cc>.<f> a,s,s
通过使用AND运算,这两个格式被特别用于提供一种MOV(数据传送指令)立即指令。在ARC处理器中,使用短立即寄存器编码从指令字中提取短立即值。如果在两个源字段中使用短立即寄存器编码,两个源字段将取短立即字段的值,但两个不同的短立即值不能被编码。通过使用长立即寄存器编码,随后的指令字中的数据可以被用于一个或两个源字段,但不能使用两个不同的长立即值。然而在本发明中,能够具有一短一长两个立即值,这种优点可以使一个立即值存储到存储器中一个立即位置。
因此,指令AND.a,l,l把随后的长立即指令字的内容传送到目的寄存器“a”。运算执行逻辑与带有它本身的相同的值,结果形成原始值。
此外,通过移位指令也可以使用上述的两种格式(4.和8.),以便使用一个单一的字指令产生多个长立即常数,如下例所示:
ASL.a,s,s;a=s<<(s&31)
(移位指令仅使用一个立即值的底部5位)
(短立即数据是9位的长度)
在上述的例子中,源短立即值的底部5位被用于移位全部的9位短立即值以便使用一个单一的指令字而不是通过使用刚才上述的具有非移位的9位短立即数据的MOV(AND)来使较宽范围的立即值被放入一个寄存器中。
如先前所述,本发明的“松散”体系结构还可以用于把立即值立即存储到存储器中而不使用原有技术的RISC设备中的一个中间寄存器,如下例所示:
ST s,[b,s];[b+s]=s(shimms必须匹配)
ST l,[b,s];[b+s]=l(其中″l″指定长立即数据)
ST s,[s,s];[s+sl=s(shimms必须匹配)
此外,通过使用寄存器r63(表1)作为一个目的地,结果的寄存器写回导致被丢弃,这对于仅需要这些状态标志的结果的情况是有用的(比如用于测试/比较),而不考虑任何MOV指令。用于这种功能的汇编语法使用一个立即值“0”作为指令的目的地,如下所示:
op.<cc>.<f> 0,b,c
op.<cc>.<f> 0,b,l
op.<cc>.<f> 0,l,c
op.<cc>.<f> 0,l,l
op.<cc>.<f> 0,b,c
op.<cc>.<f> 0,b,s
op.<cc>.<f> 0,s,c
op.<cc>.<f> 0,s,s
在该实施例中,用一个文件来包含多路复用器,这些多路复用器在源1和源2总线上选择如何得到选择的数据。这些总线尤其在流水线的阶段3上被用作到算术逻辑单元(ALU)的输入,如下例所示:
阶段2结果多路复用器
源1字段;
用s1a选择:
s1_direct<=qd_a when
r0|r1|r2|r3|r4|r5|r6|r7|
r8|r9|r10|r11|r12|r13|r14|r15|
r16|r17|r18|r19|r20|r21|r22|r23|
r24|r25|r26|r27|r28|r29|r30|r31|
loopcnt when rlcnt,
shimmex when rfshimm|rnshimm,
pliw when rlimm,
xldata when others;
在示例中应注意的是,使用“s1a”字段初始选择阶段2的结果,随后添加简化操作。
源2字段;
用s2a选择:
s2_direct<=qd_b when
r0|r1|r2|r3|r4|r5|r6|r7|
r8|r9|r10|r11|r12|r13|r14|r15|
r16|r17|r18|r19|r20|r21|r22|r23|
r24|r25|r26|r27|r28|r29|r30|r31|
loopcnt when rlcnt,
shimmex when rfshimm|rnshimm,
pliw when rlimm,
xldata when others;
由于在有条件指令格式中短立即(shimm)字段重叠标志设置位,附加的逻辑被用于控制标志设置。在这种逻辑的一个实施例中,或使用指令的“.f”位或或使用由短立即数据寄存器号所隐含的值,或者被设置到“假”,如果指令不能设置标志(例如,装入/存储,转移/跳转)。在单独的文件中独立处理特殊情况的标志设置器(Jcc.F和FLAG)。如果一个3操作数扩展指令被使用的话,这是为了一个目的使用了短立即指令的区域,而不是为了由xshimm信号所表示的编码短立即数据,该标志不被设置。通过下例的标志设置计算进一步示例了本发明的这种特性:
阶段3标志设置计算:
ip3setflags<=‘0’WHEN f_no_fset(ip3i)=‘1’
or(xshimm AND x_idecode3 AND
xt_aluop)=‘1’ELSE
ip3shimmf WHEN ip3shimm=‘1’ELSE
ip3_fbit;
应注意的是,可以使用各种不同的上述多路复用器的实施例来构成本发明,这取决于编码VHDL的具体方法。基于上述的功能性,这些不同的多路复用器的实施例的编码对于编程领域的普通技术人员来说是已知的,因此在这里不将作进一步的描述。
此外,可以连同(单独地或共同的)在一个流水线处理器内使用的流水线控制和联锁的方法一起来有益地使用本发明的方法和装置,其中尤其包括那些在申请的共同待审的美国专利申请标题为“MethodAnd Apparatus For Jump Control In A Pipelined Processor,”,“Method And Apparatus For Jump Jump Delay Slot Control In APipelined Processor,”,和“Method And Apparatus For ProcessorPipeline Segmentation And Re-assembly,”,它们与此同时申报,在此结合参考它们的全部内容。
综合处理的方法
参考图4,描述了先前讨论的结合跳转延迟时隙模式综合处理逻辑的方法400。在申请的共同待审的美国专利申请序列号09/418,663标题为“Method And Apparatus For Managing The Configuration AndFunctionality Of A Semiconductor Design”中公开了综合处理具有一个用户化(即“软件”)指令的集成电路逻辑的普通方法,它于1999年10月14日申报,在此结合参考它的全部内容。
虽然下面的描述是有关于在一个微型计算机或其他类似处理设备上的一个算法或计算机程序,但应该清楚可以使用其它的硬件环境(包括小型计算机,工作站,网络计算机,“超级计算机”和大型计算机)来实践本方法。此外,如果需要的话,相对于软件可以把计算机程序的一个或多个部分具体表现于硬件或固件中,这种替换的实施例在计算机技术领域是熟知的。
最初,在步骤402中获得有关设计配置的用户输入。特别是,由用户选择用于设计的期望的模块或功能,并添加,减去与设计有关的指令,或产生需要的指令。例如,在信号处理应用程序中,通常最好让CPU包括单一的“乘法和累积”(MAC)指令。在本发明中,修改综合设计的指令集以便结合其中的上述跳转延迟时隙模式(或其他等同的跳转延迟时隙控制体系结构)。尤其是,在本发明的实施例中,表示指定跳转延迟时隙模式的多个预定值之一通过参考图1的上述跳转指令字的两个数据位进行表示。此外,在步骤402中由用户定义用于每个VHDL文件的技术库位置。本发明中的技术库文件存储了所有与用于综合处理所需单元相关的信息,例如包括逻辑功能,输入/输出定时,和任意相关的技术。在本发明中,每个用户可以定义他的/她的自己的库名和位置,从而进一步增加了灵活性。
下一步,在步骤403,生成在步骤402中规定的基于用户输入和现存功能库的用户化的HDL功能块。
在步骤404中,基于用户的输入和上述的库文件确定设计层次。基于设计层次顺序地产生一个层次分阶段文件,新的库文件,和程序描述文件。在此使用的术语“程序描述文件”相当于通用的UNIX程序描述文件功能或者相当于计算机领域普通技术人员熟知的一个计算机系统的类似的功能。程序描述文件功能导致其他的程序或计算机系统中的算法常驻程序以规定的次序被执行。此外,它进一步规定数据文件的名称和位置和其他需要的信息以便有效地操作指定的程序。但应该注意的是,在此公开的发明可以利用文件结构而不是“程序描述文件”来产生期望的功能性。
在本发明的程序描述文件产生处理过程的一个实施例中,是经过显示提示交互地询问用户来输入与期望的设计有关的信息,比如“构件”的类型(例如,整体设备或系统配置),外部存储器系统数据总线的宽度,扩展时隙的不同类型,高速缓冲存储器的类型/大小等等。但只要符合本发明,也可以使用许多其他的输入信息的配置和资源。
在步骤406,运行在步骤404中产生的程序描述文件以便生成结构的HDL。该结构的HDL与离散的功能块相配合以便完成一个设计。
接着,在步骤408,运行在步骤406中产生的稿本以生成用于模拟程序的一个程序描述文件。此外,在步骤408中还运行产生一个综合稿本的稿本。
在程序的这一点上,做出一个是否综合或模拟设计的决定(步骤410)。如果选择模拟,用户利用在步骤412产生的设计和模拟程序描述文件(和用户程序)运行模拟程序。可替换的,如果选择综合处理,用户利用在步骤414中的综合稿本和产生的设计运行综合处理。在完成综合/模拟稿本之后,在步骤416评估适当的设计程序。例如,一个综合处理引擎可以生成一个具体的设计的物理布局,它符合整体设计处理程序的性能标准,但不符合所要求的小片尺寸。在此情况下,设计者将对控制文件,数据库,或其它元件进行改变,它们可以影响小片尺寸。随后设计信息的结果集合被用于重新运行综合处理稿本。
如果产生的设计是可接受的,则完成设计处理程序。如果设计是不可接受的,重新执行从步骤402开始的处理步骤直到获得一个可接受的设计。在此方式中,循环方法400。
综合的逻辑
现在参考图5-9,示例了用于实现在此先前所述的“松散”寄存器编码功能性的逻辑,以及描述了使用图4的综合方法。
图5示例了用于松散寄存器编码源1选择的顶端层次阶段逻辑的一个实施例。在图5的实施例中,顶阶段逻辑例示了八个等同的4位多路复用器组成了全部32位。[注意,为清楚表示,图5中的逻辑图示被分成两个层阶段]。该逻辑也同样可以用于源2的选择。
图6示例了用于源1的松散寄存器编码的上述4位多路复用器的第一实施例。在图6的多路复用器中,在综合处理上没有放置操作的或设计约束。
图7示例了用于源1的松散寄存器编码的上述4位多路复用器的第一实施例,除了逻辑已经被约束以外,以便对从长立即数据输入总线(‘pliw’)到输出总线(‘sl_direct’)提供最短的路径。
图8示例了按照本发明的标志设置逻辑的第一实施例(无约束的)。
图9示例了按照本发明的标志设置逻辑的第二实施例,只是为了最小化区域进行了约束。
现在参考图10,示例了制造好的流水线处理器的一个例子,使用一个1.0um处理程序和结合图5-9的逻辑。如图10所示,处理器1000是一个像微处理器CPU设备的ARC,其中尤其具有一个处理器芯片1002,芯片存储器1004,和一个外部接口1006。利用用户化VHDL设计制造该设备,使用本发明的方法400获得用户化的VHDL设计,该设备随后被综合处理成一个逻辑电平表示,并接着利用半导体领域已知的编译,布局和制造技术把它精简成一个物理设备。
本领域一个普通技术人员应该清楚的是,图10的处理器可以包括任何通用的可获得的周边设备,比如串行通信设备,并行口,定时器,计数器,高电流驱动器,模拟到数字(A/D)转换器,数字到模拟(D/A)转换器,中断处理器,LCD驱动器,存储器和其他类似的设备。另外,处理器还可以包括自定义或应用的具体电路系统。本发明不局限于周边设备的类型,数量或复杂程度,以及其他的可以使用本发明方法和装置相组合的电路系统。准确地说,通过能改进超时的现存的半导体处理程序的物理能力可以强行使用任何的限制。因此,能够使用本发明预见集成的复杂性和困难程度,这将进一步提高改进半导体的处理程序。
还应该注意的是,当前的许多IC设计使用一个微处理器芯片和一个DSP芯片。然而DSP仅可以用于所需的有限数量的DSP功能,或者用于IC的快速DMA结构体系。在此公开的本发明可以支持许多DSP指令功能,并且它的快速局部RAM系统可以立即存取数据。通过使用在此公开的用于IC的CPU&DSP功能的方法可以明显地实现节省费用。
可替换的,图10的处理器1000可以被综合处理以便结合一个存储器接口,该存储器接口用于对在一个或多个IC(例如DSP)功能和处理器1000的存储器阵列之间进行对接,如在与本申请共同待审的、申报于2000年3月10日、标题为“Memory interface and Method ofInterfacing Between Integrated Circuita”美国专利申请中所描述的,在此结合参考它的全部内容。
另外,请注意这里如前所述的方法(及相应的计算机程序)可容易地以相对简单的再综合适应于更新的生产技术,例如0.18或0.1微米工艺——而非使用“硬的”原有微技术系统时,为了适应这类技术通常要采用冗长昂贵的处理。
现在参考图11,尤其描述了能够综合处理器其中图5-9的逻辑结构的一个计算设备的实施例。计算设备1100包括具有一个中央处理器(CPU)1102的一个母板1101,随机存取存储器(RAM)1104,和存储器控制器1105。此外还提供一个存储设备1106(比如一个硬盘驱动器或CD-ROM),输入设备1107(比如一个键盘或鼠标),和显示设备1108(比如一个CRT,等离子体,或TFT显示器),以及支持主机和周边器件工作所需的总线。在整个设计综合处理过程中,上述的VHDL描述和综合引擎以一个计算机程序的一个目标代码表示被存储在RAM 1104和/或存储设备1106中来由CPU1102进行使用,在计算机领域中后者是大家熟知的。在整个系统操作过程中,用户(未示)通过把设计的配置规范经程序显示和输入设备1107输入到综合处理程序中来综合处理逻辑设计。被存储在存储设备1106中的用于以后调用的由程序产生的综合设计被显示在图形显示设备1108上,或者如果需要的话,可以经一个串或并口1112输出到一个外部设备,比如一个打印机,数据存储单元,其他的周边器件。
尽管上面已经进行了详细描述,并应用各种实施例指出了本发明的新颖性,但应明白在不脱离本发明的范畴下,本领域技术人员可以对本发明的设备的细节或处理过程以省略,替代,或改变的各种形式作出变化。上述的内容仅仅是可以实现本发明的最佳方式。所描述的内容并不意味着会受到限制,而仅作为本发明通用原理的示例。本发明的范围应该根据权利要求的内容来确定。