处理数据依赖性的方法及其微处理器以及数据处理系统

文档序号:95763 发布日期:2021-10-12 浏览:51次 >En<

阅读说明:本技术 处理数据依赖性的方法及其微处理器以及数据处理系统 (Method for processing data dependency, microprocessor thereof and data processing system ) 是由 陈丁明 于 2020-11-02 设计创作,主要内容包括:本发明提供一种处理数据依赖性的方法及其微处理器以及数据处理系统。引入一种使用记分板中的计数器的微处理器来处理数据依赖性。微处理器包含具有映射到记分板的条目的多个寄存器的寄存器堆。记分板的每个条目具有跟踪寄存器中的每一个的数据依赖性的计数器。计数器在每个时钟周期递减,直到计数器在其倒计数为0时对自身进行复位为止。经由实施记分板中的计数器,指令管线可根据先前发出的指令存取记录在记分板的计数器中的寄存器所花费的时钟周期数来管理。(The invention provides a method for processing data dependency, a microprocessor thereof and a data processing system. A microprocessor using counters in a scoreboard is introduced to handle data dependencies. The microprocessor includes a register file having a plurality of registers that map to entries of the scoreboard. Each entry of the scoreboard has a counter that tracks the data dependency of each of the registers. The counter is decremented each clock cycle until the counter resets itself when it counts down to 0. By implementing a counter in the scoreboard, the instruction pipeline may be managed according to the number of clock cycles it takes for a previously issued instruction to access a register recorded in the scoreboard&#39;s counter.)

处理数据依赖性的方法及其微处理器以及数据处理系统

技术领域

本公开大体上涉及一种微处理器,且更具体地涉及一种处理数据依赖性的方法及用于管理微处理器的操作的数据依赖性的具有自复位寄存器记分板的微处理器以及数据处理系统。

背景技术

在微处理器架构中,指令的数据依赖性是一项需要改良以实现指令的有效处理的持续任务。寄存器记分板已用于基于指令的数据依赖性对指令进行排序。举例来说,寄存器堆中的每个寄存器使用一个记分板位。当发出指令时,记分板为目的地寄存器(操作数)设置位,且当指令将数据回写到寄存器堆时,清除所述位。如果设置了指示存在数据依赖性的寄存器位,那么在所述位复位之前,后续指令无法获取数据。

由于对改良微处理器的性能的需求,因此对可有效防止指令的停滞和互锁的微处理器和控制方法的需要日益增长。

发明内容

如果设置了指示存在数据依赖性的寄存器位,那么在所述位复位之前,后续指令无法获取数据而导致指令的停滞。

改良处理指令的数据依赖性,本公开提供一种包含寄存器堆和具有映射到寄存器堆中的寄存器的多个条目的记分板的微处理器。记分板条目中的每一个包含在每个时钟周期递减的计数器,其中计数器表示先前发出的指令存取(回写或读取)由当前指令指定的操作数寄存器所花费的时钟周期数。当提取指令时,对所述指令进行解码以存取寄存器记分板中的条目,从而识别数据的位置以及数据依赖性。在本公开中,记分板包含根据微处理器的时钟周期倒计数的计数器。基于计数器的值,可检查指令的数据依赖性,以用于调度指令。

附图说明

在结合附图阅读时,根据以下详细描述会最好地理解本公开的各个方面。应注意,根据业界中的标准惯例,各种特征未按比例绘制。实际上,为了论述清楚起见,可以任意增大或减小各种特征的尺寸。

图1是示出根据一些实施例的计算机处理系统的框图;

图2是示出根据一些实施例的微处理器的指令管线架构的框图;

图3是示出根据本公开的一些实施例的具有总共N个条目的示例性记分板的附图;

图4是示出根据本公开的其它实施例的记分板的条目的附图;

图5是示出根据本公开的一些实施例的发出具有记分板的指令的过程流程的流程图;

图6是示出根据本公开的实施例中的一个的具有写后读依赖性的指令的流程图;

图7是示出根据本公开的实施例中的一个的具有写后写依赖性的指令的流程图;

图8是示出根据本公开的实施例中的一个的具有读后写依赖性的指令的流程图。

附图标号说明

10:计算机处理系统;

100:微处理器;

101:指令;

110:指令单元;

120:发出/解码单元;

130:记分板;

130_1到130_N:条目;

131:未知字段;

131A:第一未知字段;

131B:第二未知字段;

133:计数器字段;

133A:第一CNT字段;

133B:第二CNT字段;

135:功能单元字段;

137:回写大小字段;

140:寄存器堆;

140_1到140_N:寄存器;

150:执行队列;

160:功能单元模块;

200:存储器;

300:输入/输出接口;

400:外围装置;

500:总线;

FUNIT_A、FUNIT_B、FUNIT_C:功能单元;

S501、S503、S507、S511、S513、S515、S517、S519、S521、S601、S603、S605、S607、S609、S611、S613、S617、S619、S621、S701、S703、S705、S707、S709、S711、S713、S719、S721、S801、S803、S805、S807、S809、S811、S813、S819、S821:步骤。

具体实施方式

以下公开内容提供用于实施本公开的不同特征的许多不同实施例或实例。下文描述组件和布置的具体实例是为了简化本公开。当然,这些组件和布置仅仅是实例且并不旨在作为限制性的。举例来说,在以下描述中,在第二特征上方或在第二特征上形成第一特征可包含第一特征与第二特征直接接触地形成的实施例,且还可包含在第一特征与第二特征之间可形成额外特征,使得第一特征与第二特征可不直接接触的实施例。此外,本公开可在各种实例中重复附图标号和/或字母。这种重复是出于简化和清楚的目的,且本身并不规定所论述的各种实施例和/或配置之间的关系。

当提取指令时,对所述指令进行解码以存取寄存器记分板(下文也称为记分板)中的条目,从而识别数据的位置以及数据依赖性。在本公开中,记分板包含根据微处理器的时钟周期倒计数的计数器。基于计数器的值,可检查指令的数据依赖性,以用于调度指令。

图1示出根据一些实施例的包含微处理器100、存储器200、输入/输出(I/O)接口300、外围装置400以及总线500的计算机处理系统10。总线500可允许计算机处理系统10的组件间的双向通信。本公开的一些实施例可使用比图1中所示出的组件更多、更少或不同的组件。作为实例,计算机处理系统10可还包含计时器、串行外围接口、数-模转换器、模-数转换器、显示驱动器、多种类型的存储器以及任何其它合适的组件。

在一些实施例中,微处理器100配置成使用指令管线来执行指令,其中指令的执行可分解成几个阶段,例如指令提取阶段、指令解码阶段、指令执行阶段以及回写阶段。微处理器100可包含具有相对较高的存取率的高速缓冲存储器,例如数据高速缓冲存储器和指令高速缓冲存储器。微处理器100的数据高速缓冲存储器可以是多级数据高速缓冲存储器,所述多级数据高速缓冲存储器可包含L1数据高速缓冲存储器、L2数据高速缓冲存储器以及L3数据高速缓冲存储器。L1数据高速缓冲存储器、L2数据高速缓冲存储器以及L3数据高速缓冲存储器可位于微处理器100内部或外部。在一些实施例中,计算机处理系统10包含多个微处理器。

存储器200配置成存储指令的程序代码和执行指令所需的数据。存储器200可包含非易失性存储器或易失性存储器或其组合。举例来说,存储器200可包含随机存取存储器(random access memory,RAM)、动态随机存取存储器(dynamic random access memory,DRAM)、静态随机存取存储器(static random access memory,SRAM)、只读存储器(readonly memory,ROM)、可编程只读存储器(programmable read only memory,PROM)、电可编程只读存储器(electrically programmable read only memory,EPROM)、电可擦除可编程只读存储器(electrically erasable programmable read only memory,EEPROM)以及闪速存储器中的至少一个。

I/O接口300配置成通过总线500将输入装置和输出装置连接到计算机系统10。计算机系统10可从输入装置接收数据且通过I/O接口300将数据发送到输出装置。I/O接口300可包含呈有线或无线连接的串联接口和并联接口中的至少一个。外围装置400可包含键盘、鼠标、传感器、信号接收器、监视器以及任何其它合适的装置。

图2是示出根据一些实施例的微处理器100的指令管线架构的框图。下文所描述的过程可通过具有如图2所示出的架构的处理器来执行。在实施例中,微处理器100可包含指令单元110、发出/解码单元120、记分板130、寄存器堆140、执行队列150以及功能单元模块160。指令单元110连接到发出/解码单元120。发出/解码单元120连接到记分板130和执行队列150,其中发出/解码单元120存取记分板130以检查存储在寄存器中的要由指令使用的数据的状态,且将指令调度到执行队列150。记分板130连接到寄存器堆140。执行队列150连接到其中执行指令的功能单元模块160。功能单元模块160还连接到寄存器堆140,以便从寄存器堆140读取数据且将结果数据回写到寄存器堆140。

当通过微处理器100接收到指令101时,指令单元110从指令高速缓冲存储器(未示出)中提取指令101。在实施例中,指令101可包含源操作数和目的地操作数。取决于微处理器100的架构,指令101可以是标量指令或向量指令。

然后将所提取的指令101发送到发出/解码单元120进行解码和发出,其中发出/解码单元120存取记分板130以检查源操作数和/或目的地操作数的数据依赖性并分配数据。根据从记分板130接收到的与指令101的操作数对应的信息,将指令101调度到管线中的执行队列150。

记分板130包含N个条目130_1到条目130_N。记分板130中的每个条目指示寄存器堆140中的寄存器的状态。举例来说,一个位(one bit)可用于跟踪先前发出的指令是否已回写结果数据。当提取指令101时,发出/解码单元120读取记分板130以检查操作数的数据依赖性。记分板130可指示可从寄存器堆140中存取数据。可替代地,记分板130可指示指令的至少一个操作数具有数据依赖性。换句话说,尚未从先前发出的指令回写与操作数对应的数据,且微处理器在执行指令101之前必须等待数据从结果数据总线中返回。在一些其它实施例中,记分板130的每个条目可包含跟踪结果数据的位置和结果数据何时可用的位。

在实施例中,记分板130中的条目130_1到条目130_N中的每一个包含配置成根据微处理器100的时钟周期进行倒计数的计数器(也可以称为计数器值)。举例来说,计数器将在微处理器100的每个时钟周期的上升边缘或下降边缘递减一。在实施例中,计数器130的条目的数量可等于寄存器堆140中的寄存器的数量。举例来说,如果寄存器140包含32个寄存器,那么记分板130将包含32个条目,其中记分板130的一个条目映射到寄存器堆140中的一个寄存器以用于跟踪寄存器的状态。然而,本公开不旨在限制记分板130中的条目的数量。在其它实施例中,记分板130中的条目的数量可大于或小于寄存器堆140中的寄存器的数量。

每个条目130_1到条目130_N的计数器可在指令的发出/解码阶段(例如,在指令读取记分板以检查操作数的数据依赖性的阶段)设置。由于指令的执行时延时间(executionlatency time)是已知的,所以指令可基于指令的执行时延时间(可称为写入时间)设置计数器。举例来说,ADD指令将花费2个时钟周期(例如,执行和回写阶段)来将结果数据回写到寄存器3(R3)。换句话说,ADD指令具有2个时钟周期的执行时延时间。记分板130中的R3的计数器将设置为2。这指示R3直到2个时钟周期后才准备好执行后续指令。在微处理器的每个时钟周期,R3的计数器递减,直到计数器的值在计数值变为意指无数据依赖性的0时对自身进行自复位为止。换句话说,计数器的倒计数在其倒计数到0时将R3的数据依赖性自复位为无数据依赖性。稍后将描述记分板130中的条目的计数器的详细说明。

寄存器堆140可包含配置成存储数据的多个寄存器140_1到寄存器140_N。寄存器140_1到寄存器140_N可存储用于执行指令101的操作数的数据和/或通过发出指令101的回写操作回写到寄存器堆140的结果数据。寄存器140_1到寄存器140_N的大小和数量可根据微处理器100的架构而变化。在实施例中,寄存器堆140可包含用于使功能单元存取寄存器堆140中的寄存器的写入端口和读取端口。

功能单元模块160包含多个功能单元FUNIT_A、功能单元FUNIT_B、功能单元FUNIT_C。当通过功能单元模块160接收到指令101时,对应功能单元存取寄存器堆140并从中加载数据。功能单元模块160配置成基于由执行队列150调度的次序来执行指令101,且接着将结果数据回写到寄存器堆140中的目的地操作数(一个或多个寄存器条目)。待由微处理器100的功能单元执行的指令101可包含存储在寄存器堆140中的一组操作数。微处理器100的功能单元FUNIT_A、功能单元FUNIT_B、功能单元FUNIT_C可通过寄存器堆140的可用读取端口存取寄存器堆140,以获得用于执行指令101的一组操作数。可在回写操作中通过寄存器堆140的可用写入端口将由功能单元模块160输出的结果数据写入寄存器堆140。在一些实施例中,可针对执行管线中的后续指令转发功能单元FUNIT_A、功能单元FUNIT_B、功能单元FUNIT_C的结果数据,以改良微处理器100的性能。在实施例中,功能单元模块160可包含若干过程,包括但不限于,整数乘法、整数除法、算术逻辑单元(arithmetic logic unit,ALU)、移位器、地址生成单元(address generation unit,AGU)、浮点单元(floating-pointunit,FPU)、加载存储单元(load-store unit,LSU)。尽管图2中仅示出功能单元FUNIT_A、功能单元FUNIT_B、功能单元FUNIT_C,但本公开不旨在限制功能单元的数量。在其它实施例中,可将更多的功能单元包含在功能单元模块160中。

图3是示出根据本公开的一些实施例的具有总共N个条目的示例性记分板的附图。如图3中所示出,记分板130的每个条目(也可称为记分板条目)映射到寄存器堆140中的寄存器。记分板130的每个条目可包含但不限于未知字段(bit field)131、计数器(CNT)字段133以及功能单元(FUNIT)字段135。在实施例中,未知字段131配置成指示发出指令的执行时延时间是未知的。举例来说,如果发出指令是加载指令,那么将设置加载指令的记分板条目对应寄存器的未知字段131(逻辑1或逻辑0),这是因为加载操作将取决于数据的位置。如果数据存储在数据高速缓冲存储器中,那么可花费2个时钟周期来进行加载。然而,如果数据存储在连接到微处理器的存储器(例如,RAM)中,那么可花费50个到100个时钟周期来进行加载。整数除法(INT DIV)操作是具有未知执行时延时间的指令的另一实例。整数除法操作的执行时延时间对于6个时钟周期是未知的,这是由于其可花费多达6个时钟周期来确定要除以的位数。因此,未知位将在前6个时钟周期进行设置,且接着在整数除法操作已确定除法操作的位数之后复位。此外,计数器字段133将设置为在未知字段131中的未知位复位之后的已知时间。在实施例中,未知字段131的大小可以是1位或基于设计需求的任何其它合适的位数。

计数器字段133配置成记录对应寄存器的计数器值。在实施例中,计数器字段133的计数器值设置为发出指令的执行时延时间。执行时延时间表示用于使功能单元将结果数据回写到对应寄存器的时钟周期数。只要计数器值不是零,计数器字段133中的计数器值就在每个时钟周期递减一。举例来说,如果第一指令(例如,MUL操作)具有15个时钟周期的执行时延时间来将结果数据回写到寄存器140_5,那么将映射到寄存器140_5的记分板条目130_5的计数器字段133设置为15。然后,将第一指令之后的第二指令解码为读取寄存器140_5的指令;这种类型的数据依赖性称为写后读(read-after-write,RAW)。第二指令读取映射到寄存器140_5的记分板条目130_5,且确定存在数据依赖性。基于计数器字段133中的计数器值,第二指令等待,直到不存在数据依赖性为止。换句话说,可基于计数器字段133中的计数器值来调度执行第二指令。计数器字段133的大小可以是6位或基于设计需求的任何其它合适的位数。在一些实施例中,计数器字段133的大小配置成适应任何指令的最坏情况时延时间(例如,大于任何指令的最坏情况时延时间)。

在实施例中,将在第一指令之后的第二指令解码为写入寄存器140_5的指令;这种类型的数据依赖性称为写后写(write-after-write,WAW)。第二指令读取映射到寄存器140_5的记分板条目130_5,且确定存在数据依赖性。也就是说,第一指令将要回写到寄存器140_5,且第二指令需要等待第一指令的结果数据。因此,在WAW依赖性的情况下,计数器字段133中的计数器值设置为第一指令的执行时延时间,其中执行时延时间是用于使第一指令将结果数据回写到寄存器140_5的时间量(时钟周期)。基于计数器字段133中的计数器值,第二指令等待,直到第二指令的写入时间大于计数器字段133为止。换句话说,第二指令可基于计数器字段133中的计数器值来调度。

在另一实施例中,计数器字段133的计数器值设置为在发出指令时指令的源操作数读取时间。源操作数读取时间表示用于使功能单元读取对应寄存器的源数据以供执行的时钟周期数。举例来说,如果第一指令(例如,MUL操作)设置为在8个时钟周期内从寄存器140_5(源寄存器)中读取数据,那么将映射到寄存器140_5的记分板条目130_5的计数器字段133设置为8。然后,将在第一指令之后的第二指令解码为写入寄存器140_5的指令;这种类型的数据依赖性称为读后写(write-after-read,WAR)。第二指令直到第一指令从寄存器140_5中读取数据之后才可写入寄存器140_5。第二指令读取映射到寄存器140_5的记分板条目130_5,且确定存在数据依赖性。基于计数器字段133中的计数器值,第二指令等待,直到第二指令的写入时间等于或大于计数器字段133为止。换句话说,可基于计数器字段133中的计数器值来调度执行第二指令。

FUNIT字段135配置成记录功能单元,从所述功能单元回写结果数据。在一些实施例中,FUNIT字段135可用于将结果数据转发到后续指令。举例来说,ADD指令将要存取寄存器140_3,所述寄存器140_3对先前MUL指令的目的地操作数具有数据依赖性。在此情况下,记分板条目的FUNIT字段135可记录MUL,且可通过在功能单元模块160内配置逻辑来直接将MUL指令的结果数据转发到ADD功能单元。在实施例中,可独立地回写到寄存器堆140的功能单元的数量确定FUNIT字段135的大小,其可以是3位或基于设计需求的任何其它合适的位数。应注意,第一指令和第二指令的FUNIT可以是相同FUNIT。只有在计数器字段133与发出指令的回写时间相关联时,FUNIT字段135才是必要的。

尽管图3示出记分板130的条目的一部分,但记分板130的每个条目可包含用于管理寄存器堆140的更多字段。记分板130的每个条目内的未知字段131的位置、功能单元(FUNIT)字段135以及计数器(CNT)字段133可根据设计需求而以不同方式进行配置。

在一些其它实施例中,每个条目可还包含回写大小(writeback size,WB)字段137。图4是示出根据其它实施例的记分板的条目的附图。WB大小字段137配置成记录将数据回写到寄存器的大小。这允许发出指令知道寄存器数据的哪一部分来自数据转发以及数据的哪一部分来自寄存器堆。举例来说,从FUNIT单元模块输出的结果数据可以是全部数据、结果数据的一部分等。

在一些其它实施例中,未知字段131可包含如图4中所示出的第一未知字段131A和第二未知字段131B,所述第一未知字段131A和第二未知字段131B可用以分别记录寄存器的写入依赖性和读取依赖性。第一未知字段131A配置成指示对应寄存器的写入时间(例如,执行时延时间)是未知的,且第二未知字段131B配置成指示对应寄存器的读取时间(例如,吞吐时间)是未知的。第一未知字段131A和第二未知字段131B各自记录独立且彼此不同的值。稍后将描述第一未知字段131A和第二未知字段131B的细节。

在一些其它实施例中,CNT字段133可包含如图4中所示出的第一CNT字段133A和第二CNT字段133B。第一CNT字段133A和第二CNT字段133B配置成相对于时钟周期分别记录寄存器的写入时间和读取时间。举例来说,第一CNT字段133A可设置为对应寄存器的写入时间,且第二CNT字段133B可设置为对应寄存器的读取时间。第一CNT字段133A和第二CNT字段133B是独立且彼此不同的。稍后将描述第一CNT字段133A和第二CNT字段133B的细节。

图5是示出根据本公开的一些实施例的发出具有记分板的指令的过程流程的流程图。图5中所示出的过程流程可通过具有如图2中所示出的架构的处理器来执行。当接收到指令101(步骤S501)时,对指令101进行解码,且获得指令101的源操作数寄存器和目的地操作数寄存器(步骤S503)。然后,发出/解码单元120读取记分板以获得源操作数寄存器的时延信息(步骤S505)。详细地说,存取映射到源操作数寄存器的记分板条目,其中记分板条目的未知字段131、CNT字段133以及FUNIT字段135记录回写到源操作数寄存器的先前指令的时延信息。先前指令可以是任何指令或紧接在指令101之前。

在步骤S507中,检查未知字段131,以确定源操作数寄存器上的先前指令的执行时延时间是否是未知的。如果设置了未知字段131,那么指令101的过程停滞且在下一周期再次存取记分板,直到未知字段131复位为止(步骤S513)。发出指令101的过程停滞,这是因为执行时延时间(例如,先前指令的结果数据的返回)是未知的。举例来说,如果在第二指令之前的第一指令是LOAD指令,那么第一指令的执行时延时间在存在数据命中之前将一直是未知的。在数据命中之后,花费2个时钟周期来将结果数据加载到源操作数寄存器。如果不设置未知字段131,那么发出指令101的过程转到下一步骤以读取CNT字段133。

在实施例中,未知字段131可由先前指令的对应功能单元复位。举例来说,功能单元可在数据命中之后获得执行时延时间。一旦定位待加载的数据,就知道执行时延时间。未知字段131可复位,且可在CNT字段133中设置执行时延时间。

在步骤S511中,检查CNT字段133(即,计数器),以在先前指令将结果数据回写到源操作数寄存器之前确定时钟周期数。如果计数器大于1,那么过程转到停滞(步骤S513)。如果计数器不大于1,那么发出指令101的过程转到下一步骤。

在实施例中,可将记录在源操作数寄存器的CNT字段133中的计数器值添加到先前指令的执行时延时间,所述执行时延时间的总和将表示在所述特定时间第一指令和第二指令的总执行时延时间。换句话说,目的地操作数寄存器的计数器可根据当前指令和先前指令的总执行时延时间来设置。

在步骤S515中,确定计数器是否等于1,这意味着结果数据将在下一个时钟周期从先前指令的功能单元回写到源操作数寄存器。如果计数器等于1,那么功能单元模块160或微处理器100的逻辑可配置成用于将来自先前指令的功能单元的结果数据转发到指令101的功能单元(步骤S517)。源操作数寄存器的FUNIT字段135此处用于建立逻辑以用于数据转发。如果计数器不等于1(意谓计数器字段133是无数据依赖性的零),那么过程转到下一步骤。在实施例中,发出指令复制计数器字段133的值,且FUNIT字段135不必再次存取寄存器记分板。当所复制的计数器值递减到1时,发出指令可直接从先前指令的功能单元中获得结果数据。

在步骤S519中,设置在步骤S503中获得以及通过步骤S509所读取的目的地操作数寄存器的记分板条目。发出指令必须存取记分板一次,以通过存取与目的地操作数寄存器对应的记分板条目的计数器字段133来获得寄存器的可用性。详细地说,目的地操作数寄存器的未知字段131基于指令101的操作进行配置。举例来说,如果指令101是加载操作,那么将设置目的地操作数寄存器的未知字段131。目的地操作数寄存器的CNT字段133将根据指令101的执行时延时间来设置。FUNIT字段135将记录由指令101利用的功能单元。在步骤S521中,发出指令101。

基于上文,引入记分板,以用于有效地处理数据依赖性和发出指令。记分板包含计数器,当发出先前指令时,所述计数器设置为先前指令的执行时延时间,其中计数器在每个时钟周期递减,直到计数器在计数器达到0时自复位为止。计数器值表示用于将先前指令的结果数据回写到将要由发出指令存取的寄存器的时钟周期数。因此,可基于记录在记分板条目中的计数器来有效地处理发出指令的数据依赖性和调度。

在下文中,具有计数器的记分板的利用将通过使用各种实施例来解释。下文所示出的过程流程可通过具有如图2中所示出的架构的处理器来执行。

图6是示出根据本公开的实施例中的一个的具有写后读依赖性的指令的流程图。在实施例中,第一指令是回写到寄存器140(可以是寄存器140_1到寄存器140_N中的任何一个)的指令。在第一指令之后,接收读取寄存器140的第二指令。第一指令可以是紧接在第二指令之前的指令或在第二指令之前发生的任何指令。第二指令对第一指令的目的地操作数寄存器具有写后读依赖性,其中第二指令必须等待,直到第一指令完成执行并且将数据回写到寄存器140为止。

在步骤S601中,接收第二指令。在步骤S603中,对第二指令进行解码,以获得第二指令的源操作数寄存器和目的地操作数寄存器。

在步骤S605中,存取与源操作数寄存器对应的记分板条目,以确定源操作数寄存器是否具有数据依赖性。第二指令的源操作数读取与第一指令的目的地操作数对应的记分板条目(即,第二指令的源操作数与第一指令的目的地操作数相同),以便确定第一指令的执行时延。具体地说,记分板条目的未知字段和CNT字段在此步骤中用于确定第二指令的源操作数寄存器的执行时延时间。首先,检查未知字段,以便确定源操作数寄存器是否具有未知执行时延(步骤S607)。如果设置了未知字段,那么过程转到停滞,直到解决源操作数寄存器的执行时延时间为止(步骤S609)。举例来说,如果在第二指令之前的第一指令是LOAD指令,那么第一指令的执行时延时间在存在数据命中之前将一直是未知的。在数据命中之后,花费2个时钟周期来将结果数据加载到源操作数寄存器。换句话说,将与第一指令的目的地寄存器对应的计数器字段133设置为2,而将未知字段131复位到0。

在步骤S611中,检查源操作数寄存器的计数器。具体地说,过程检查计数器是否小于或等于1。如果计数器不小于或等于1,那么过程转到步骤S613,其中计数器在每个时钟周期递减一。在替代实施例中,当计数器等于1时,过程转到步骤S617以用于数据转发。如上文所描述,计数器1意味着结果数据的回写将在下一个时钟周期发生,且因此,可从第一指令(数据转发)的功能单元获得结果数据,而不是从寄存器获得结果数据。

在步骤S619中,可配置与第二指令的目的地操作数寄存器对应的记分板条目。举例来说,与目的地操作数寄存器对应的记分板条目的未知字段131、CNT字段133以及FUNIT字段135可根据第二指令的执行时延时间和功能单元来设置。在步骤S621中,发出第二指令。在另一实施例中,由于定时路径,因此功能单元可能不允许转发结果数据,在此情况下,功能单元字段135用于阻止转发,且计数器字段133在可以发出依赖指令之前必须为零。

图7是示出根据本公开的实施例中的一个的具有写后写依赖性的指令的流程图。在实施例中,第一指令是回写到寄存器140的指令。在第一指令之后,第二指令也是回写到寄存器140的指令。第一指令可以是在第二指令之前发生的任何指令。在实施例中,第二指令的目的地操作数对第一指令的目的地操作数寄存器具有写后写(WAW)依赖性。第二指令必须等待,直到第一指令在第二指令可以写入寄存器140之前将数据回写到寄存器140为止。在实施例中,第二指令的目的地操作数读取第一指令的目的地操作数寄存器的记分板条目。

在步骤S701中,接收写入先前发出的指令(即,第一指令)的目的地操作数寄存器的指令101(即,第二指令)。在步骤S703中,对接收到的第二指令进行解码,以获得第二指令的目的地操作数寄存器。在步骤S705中,第二指令(目的地操作数)读取记分板条目,以获得目的地操作数寄存器的时延信息。在步骤S707中,存取与目的地操作数寄存器对应的记分板条目的未知字段。如果设置了未知字段(其指示第一指令的执行时延是未知的),那么过程停滞,直到第一指令到目的地操作数寄存器的执行时延时间解决为止(步骤S709)。如果不设置未知字段或复位未知字段,那么过程转到下一步骤以检查计数器。

在步骤S711中,存取与目的地操作数寄存器对应的记分板条目的CNT字段,所述CNT字段是记录第一指令到目的地操作数寄存器的当前执行时延时间的计数器。在实施例中,第二指令将要回写与第一指令相同的目的地操作数寄存器。因此,第二指令必须等待,直到目的地操作数寄存器的计数器小于或等于(在另一实施例中)第二指令的执行时延时间为止。如果计数器不小于或等于第二指令的执行时延时间,那么过程转到步骤S713,其中计数器在每个周期递减一。步骤S713将循环回到步骤S711,直到目的地操作数寄存器的计数器小于或等于第二指令的执行时延时间为止。

当计数器小于或等于执行时延时间时,过程将转到步骤S719。在步骤S719中,与目的地操作数寄存器对应的记分板条目将基于第二指令的执行时延时间来设置。也就是说,未知字段、CNT字段以及FUNIT字段将基于第二指令的操作来记录。在步骤S721中,发出第二指令。

在实施例中,发出指令仅必须存取记分板一次,以通过存取与发出指令的目的地操作数寄存器对应的记分板条目的计数器字段133来获得先前指令的执行时延时间或吞吐时间。换句话说,指令可通过其自身基于从记分板条目130_x获得的计数器133来倒计数先前指令的执行时延时间或吞吐时间,且当计数器等于或低于发出指令的执行时延时间时继续执行。如果计数器字段133与先前指令的执行时延时间对应,那么数据依赖性类型是写后写。如果计数器字段133与先前指令的吞吐时间对应,那么数据依赖性类型是读后写。

图8是示出根据本公开的实施例中的一个的具有读后写依赖性的指令的流程图。在实施例中,第一指令是读取寄存器140的指令。在第一指令之后,第二指令是回写到寄存器140的指令。第一指令可以是在第二指令之前发生的任何指令。在实施例中,第二指令的目的地操作数对第一指令的源操作数寄存器具有读后写(WAR)依赖性。第二指令必须等待,直到第一指令从寄存器140中读取数据为止。在实施例中,第二指令的目的地操作数读取将在图8中描述的第一指令的源操作数寄存器的记分板条目。

举例来说,第一指令将要在6个时钟周期内读取寄存器140_2,且第二指令是将要在2个时钟周期内回写到寄存器140_2的指令。在实施例中,CNT字段的计数器设置为寄存器140_2上的第一指令的吞吐时间。吞吐时间是指令读取源操作数寄存器的时间。与执行指令的完成的执行时延时间相比,吞吐时间限定用于使第一指令的源操作数读取数据的时间量。由于第一指令仅用以读取寄存器140_2,因此第二指令的发出不必等待第一指令完成。在第一指令已从寄存器140_2读取数据之后,第二指令可写入寄存器140_2。

在步骤S801中,接收写入先前发出的指令(即,第一指令)的源操作数寄存器的指令101(即,第二指令)。在步骤S803中,对接收到的第二指令进行解码,以获得第二指令的目的地操作数寄存器。在步骤S805中,第二指令(目的地操作数)读取记分板条目,以获得源操作数寄存器的读取时间信息。在步骤S807中,存取与第一指令的源操作数寄存器对应的记分板条目的未知字段。如果设置了未知字段(其指示第一指令的读取时间是未知的),那么过程停滞,直到第一指令到源操作数寄存器的读取时间解决为止(步骤S809)。如果不设置未知字段或复位未知字段,那么过程转到下一步骤以检查计数器。

在步骤S811中,存取与第一指令的源操作数寄存器对应的记分板条目的CNT字段,所述CNT字段是记录第一指令到源操作数寄存器的吞吐时间的计数器。在实施例中,在第一指令的源操作数将用以读取时,第二指令将要回写到相同操作数寄存器。因此,第二指令必须等待,直到第一指令的计数器小于第二指令的执行时延时间为止,这意味着第一指令的源操作数已经从操作数寄存器中读取数据。如果计数器不小于第二指令的执行时延时间,那么过程转到步骤S813,其中计数器在每个周期递减一。步骤S813将循环回到步骤S811,直到第一指令的计数器小于第二指令的执行时延时间为止。

当计数器小于执行时延时间时,过程将转到步骤S819。在步骤S819中,与目的地操作数寄存器或源操作数寄存器对应的记分板条目将基于第二指令的执行时延时间或吞吐时间来设置。也就是说,未知字段、CNT字段以及FUNIT字段将基于第二指令的操作来记录。在步骤S821中,发出第二指令。

以上描述示出利用具有计数器的自复位记分板来处理具有RAW、WAW以及WAR数据依赖性的指令。下文示出可并入到上述实施例中的任何一个的其它替代方案。

在实施例中,数据依赖性可通过使后续指令延迟执行进一步改良。举例来说,M个时钟周期可添加到指令的执行时延时间和读取时间,其中M可以是任何正实数。换句话说,调度指令以用于在时间M时钟周期读取寄存器堆140以开始执行,并且将来在时间M+时延时钟周期(即,M个时钟周期加上指令的执行时延时间)将结果数据回写到寄存器堆140。M+时延时钟周期称为指令的回写时间。在实施例中,如图4中所示出的时延计数器133A或读取时间计数器133B将分别与M个时钟周期与执行时延时间和M时钟周期读取时间的总和进行比较。在实施例中,图6的步骤S611与M时间而不是1进行比较,图7的步骤S711与回写时间而不是时延时间进行比较,且图8的步骤S811与回写时间而不是时延时间进行比较。

在实施例中,发出指令可以是对存储在一个或多个寄存器中的数据执行操作的多个微操作。利用记录先前指令的执行时延时间的记分板条目的计数器,微处理器100可将微操作流水线化到功能单元模块中,且每次执行一个微操作。在图7中所示出的实施例中,根据先前指令的执行时延时间来设置计数器,且将所述计数器与1进行比较,其中当计数器等于1时,可以转发数据,或如果计数器等于0时,那么没有数据依赖性。利用多个微操作,当计数器等于1或0时,可发出在第一微操作之后的第二微操作。当计数器等于1时,可以转发第一微操作具有数据依赖性的结果数据,或当计数器等于0时,将结果数据回写到寄存器。对于在第一微操作之后的第二微操作,第二微操作可通过花费了第一微操作的发出时间来发出。详细地说,当计数器等于2或1时,可以发出第二微操作,这表示当计数器等于2时,可以转发结果数据,或当计数器等于1时,可以从寄存器中存取结果数据。每个微操作具有其自身的读取时间和回写时间。第二微操作的读取时间可以是第一微操作的读取时间的+1或+s。步骤S611、步骤S711以及步骤S811包含每个微操作的读取时间和回写时间的比较。

前文已概述了若干实施例的特征,使得本领域的技术人员可更好地理解以下详细描述。本领域的技术人员应了解,其可以易于使用本公开作为设计或修改用于进行本文中所引入的实施例的相同目的和/或实现相同优点的其它过程和结构的基础。本领域的技术人员还应认识到,这种等效构造并不脱离本公开的精神和范围,且本领域的技术人员可以在不脱离本公开的精神和范围的情况下在本文中进行各种改变、替代以及更改。

22页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种在MIPS体系实现快速中断响应的方法

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!