首页> 中国专利> 完成两次乘法两次加法两次位移的微处理器实现方法

完成两次乘法两次加法两次位移的微处理器实现方法

摘要

本发明公开了一种完成两次乘法两次加法两次位移的微处理器实现方法。本发明提出一种分支指令后将常数和程序计数器相加的微处理器实现方法,包括以下步骤:CALLD指令调用子程序,并根据目标寄存器或偏移量产生新的执行程序的地址,并将其存放于程序计数器PC;采用PUSH.PC指令将所述CALLD指令的返回地址压栈。通过本发明能够有效提高处理器的性能。

著录项

  • 公开/公告号CN101615114A

    专利类型发明专利

  • 公开/公告日2009-12-30

    原文格式PDF

  • 申请/专利权人 清华大学;

    申请/专利号CN200910090204.8

  • 发明设计人 何虎;刘源;

    申请日2009-07-31

  • 分类号G06F9/38;

  • 代理机构北京市立方律师事务所;

  • 代理人张磊

  • 地址 100084 北京市100084-82信箱

  • 入库时间 2023-12-17 23:14:27

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2012-07-18

    授权

    授权

  • 2010-02-24

    实质审查的生效

    实质审查的生效

  • 2009-12-30

    公开

    公开

说明书

技术领域

本发明涉及计算机技术领域,特别涉及一种完成两次乘法两次加法两次位移的微处理器实现方法。

背景技术

微处理器是一个集成在一片上的半导体集成电路,包括对一系列算术逻辑操作的控制和执行。微处理器大致可以分为两类:通用微处理器和专用微处理器。通用微处理器可以使用户通过编程的方法实现广泛的功能,因此常在个人电脑(PC)上用作中央处理器(CPU)。与之对应的是,专用处理器只用于特定的环境,因为知道处理器的主要功能,设计者就可以使用需求来建立处理器结构,使得在性能上专用处理器的专用单元可以比通用处理器对应单元显著增强。

数字信号处理就是专用处理器的一个典型应用。数字信号处理包括信号获取,信号传输,信号处理,使用大量技术的一种专用微处理器即数字信号处理器(DSP)。数字信号处理需要处理大量数据,为了适应此特征,数字信号处理器优化了密集运算和存储器访问的效率。比如,在快速傅里叶变换(FFTs)和数字滤波器的实现中包括大量重复操作比如乘加和位移,数字信号处理器提供了特别的功能以适应这些重复的操作,使得在实时应用比如图像和声音处理中其性能比起通用处理器有很大的提升。

DSP在目前的电子产品中有广泛的应用,比如数字电话,视频会议设备,复杂自动化系统等。可以预见的是,DSP在将来会有更多的数字系统中能有更广泛的应用。

目前,微处理器设计者正在努力开发指令并行度以增加微处理器的性能。应用于现代处理器中的一种并行结构,具有取指指令包和多个执行指令包以及多个功能单元,参见超长指令字(VLIW)结构。

设计者也使用一些通用于微处理器的方法成功提升了DSP的性能。包括,增加时钟速度,在电路结构中消除数据处理的瓶颈,在处理器中增加更多的执行单元,增加编译器的调度能力以产生更有效的执行代码。

现有技术存在的缺点是,当前微处理器的性能还有待提升。

发明内容

本发明的目的旨在至少解决上述技术缺陷之一,特别是解决现有微处理器性能不足的问题。

为达到上述目的,本发明一方面提出一种分支指令后将常数和程序计数器相加的微处理器实现方法,包括以下步骤:CALLD指令调用子程序,并根据目标寄存器或偏移量产生新的执行程序的地址,并将其存放于程序计数器PC;采用PUSH.PC指令将所述CALLD指令的返回地址压栈。

在本发明的一个实施例中,所述采用PUSH.PC指令将所述CALLD指令的返回地址压栈包括:不加label,汇编器自动计算CALLD之后第6个执行包的地址,并计算与PUSH.PC指令执行级的程序地址的偏移量编码到PUSH.PC指令的常数部分;处理器根据PUSH.PC指令执行级的程序地址与返回地址偏移量计算得到返回地址并将返回地址压栈。

在本发明的一个实施例中,所述采用PUSH.PC指令将所述CALLD指令的返回地址压栈包括:加label,汇编器计算label所示指令地址,并计算与PUSH.PC指令执行级的程序地址的偏移量编码到PUSH.PC指令的常数部分;处理器根据PUSH.PC指令执行级的程序地址与返回地址偏移量计算得到返回地址并将返回地址压栈。

在本发明的一个实施例中,所述PUSH.PC指令的执行过程包括:解码单元将指令解码后送入后面的流水级,两个操作数选择单元选择各自的操作数,其中,第一个操作数为PUSH.PC指令所在执行包的PC,第二个操作数选择返回地址的偏移量;ALU单元将两个操作数相加作为要存入存储器的内容送入LSU,同时,LS地址产生单元产生存储器地址,此处为堆栈指针加4,作为存储器访问地址送入LSU,由所述LSU将其压栈。

在本发明的一个实施例中,还包括所述LSU判断是否为存储器操作指令;如果为非存储器操作指令,则解码后进入执行级,根据解码产生的控制信号执行相应的指令;如果为存储器操作指令,则LSU根据解码和执行级的组合逻辑产生的控制信号开始存储器操作。

在本发明的一个实施例中,所述存储器操作由四个流水周期完成。

在本发明的一个实施例中,存储器写操作包括:LSU存储器访问执行E1级-数据地址产生,根据XD单元E1级组合逻辑输出和解码所得存储器访问控制信号,获得存储器访问地址,存储器访问模式信号,并产生需要存储数据的寄存器地址及读使能信号;E2级-数据地址发送,存储器根据存储器使能,存储器访问地址及访问模式将数据发送给存储器系统;E3级-数据等待,LSU等待Dcache写存储器数据;E4级-数据获取,根据需要写堆栈缓存寄存器STBUF,其中,STBUF始终保存堆栈顶端的存储器内容。

在本发明的一个实施例中,存储器读操作包括:LSU存储器访问执行E1级-数据地址产生,根据XD单元E1级组合逻辑输出和解码所得存储器访问控制信号,获得存储器访问地址,存储器访问模式信号,并产生需要获取数据的寄存器地址及写使能信号;E2级-数据地址发送,存储器根据存储器使能,存储器访问地址及访问模式从存储器中读取数据;E3级-数据等待,LSU等待Dcach读取存储器数据;E4级-数据获取,LSU将输出数据传输给需要数据的寄存器,根据需要写堆栈缓存寄存器STBUF,其中,STBUF始终保存堆栈顶端的存储器内容。

通过本发明能够有效提高处理器的性能。在CALLD指令执行之后,子函数指令执行之前,其中通过本发明实施例专门设计的指令将函数返回地址推入堆栈,从而避免了跳转造成的流水线空泡,提高了处理器指令的执行效率。

本发明附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。

附图说明

本发明上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:

图1为本发明实施例的处理器结构图;

图2为本发明实施例中执行单元与寄存器的连接结构图;

图3为本发明实施例的XD单元功能框图;

图4为本发明实施例的PUSH.PC指令执行过程;

图5A为本发明实施例的处理器流水级;

图5B为本发明实施例的CALLD指令示意图。

具体实施方式

下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能解释为对本发明的限制。

如图1所示,为本发明实施例的处理器结构图。该处理器是一个超长指令字(VLIW)结构的数字信号处理器(DSP)。需要说明的是,图1只显示了处理器中与理解此发明相关的部分,其他部分已为本领域普通技术人员所公知,在此不再赘述。图1所示处理器实现当前发明的细节下面将详细进行描述。

如图1所示,处理器包含一个指令获取单元(Fetch)、指令分发单元(Dispatch)、和六个执行单元(XA,XM,XD,YA,YM,YD)以及X,Y,G三组通用寄存器堆,每个功能单元由指令控制访问X或者Y,每个执行单元同时可访问G寄存器堆。处理器系统包括处理器内核(CPU),数据RAM,数据缓存(cache),程序RAM,程序缓存(cache)以及管理RAM和缓存的MMU。对于缓存和RAM,可以编程选择其有效或者无效,其与此发明的关键无关。当此处理器执行处理操作的时候,有更多的存储器或者外设需要连接,比如,外部RAM,只读存储器(ROM),磁盘,总线,DMA控制器等。

各个执行单元与寄存器的连接是完全对称的,如图2所示,为本发明实施例中执行单元与寄存器的连接结构图。其中,各个功能单元分别有一组接口与G寄存器堆相连,同时,每个功能单元还有一组接口由多路选择器选择访问X寄存器堆或者Y寄存器堆,在每个指令周期,每个功能单元都能访问X寄存器堆和G寄存器堆,访问或者Y寄存器堆和G寄存器堆。功能单元访问X寄存器堆或者Y寄存器堆由指令中的某一位控制。

处理器的各个功能单元用来执行特定的指令,功能单元可分为两部分:解码和执行,解码在一个周期完成,执行需要花费一到多个周期不等。

以下就对各个功能单元XA、XM、XD以及XLSU的功能进行简单介绍。

其中,XA单元是处理器中完成算术逻辑运算以及移位运算的单元。XA单元中共有两级级流水线:解码、执行。解码阶段的功能是接受指令、并根据指令产生其余各部分的控制码。在解码阶段开始的时钟上升沿,指令分发单元将需要在XA单元执行的指令写入指令寄存器A_IR,然后解码逻辑根据指令寄存器(A_IR)中的内容产生各部分的控制码。执行阶段接受两个操作数,然后根据其控制代码对两个操作数进行相应的运算,并在执行阶段结束时的时钟上升沿将运算结果写入目标寄存器。

其中,XM单元是处理器中完成乘法运算的单元,可以完成32位乘法、16位乘法、8位乘法等运算,以及部分算术逻辑操作和位操作。XM单元共分为解码单元、流水线控制旁路单元,乘法运算单元、算术逻辑单元、目标寄存器写使能信号产生单元等部分。XM单元中实现乘法功能需要三级流水线:解码,乘法执行一级和乘法执行二级。其中乘法执行一级采用乘法单元实现,乘法执行二级采用加法单元来实现。XM单元中实现算术逻辑操作以及位操作需要两级流水线:解码,执行。执行不同的指令采用不同的流水线结构,流水线控制旁路单元通过解码单元产生的旁路信号(bypass)进行控制。解码阶段的功能是接受指令、并根据指令产生其余各部分的控制码。在解码阶段开始的时钟上升沿,需要在XM单元执行的指令被写入指令寄存器(M_IR),然后解码逻辑根据指令寄存器(M_IR)中的内容产生各部分的控制码。

其中,XD单元的主要功能是实现存储器的存取以及实现程序的跳转,同时它也可以完成部分算术逻辑运算。XD单元共分为解码单元、操作数选择单元、ALU执行单元和目标寄存器写使能信号产生单元等四大部分。XD单元中共有两级流水线:解码、执行。解码阶段的功能是接受指令,并根据指令产生其余各部分的控制码。在解码阶段开始的时钟上升沿,指令分发单元将需要在XD单元执行的指令写入指令寄存器(D_IR),然后解码逻辑根据指令寄存器(D_IR)中的内容产生各部分的控制码。执行阶段接受两个操作数,然后根据其控制代码对两个操作数进行相应的运算,并在执行阶段结束时的时钟上升沿将运算结果写入目标寄存器。XD单元中执行存储器操作的是XLSU单元,XLSU分4级流水线进行,E1为地址产生级,E2为地址发送级,E3为等待L1D Cache处理级,E4为获取数据和寄存器回写或存储器写入级。XLSU根据D单元E1级组合逻辑输出存储器访问使能信号和存储器访问模式信号等控制信号控制存储器访问。

由于此发明涉及存储器访问,所以在XD单元的XLSU中执行。

如图3,为本发明实施例的XD单元功能框图。其中XD单元获取指令及指令模式后,开始解码,解码阶段的功能是接受指令,并根据指令产生其余各部分的控制码。若为非存储器操作指令,解码后进入执行级,根据解码产生的控制信号执行相应的指令,若为存储器操作指令,则XLSU根据解码和执行级的组合逻辑产生的控制信号开始存储器操作,存储器操作由四个流水周期完成。

其中,存储器写操作步骤如下:XLSU存储器访问执行E1级-数据地址产生(Data Address Generate),根据XD单元E1级组合逻辑输出和解码所得存储器访问控制信号,获得存储器访问地址,存储器访问模式信号,并产生需要存储数据的寄存器地址及读使能信号,E2级-数据地址发送(Data Address Send),存储器根据存储器使能,存储器访问地址及访问模式将数据发送给存储器系统,E3级-数据等待(Data Wait),XLSU等待Dcache写存储器数据,E4级-数据获取(Data Get),根据需要写堆栈缓存寄存器(STBUF),STBUF始终保存堆栈顶端的存储器内容。

其中,存储器读操作步骤如下:XLSU存储器访问执行E1级-数据地址产生(Data Address Generate),根据XD单元E1级组合逻辑输出和解码所得存储器访问控制信号,获得存储器访问地址,存储器访问模式信号,并产生需要获取数据的寄存器地址及写使能信号,E2级-数据地址发送(Data Address Send),存储器根据存储器使能,存储器访问地址及访问模式从存储器中读取数据,E3级-数据等待(Data Wait),XLSU等待Dcach读取存储器数据,E4级-数据获取(Data Get),XLSU将输出数据传输给需要数据的寄存器,根据需要写堆栈缓存寄存器(STBUF),STBUF始终保存堆栈顶端的存储器内容。

如图4所示,为本发明实施例的PUSH.PC指令执行过程。解码单元将指令解码后送入后面的流水级,两个操作数选择单元选择各自的操作数,第一个操作数为PUSH.PC指令所在执行包的PC,此为执行级的程序,第二个操作数选择返回地址的偏移量(关于指令的使用方法在后文详细说明),ALU单元将两者相加作为要存入存储器的内容送入LSU,同时,LS地址产生单元产生存储器地址,此处为堆栈指针加4,作为存储器访问地址送入LSU。LSU在E2级将访问存储器地址,存储器写使能,写入内容发送到存储器,E3级等待数据缓存写操作,E4级数据缓存写操作完成,将写入值同时写入STBUF。

处理器执行PUSH.PC指令,PUSH.PC指令将当前指令的程序计数器(PC)加上一个偏移量(常数)后将结果推入堆栈。在当前发明的实现中,处理器的指令有16位和32位两种长度,六个功能单元,每周期最多发射六条指令。取指令和指令分发两个单元共有五级流水线,其中取值单元有程序地址产生(PCG),程序地址发送(PCS),指令有效性判断(PWT),指令获取扩展(FPR)四级流水,分发单元(DISPATCH)一级流水,分发后进入执行单元,处理器流水级如图5A。取指包包含多个指令字。执行包的指令可以被多个功能单元并行执行。在处理器中有取指包和执行包两种指令包,取指包具有固定长度,执行包包含一条或多条可以在一个处理器周期内并行执行的指令,执行包可能跨越两个取指包。PUSH.PC指令使用的PC值是包含PUSH.PC指令的执行包的PC。

此处理器实现一个访问子程序的功能。此功能包括以下几步:a)执行第一条指令跳转到子程序入口地址,b)执行第二条指令计算返回地址。由于第一条指令执行后有5个周期的分支延迟槽,第二条指令需要在第一条指令执行后五个周期内执行。PUSH.PC指令即这里的第二条指令,计算子程序的返回地址,并将计算结果压入堆栈。

处理器采用超长指令字(VLIW)结构,每个周期能发射一条到六条指令不等,因此每个执行包长度不固定。在程序中,PUSH.PC指令和CALLD指令成对使用,CALLD指令用于调用子程序,CALLD指令根据目标寄存器或偏移量,产生新的执行程序的地址(子程序)并将其存放于程序计数器PC,同时继续执行已经进入流水线的指令。本发明实施例的PUSH.PC指令与CALLD指令一起使用从而在VLIW结构下完成子程序访问的功能,CALLD指令完成跳转功能,PUSH.PC指令完成存储返回地址的功能。如图5B,CALLD指令在E1级产生新的PC,此时之前五级流水线中指令为CALLD之后的指令,在跳转到目标地址前会执行CALLD指令之后的五个执行指令包。在本发明中,分支指令在执行一级产生分支目标的PC,然后立即送入PC产生单元开始按新的分支执行程序。PUSH.PC指令用于将CALLD的返回地址压栈,PUSH.PC压栈返回地址有两种方式,一种是不加lable,汇编器可以自动计算CALLD之后第6个执行包的地址,计算与PUSH.PC指令执行级的程序地址的偏移量编码到PUSH.PC指令的常数部分。处理器可以根据PUSH.PC指令执行级的程序地址与返回地址偏移量计算得到返回地址并将返回地址压栈。第二种方式是加lable,汇编器计算lable所示指令地址,计算与PUSH.PC指令执行级的程序地址的偏移量编码到PUSH.PC指令的常数部分。处理器可以根据PUSH.PC指令执行级的程序地址与返回地址偏移量计算得到返回地址并将返回地址压栈。

通过本发明能够有效提高处理器的性能。通常函数调用需要得到返回地址,并压入堆栈。在子函数返回时,将返回地址推出堆栈。通常情况下,该返回地址是调用子函数指令的下一条指令所在地址,函数调用指令很容易得到该地址。这种调用方式会造成流水线空泡,从而影响指令的执行效率。本发明正是在VLIW架构下,实现子函数调用的延迟跳转功能。在CALLD指令执行之后,子函数指令执行之前,其中通过本发明实施例专门设计的指令将函数返回地址推入堆栈,从而避免了跳转造成的流水线空泡,提高了处理器指令的执行效率。

尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同限定。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号