CN115437694A - 微处理器、适用于微处理器的方法以及数据处理系统 - Google Patents

微处理器、适用于微处理器的方法以及数据处理系统 Download PDF

Info

Publication number
CN115437694A
CN115437694A CN202111395887.5A CN202111395887A CN115437694A CN 115437694 A CN115437694 A CN 115437694A CN 202111395887 A CN202111395887 A CN 202111395887A CN 115437694 A CN115437694 A CN 115437694A
Authority
CN
China
Prior art keywords
type
instruction
execution queue
execution
count value
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202111395887.5A
Other languages
English (en)
Inventor
陈丁明
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Andes Technology Corp
Original Assignee
Andes Technology Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Andes Technology Corp filed Critical Andes Technology Corp
Publication of CN115437694A publication Critical patent/CN115437694A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • G06F1/32Means for saving power
    • G06F1/3203Power management, i.e. event-based initiation of a power-saving mode
    • G06F1/3234Power saving characterised by the action undertaken
    • G06F1/3243Power saving in microcontroller unit
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30141Implementation provisions of register files, e.g. ports
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3818Decoding for concurrent execution
    • G06F9/3822Parallel decoding, e.g. parallel decode units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)
  • Hardware Redundancy (AREA)

Abstract

本发明介绍一种微处理器,包含共享功能单元、第一执行队列以及第二执行队列。第一执行队列包含多个条目,其中第一执行队列的每一条目包含第一计数值,第一计数值递减直到第一计数值达到0为止。当第一计数值达到0时,第一执行队列将第一类型指令分派到共享功能单元。第二执行队列包含多个条目,其中第二执行队列的每一条目包括第二计数值,第二计数值递减直到第二计数值达到0为止。当第二计数值达到0时,第二执行队列将第二类型指令分派到共享功能单元。发布单元解析所有数据相依性和资源冲突,使得第一计数值和第二计数值被预设用于共享功能单元在未来的确切时间相互执行的第一类型指令和第二类型指令。

Description

微处理器、适用于微处理器的方法以及数据处理系统
技术领域
本公开大体上涉及一种微处理器,且更具体地说,涉及一种具有用于执行多类型指令的共享功能单元的微处理器、适用于微处理器的方法以及数据处理系统。
背景技术
超标量微处理器通过每时钟周期执行多个指令且通过指令的乱序执行而实现高性能。指令必须有序写回到寄存器组,以避免如分支误预测、中断以及精确异常的控制危险。如重新排序缓冲器、寄存器重命名的临时存储装置用于结果数据,直到其可有序引退到寄存器组为止。此外,需要存储装置来将源操作数数据保持在执行队列中,直到指令可由功能单元执行为止。这些存储装置通常是架构寄存器组的大小的数倍,且这些存储装置的读取/写入消耗更多的功率。
当微处理器包含独立的多类型处理单元(如标量浮点单元(floating-pointunit;FPU)和向量处理单元(vector processing unit;VPU))时,包含性能、功率以及面积(performance,power,and area;PPA)的设计微处理器的指标难以实现。VPU由整数和浮点(floating-point;FP)算术函数两者组成。与整数执行单元相比,FP执行单元的大小大得多。在不同类型的指令之间共享执行单元可能是极复杂的,尤其是在处理不同寄存器组、数据相依性以及结果转发的乱序执行微处理器中。微处理器可通过串行化指令类型来共享执行单元,即标量FP指令必须完成,且在可将向量指令发送到执行单元之前清除执行单元。然而,当允许来自两个多类型处理单元的指令处于微处理器的执行管线中时,微处理器的性能受到限制。
发明内容
本公开介绍一种能够改进具有共享功能单元的微处理器的性能的微处理器、方法以及数据处理系统。
在一些实施例中,微处理器包含共享功能单元、第一执行队列、第二执行队列、第一类型发布单元以及第二类型发布单元。第一执行队列包含多个条目,其中第一执行队列的每一条目记录第一类型指令,第一执行队列的每一条目包含对应于第一类型指令的第一计数值,第一计数值递减直到第一计数器达到0为止。当对应于第一类型指令的第一计数值达到0时,第一执行队列将第一类型指令分派到共享功能单元。第二执行队列包含多个条目,其中第二执行队列的每一条目记录第二类型指令,第二执行队列的每一条目包含对应于第二类型指令的第二计数值,第二计数值递减直到对应于第二类型指令的第二计数值达到0为止。当第二计数器达到0时,第二执行队列将第二类型指令分派到共享功能单元。共享功能单元执行第一类型指令和第二类型指令,其中来自第一执行队列的第一类型指令和来自第二执行队列的第二类型指令相互排斥地分派到共享功能单元。与动态地选择不同类型的指令以用于由共享功能单元执行的现有技术的重要区别在于,通过使用预设计数器(第一计数值和第二计数值),指令被调度为在未来的确切时间由共享功能单元执行。寄存器组的数据的读取和写入被预设为针对第一类型指令或第二类型指令在共享功能单元的未来的确切执行时间同步。与现有技术一样,不需要动态冲突解析,不需要动态数据相依性解析以及不需要动态读取/写入端口解析。动态解析是微处理器设计中的最多功率消耗。
在一些实施例中,方法适用于包括第一执行队列、第二执行队列、共享功能单元的微处理器。方法包含以下步骤:响应于确定包含于第一执行队列的条目中的第一计数器达到0而将记录于第一执行队列的条目中的第一类型指令分派到共享功能单元;响应于确定包含于第二执行队列的条目中的第二计数器达到0而将记录于第二执行队列的条目中的第二类型指令分派到共享功能单元;以及由共享功能单元执行第一类型指令和第二类型指令。
在一些实施例中,数据处理系统包含存储器和微处理器,其中存储器配置成存储第一类型指令和第二类型指令。微处理器包含共享功能单元、第一执行队列、第二执行队列、第一类型发布单元以及第二类型发布单元。第一执行队列包含多个条目,其中第一执行队列的每一条目记录第一类型指令,第一执行队列的每一条目包含对应于第一类型指令的第一计数值,第一计数值递减直到第一计数器达到0为止。当对应于第一类型指令的第一计数值达到0时,第一执行队列将第一类型指令分派到共享功能单元。第二执行队列包含多个条目,其中第二执行队列的每一条目记录第二类型指令,第二执行队列的每一条目包含对应于第二类型指令的第二计数值,第二计数值递减直到第二计数器达到0为止。当第二计数器达到0时,第二执行队列将第二类型指令分派到共享功能单元。共享功能单元执行第一类型指令和第二类型指令,其中来自第一执行队列的第一类型指令和来自第二执行队列的第二类型指令相互分派到共享功能单元。在另一实施例中,第一执行队列和第二执行队列可合并成具有用以指示队列的每一条目的指令的类型的标签的单个队列。单个执行队列更高效,但两个执行队列更易于配置。
附图说明
当结合随附附图阅读时从以下详细描述最好地理解本公开的各方面。应注意,根据业界中的标准惯例,各种特征未按比例绘制。实际上,为了论述清楚起见,可任意增大或减小各种特征的尺寸。
图1是示出根据一些实施例的数据处理系统的框图;
图2是示出根据一些实施例的记分板和寄存器组的图;
图3A到图3B是示出根据一些实施例的记分板条目的各种结构的图;
图4是示出根据一些实施例的与寄存器组的读取端口相关联的读取移位器的图;
图5是示出根据一些实施例的与寄存器组的写入端口相关联的写入移位器的图;
图6是示出根据一些实施例的执行队列的图;
图7A到图7B是示出根据一些实施例的微处理器的各种结构的图;
图8是示出根据一些实施例的执行队列的图;
图9是示出根据一些实施例的发布指令的过程的流程图;
图10是示出根据一些实施例的适用于微处理器的方法的流程图。
附图标号说明
1:数据处理系统;
10:微处理器;
11:指令高速缓存;
12:分支预测单元;
13、13b、13c:解码/发布单元;
14、14b、14c:寄存器组;
15、15b、15c:记分板;
16、16b、16c:读取/写入控制单元;
17:加载/存储单元;
18:数据高速缓存;
19、19A、19B、19C、19D、19E、291A、291B、291C、292A、292B、292C:执行队列;
19s:共享执行队列;
20、20A、20B、20C、160、201A、201B、202A、202B:功能单元;
20s:共享功能单元;
22:标签阵列;
163:写入移位器;
24:数据阵列/数据高速缓存;
30:存储器;
31、31b、31c:读取总线;
32、32b、32c:结果总线;
100、100A、100B、100C:执行块;
150(0)、150(N)、190(0)、190(1)、190(2)、190(Q)、1510(0)、1510(N)、1610(1)、1610(M)、1630(1)、1630(P):条目;
151:第一记分板;
152:第二记分板;
161:读取移位器/移位寄存器;
171:地址产生单元;
191:有效字段;
192:微操作计数字段;
193:执行控制数据字段;
194:吞吐量计数字段;
195:数据字段;
197:读取计数字段;
199:累积计数器;
199b:向量累积吞吐量计数器;
199c:FP累积吞吐量计数器;
200A、200B、200C、200D:执行单元;
300、302_1、302_2、330:多路复用;
303:微操作计数器;
305:吞吐量计数器;
501、502、503b、503c、510、511b、511c:块;
1511、1521:未知字段;
1531、1523:计数字段;
1551:功能单元字段;
1520(0)、1520(N):记分板条目;
1611、1611(X):读取有效字段;
1613:地址字段/寄存器地址;
1631、1631(Y):写回有效字段;
1633:写入地址字段/寄存器地址;
1635:功能单元字段;
f_active:FP活动位;
f_inst:FP指令;
inst:有效指令;
R(0)、R(N):寄存器;
rd_cnt:读取计数;
v_active:向量活动位;
v_inst:向量指令。
具体实施方式
以下公开内容提供用于实施本公开的不同特征的多个不同实施例或实例。下文描述组件和布置的特定实例来简化本公开。当然,这些仅是实例且并不希望为限制性的。举例来说,在以下描述中,第一特征在第二特征上方或上的形成可包含第一特征与第二特征直接接触地形成的实施例,且还可包含额外特征可在第一特征与第二特征之间形成以使得第一特征与第二特征可不直接接触的实施例。此外,本公开可在各种实例中重复附图标记和/或字母。此重复是出于简单和清晰的目的,且本身并不指示所论述的各种实施例和/或配置之间的关系。
本公开介绍一种将指令调度到未来时间以供执行而非暂停管线的微处理器。此处理器还可称为未来调度执行(future scheduling execution;FSE)微处理器。常规地,如果由指令指定的寄存器或功能单元未就绪(例如,资源冲突,如数据相依性、寄存器的读取和写入端口的可用性、功能单元的可用性等),那么解码/发布单元将暂停执行管线或将指令放在一边,直到解析寄存器或功能单元的可用性为止。在FSE微处理器中,基于解析数据相依性、寄存器和功能单元的读取和写入端口在未来时间的可用性,解码/发布单元仍将会发布这些指令并将其调度到未来时间以供执行。
参考图1,根据一些实施例示出包含微处理器10和存储器30的数据处理系统1的示意图。微处理器10实施为通过执行存储于存储器30中的指令来执行多种数据处理功能性。存储器30可包含2级(level 2;L2)高速缓存和3级(level 3;L3)高速缓存以及数据处理系统1的主存储器,其中L2高速缓存和L3高速缓存具有比主存储器更快的存取时间。存储器可包含随机存取存储器(random access memory;RAM)、动态随机存取存储器(dynamicrandom access memory;DRAM)、静态随机存取存储器(static random access memory;SRAM)、只读存储器(read only memory;ROM)、可编程只读存储器(programmable readonly memory;PROM)、电可编程只读存储器(electrically programmable read onlymemory;EPROM)、电可擦除可编程只读存储器(electrically erasable programmableread only memory;EEPROM)以及快闪存储器中的至少一个。
微处理器10可为在单个微处理器内实施指令级并行性的超标量微处理器。超标量微处理器通过每时钟周期执行多个指令而实现高性能。将多个指令分派到不同功能单元以供并行执行。超标量微处理器可采用乱序(out-of-order;OOO)执行,其中可在第一指令之前执行对第一指令没有任何相依性的第二指令。在传统的乱序微处理器设计中,指令可乱序执行,但由于如分支误预测、中断以及精确异常的控制危险,所述指令必须有序引退到微处理器的寄存器组。如重新排序缓冲器和寄存器重命名的临时存储装置用于结果数据,直到指令从执行管线有序引退为止。在本发明中,只要指令不具有数据相依性和控制危险,微处理器10就可通过将结果数据乱序写回到寄存器组而乱序执行和引退指令。在实施例中,没有临时寄存器用于此FSE微处理器10,这是因为微处理器10配置成通过将指令调度到未来时间而发布具有数据相依性或控制危险的指令。然而,本公开并不希望限于此。在一些其它实施例中,还可使用临时寄存器。
参考图1,微处理器10可包含指令高速缓存11、分支预测单元(branch predictionunit;BPU)12、解码/发布单元13、寄存器组14、记分板15、读取/写入控制单元16、加载/存储单元17、数据高速缓存18、多个执行队列(execution queue;EQ)19A到19E,其中执行队列可用于专用(如标签执行队列TEQ 19D和数据执行队列DEQ 19E)、多个功能单元(functionalunit;FUNT)20A到20C。微处理器10还包含读取总线31和结果总线32。读取总线31耦合到加载/存储单元17、功能单元20A到功能单元20C以及寄存器组14以用于将操作数数据从寄存器组14中的寄存器传输到加载/存储单元17和功能单元20A到功能单元20C,这还可称为从寄存器组14读取操作数据(或在存储指令的情况下存储数据)的操作。结果总线32耦合到数据高速缓存18、功能单元20A到功能单元20C以及寄存器组14以用于将数据从数据高速缓存18或功能单元20A到功能单元20C传输到寄存器组14的寄存器,这还可称为将结果数据写回到寄存器组14(或在加载指令的情况下加载数据)的操作。本文中以后接字母的特定附图标记指代的元件将由单独附图标记共同指代。举例来说,除非指定,否则执行队列19A到执行队列19E将统称为执行队列19。解码/发布单元13、记分板15、读取/写入控制单元16、寄存器组14、多个执行队列19以及多个功能单元20在执行块100A中分组在一起,以用于通过同一寄存器组进行数据存取的一种类型的指令。在一些实施例中,微处理器10还可执行其它类型的指令,如执行块100B和执行块100C中所示出的向量指令或浮点指令,所述执行块在本文中统称为执行块100。在一些实施例中,指令可包含不同类型的指令。举例来说,指令可包含向量指令、标量FP指令、单指令/多数据(Single Instruction/Multiple Data;SIMD)指令、数字信号处理(digital signal processing;DSP)指令或任何其它类型的指令中的至少一个。向量指令、标量FP指令、SIMD指令、DSP指令的定义在所提交的相关技术中是众所周知的,因此下文省略关于那些指令类型的详细描述。本公开的一些实施例可使用比图1中所示出的组件更多、更少或不同的组件。
在一些实施例中,指令高速缓存11耦合(未示出)到存储器30和解码/发布单元13,且配置成存储从存储器30提取的指令并将所述指令分派到解码/发布单元13。指令高速缓存11包含来自存储器30的连续指令字节的许多高速缓存线。高速缓存线组织为直接映射、完全关联映射或组关联映射等。直接映射、完全关联映射以及组关联映射在相关技术中是众所周知的,因此下文省略关于以上映射的详细描述。
指令高速缓存11可包含标签阵列(未示出)和数据阵列(未示出)以用于分别存储由微处理器10使用的频繁使用指令的地址的一部分和数据。标签阵列中的每一标签对应于数据阵列中的高速缓存线。当微处理器10需要执行指令时,微处理器10首先通过将指令的地址与存储于标签阵列中的标签进行比较来检查指令在指令高速缓存11中的存在。如果指令地址与标签阵列中的标签中的一个匹配(即,高速缓存命中),那么从数据阵列提取对应高速缓存线。如果指令地址不与标签阵列中的任何条目匹配,那么其是高速缓存未命中,那么微处理器10可存取存储器30以找到指令。在一些实施例中,微处理器10还包含耦合到指令高速缓存11的指令队列(未示出)和用于在将指令发送到解码/发布单元13之前存储来自指令高速缓存11或存储器30的指令的解码/发布单元13。
BPU 12耦合到指令高速缓存11且配置成推测地提取分支指令之后的指令。BPU 12可基于分支指令的过往行为而提供对分支指令的分支方向(采取或不采取)的预测,且提供所采取分支指令的预测分支目标地址。分支方向可被“采取”,其中从所采取分支指令的分支目标地址提取后续指令。分支方向可“未采取”,其中从与分支指令连续的存储器位置提取后续指令。在一些实施例中,BPU 12实施用于从基本块的起始地址预测基本块的结束的基本块分支预测。基本块的起始地址(例如,基本块的第一指令的地址)可为先前所采取分支指令的目标地址。基本块的结束地址是在基本块的最后一个指令之后的指令地址,所述指令地址可以是另一基本块的起始地址。基本块可包含多个指令,且当基本块中的分支跳跃到另一基本块时,所述基本块结束。
功能单元可包含可执行分支指令且确定所预测分支方向是否不正确(误预测)的分支执行单元(branch execution unit;BEU)(其可为功能单元20中的一个)。举例来说,BEU可将所预测分支方向(采取或未采取)与所执行的实际分支进行比较以确定所预测分支方向是否正确。从微处理器中的各种单元舍弃误预测分支之后的指令。分支误预测还可来自解码/发布单元13以对未由BPU 12预测的非条件分支指令(始终采取的分支)进行解码。解码/发布单元13和BPU 12可将更新信息提供到BPU 12。在微处理器10中,分支指令之后的指令必须直到分支指令执行之后才写回到寄存器组14。
解码/发布单元13可对从指令高速缓存11接收到的指令进行解码。指令可包含以下字段:操作代码(或操作码)、操作数(例如,源操作数和目的地操作数)以及立即数据。操作码可指定进行何种操作(例如,ADD、SUBTRACT、SHIFT、STORE、LOAD等)。操作数可指定寄存器组14中的寄存器的索引或地址,其中源操作数指示来自寄存器组的将从其读取操作的寄存器,且目的地操作数指示寄存器组中的操作的结果数据将写回到的寄存器。应注意,源操作数和目的地操作数还可称为源寄存器和目的地寄存器,其在下文中可互换使用。在一些实施例中,操作数将需要5位索引来识别具有32个寄存器的寄存器组中的寄存器。一些指令可使用如指令中所指定的立即数据而非寄存器数据。每一操作将在功能单元20或加载/存储单元17中执行。基于由操作码指定的操作类型和资源(例如,寄存器、功能单元等)的可用性,每一指令将具有执行等待时间和吞吐时间。执行等待时间(或等待时间)是指用于执行由指令指定的操作以完成和写回结果数据的时间量(即,时钟周期数)。吞吐时间是指下一指令可进入功能单元20时的时间量(即,时钟周期数)。
在实施例中,在解码/发布单元13中基于操作码针对执行等待时间、吞吐时间以及指令类型对指令进行解码。指令被分派到执行队列19以由功能单元20或加载/存储单元17执行。多个指令可发布到其中累积吞吐时间的一个执行队列19。累积时间鉴于执行队列19中先前发布的指令而指示下一指令可进入功能单元20以供执行的时间。指令可发送到功能单元20时的时间称为读取时间(来自寄存器组),且指令由功能单元20完成时的时间称为写入时间(到寄存器组)。指令发布到执行队列19,其中每一所发布指令具有调度的读取时间以分派到功能单元20或加载/存储单元17以供执行。累积吞吐时间为发布指令的读取时间。当指令发布到执行队列19的下一可用条目时,将指令的指令等待时间添加到累积吞吐量以产生写入时间。累积时间修改发布指令的等待执行时间和开始时间。修改后的执行等待时间在本文中将称为最近发布的指令的写入时间,且修改后的开始时间在本文中将称为所发布指令的读取时间。写入时间和读取时间还可称为存取时间,所述存取时间描述将所发布指令写入到寄存器组14的寄存器或从寄存器组14的寄存器读取所发布指令的特定时间点。对于多于一个指令的并行发布,可基于在第二指令之前发布的第一指令而进一步调整第二指令的写入时间和读取时间。解码/发布单元13可将加载/存储指令解码为包含标签微操作和数据微操作的两个微操作。
在一些实施例中,在发布指令之前,解码/发布单元13检查且解析所有可能的冲突。指令可具有以下4种基本类型的冲突:(1)数据相依性,其包含读后写(write-after-read;WAR)、写后读(read-after-write;RAW)以及写后写(write-after-write;WAW)相依性;(2)用以从寄存器组读取数据到功能单元的读取端口的可用性;(3)用以从功能单元写回数据到寄存器组的写入端口的可用性;以及(4)用以执行数据的功能单元20的可用性。在指令可分派到执行队列19之前,解码/发布单元13可存取记分板15以检查数据相依性。寄存器组14具有有限数目个读取端口和写入端口,其中所发布指令必须仲裁或保留读取端口和写入端口以在未来时间存取寄存器组14。读取/写入控制单元16保持针对指令的每一源操作数的调度的读取时间和针对指令的每一目的地操作数的调度的写入时间。解码/发布单元13可存取读取/写入控制单元16以检查寄存器组14的读取端口的可用性,以便调度指令的存取时间(即,读取时间和写入时间)。在其它实施例中,写入端口中的一个可专用于具有未知执行等待时间以写回到寄存器组14而不使用写入端口控制的指令,且可保留读取端口中的一个以用于具有未知读取时间以从寄存器组14读取数据而不使用读取端口控制的指令。寄存器组14的读取端口的数目可动态保留(不专用)用于未知读取操作。在这种情况下,功能单元20或加载/存储单元17必须确保读取端口在试图从寄存器组14读取数据时不忙碌。在实施例中,可通过与其中累积所排队指令(即,先前发布到执行队列)的吞吐时间的执行队列19协调来解析功能单元20的可用性。基于执行队列中的累积吞吐时间,指令可分派到执行队列19,其中指令可调度为在功能单元20可用的未来的特定时间发布到功能单元20。
图2是示出根据本公开的一些实施例的寄存器14和记分板15的框图。寄存器组14可包含多个寄存器R(0)到R(N)、读取端口以及写入端口(未示出),其中N是大于1的整数。在实施例中,寄存器组14可包含标量寄存器组和向量寄存器组。本公开并不希望限制寄存器组14中的寄存器、读取端口以及写入端口的数目。记分板15包含多个条目150(0)到150(N),且每一记分板条目对应于寄存器组14中的一个寄存器且记录与对应寄存器相关的信息。在一些实施例中,记分板15具有与寄存器组14相同数目个条目(即,N数目个条目),但本公开并不希望限制记分板15中的条目的数目。
图3A到图3B是示出根据本公开的一些实施例的记分板条目的各种结构的图。在实施例中,记分板15可包含用于处置到寄存器组14的写回操作的第一记分板151和用于处置来自寄存器组14的读取操作的第二记分板152。第一记分板151和第二记分板152可或可不共存于微处理器10中。本公开并不希望限于此。在其它实施例中,可将第一记分板151和第二记分板152实施为或视为处置读取操作和写入操作两者的一个记分板15。图3A示出用于所发布指令的目的地寄存器的第一记分板151。图3B示出用于所发布指令的源寄存器的第二记分板152。参考图3A,第一记分板151的每一条目1510(0)到1510(N)包含未知字段(“Unknown”)1511、计数字段(“cnt”)1531以及功能单元字段(“funit”)1551。这些字段中的每一个记录与待由所发布指令写入的对应目的地寄存器相关的信息。可在发布指令时设置记分板条目的这些字段。
未知字段1511包含指示对应于记分板条目的寄存器的写入时间是已知还是未知的位值。举例来说,未知字段1511可包含一个位,其中非零值指示寄存器具有未知写入时间,且零值指示寄存器具有如由计数字段1531指示的已知写入时间。在一些实施例中,未知字段1511可包含用以指示将具有未知写入时间的一个或多个所发布指令调度为写入寄存器的任何数目个位。未知字段1511可在指令的发布时间设置或修改且在解析未知寄存器写入时间之后复位。可通过解码/发布单元13、加载/存储单元17(例如,在数据命中之后)或功能单元20(例如,在INT DIV操作解析待划分的数字的数目之后)以及微处理器中涉及执行具有未知写入时间的指令的其它单元来执行复位操作。在一些实施例中,未知字段1511可包含两个位,这将具有记录具有未知写入时间的调度为写入寄存器的三个其它所发布指令的存在的4种不同状态。在又一些其它实施例中,未知字段1511可包含三个位、四个位等,以记录具有未知写入时间的多个所发布指令。
计数字段1531记录指示在寄存器可由下一指令写入(发布)之前的时钟周期数的计数值,其还可称为记录写入计数值的写入计数字段。换句话说,计数字段1531记录先前发布的指令将完成操作且将结果数据写回到寄存器的时钟周期数。基于指令的发布时间处的执行等待时间来设置计数字段1531的计数值。接着,计数值针对每一时钟周期向下计数(即,递减一),直到计数值变为零(即,自复位计数器)为止。举例来说,ADD指令的执行等待时间为2个时钟周期,且计数字段1531中的计数值将在目的地寄存器的ADD指令的发布时间设置为2且在计数字段达到0时自复位。计数值3指示结果数据将在3个时钟周期后写回到对应于记分板条目的寄存器,计数值1指示结果数据将在下一时钟周期中写回到寄存器,且计数值0指示不存在用于存取寄存器的数据相依性。在实施例中,所发布指令可写入到寄存器或从寄存器读取。在写入到寄存器的情况下,计数字段1531的值可称为写入(或等待)计数值。在读取到寄存器的情况下,计数字段1531的值可称为将在图3B中论述的读取计数值。换句话说,在一些其它实施例中,计数值字段可取决于所发布指令所指定的操作而记录寄存器的写入时间或读取时间。
记分板条目的功能单元字段1551指定待写回到寄存器的功能单元20(由所发布指令指定)。举例来说,记录ALU的功能单元字段1551指示结果数据将从ALU功能单元写回到寄存器。在一些实施例中,功能单元字段1551中的所记录功能单元可用于在计数字段1531达到值1时将来自所记录功能单元的结果数据转发到由下一指令指定的另一功能单元。
图3B是示出根据本公开的一些实施例的记分板条目的结构的图。具有记分板条目1520(0)到记分板条目1520(N)的结构的第二记分板152设计成解析在从寄存器读取所发布指令之前写入到对应于记分板条目的寄存器时的冲突。第二记分板还可称为用于解析WAR数据相依性的WAR记分板。记分板条目1520(0)到记分板条目1520(N)中的每一个包含未知字段(“Unknown”)1521和计数字段(还可称为计数字段)(“read_cnt”)1523。可在WAR记分板的实施方案中省略功能单元字段。未知字段1521包含指示对应于记分板条目的寄存器的读取时间是已知还是未知的位值。未知字段1521的操作和功能性类似于未知字段1511,因此,出于简洁的目的省略其细节。计数字段1523记录指示先前发布的指令从对应寄存器读取将花费的时钟周期数的读取计数值。计数字段1523还可称为存储读取计数值的读取计数字段。类似于(写入)计数字段1531的写入计数值,读取计数值针对每一时钟周期向下计数一,直到读取计数值达到0为止。除非指定,否则(读取)计数字段1523的操作和功能性类似于(写入)计数字段1531,因此省略其细节。
读取/写入控制单元16配置成在未来在多个时钟周期处记录寄存器组14的读取端口和/或写入端口的可用性以用于调度待发布的指令的存取。在发布指令时,基于指令所指定的存取时间,解码/发布单元13存取读取/写入控制单元16以检查寄存器组14的读取端口和/或写入端口的可用性。详细地说,读取/写入控制单元16在未来时间选择可用读取端口作为将源操作数读取到功能单元20的所调度读取时间,且在未来时间选择可用写入端口作为写回来自功能单元20的结果数据的所调度写入时间。在实施例中,读取/写入控制单元16可包含用于如上文所描述调度读取端口和写入端口的读取移位器161和写入移位器163。
图4是示出根据本公开的一些实施例的与寄存器组的读取端口相关联的读取移位器161的图。图5是示出根据本公开的一些实施例的与寄存器组的写入端口相关联的写入移位器163的图。寄存器组14的读取端口中的每一个可与一个读取移位器161相关联,且寄存器组14的写入端口中的每一个可与一个写入移位器163相关联。在实施例中,读取移位器161和写入移位器163可包含于读取/写入控制单元16中。然而,本公开并不限于此。在一些其它实施例中,读取移位器161和写入移位器163可在读取/写入控制单元16外部,其中读取/写入控制单元16可分别以通信方式耦合到读取移位器161和写入移位器163,以用于控制寄存器组14的读取端口和写入端口的使用。
参考图4,读取移位器161包含多个条目1610(1)到1610(M),其中每一条目可包含读取有效字段1611和地址字段1613,其中M是大于1的整数。条目1610(1)到条目1610(M)中的每一个与未来的一个时钟周期相关联,且记录对应读取端口在所述时钟周期中的可用性。举例来说,条目1610(1)指示读取端口在第一即将来临的时钟周期(即,立即下一时钟周期)中的可用性,且条目1610(M)指示读取端口在未来的第M个时钟周期中的可用性。参考图4,条目1610(1)到条目1610(M)的最底条目将在每一时钟周期被移出,且可添加新条目作为1610(M)。举例来说,最底条目1610(1)将在立即下一时钟周期中移出。在实施例中,读取有效字段(“rd”)1611记录指示对应时钟周期中的读取端口的可用性的读取有效值。举例来说,第X条目中的读取有效字段1611(X)中的非零值指示读取端口在未来的第X个时钟周期处将为忙碌的,其中X大于1且小于M。第X条目中的读取有效字段1611(X)中的零值指示对应读取端口在未来的第X个时钟周期处将自由存取。读取地址字段(“rd_addr”)1613记录待从其中读取数据的寄存器的地址。举例来说,条目1610(1)指示对应读取端口在用于从寄存器7(即,地址“r7”)读取数据的立即下一时钟周期处将为忙碌的。在一些替代实施例中,读取移位器161的每一条目中存在更多或更少的用于记录其它信息的字段。
在发布指令之前,解码/发布单元13针对寄存器组14的读取端口在指令的读取时间处的可用性检查读取/写入控制单元16。举例来说,读取时间为X个时钟周期。读取/写入控制单元16检查读取移位器161的第X条目以确定在未来的第X个时钟周期处读取端口是否空闲。如果在读取时间处可用读取端口的数目大于或等于指令的所需读取端口的数目,那么解码/发布单元13可发布并调度指令以用于在第X个时钟周期(即,所调度读取时间)执行。针对所发布指令的每一有效源寄存器设置读取端口的读取有效字段1611和读取地址1613。如果可用读取端口的数目小于所需读取端口的数目,那么解码/发布单元13可暂停指令且在下一时钟周期中重新检查读取移位器。在所调度的读取时间,读取移位器将读取有效字段1611和寄存器地址1613提供给用于从寄存器组14读取数据的对应功能单元。在实施例中,移位寄存器161可通过旋转读取指标来实施,其中读取指标指示移位寄存器161的底部以在每一时钟周期读取有效字段1611和寄存器地址1613,且读取指标在每一时钟周期递增。
参考图5,写入移位器163(可称为等待时间移位器)包含多个条目1630(1)到1630(P),其中每一条目包含写回有效字段(“wr”)1631、写入地址字段(“wr_addr”)1633以及功能单元字段(“funit”)1635,其中P为大于1的整数。条目1630(1)到条目1630(P)中的每一个与未来的一个时钟周期相关联,且记录对应写入端口在所述时钟周期中的可用性。举例来说,条目1630(1)指示写入端口在第一即将来临的时钟周期(即,立即下一时钟周期)中的可用性,且条目1630(P)指示写入端口在未来的第N个时钟周期中的状态。参考图5,条目1630(1)到条目1630(P)的最底条目将在每一时钟周期移出。举例来说,最底条目1630(1)将立即在下一时钟周期中移出,且可添加新条目作为1630(P)。在实施例中,写回有效字段(“wr”)1631记录写回有效值,所述写回有效值指示写入端口在对应于所述条目的时钟周期处的可用性。举例来说,第Y条目中的写回有效字段1631(Y)中的非零值指示写入端口在未来的第Y个时钟周期将为忙碌的,其中Y大于1且小于P。第Y条目中的读取值字段1631(Y)中的零值指示写入端口在未来的第Y个时钟周期处将自由存取。写入地址字段(“wr_addr”)1633指示寄存器组14中的寄存器的地址,功能单元将结果数据写回到所述寄存器。功能单元字段(“funit”)1635指定将结果数据写回到写入端口的功能单元20或加载/存储单元17。举例来说,写入移位器163的第一条目1630(1)指示写入端口在第一即将来临的时钟周期中将为忙碌的,其中记录在功能字段1635中的alu 0将把结果数据写回到记录在写入地址字段1633中的寄存器22(“r22”)。
在发布指令之前,解码/发布单元13针对寄存器组14的写入端口在指令的写入时间处的可用性检查读取/写入控制单元。举例来说,写入时间为Y个时钟周期。读取/写入控制单元16检查写入移位器163的第Y条目以确定在未来的第Y个时钟周期处写入端口是否空闲。如果在写入时间处可用写入端口的数目大于或等于指令的所需写入端口的数目,那么解码/发布单元13可发布并调度指令以用于在第Y个时钟周期(即,所调度写入时间)处执行完成。针对所发布指令的每一有效目的地寄存器设置写回有效字段1631、功能单元1635以及目的地地址1633。如果可用写入端口的数目小于所需写入端口的数目,那么解码/发布单元13可暂停指令且在下一时钟周期中重新检查写入移位器。在所调度写入时间处,读取/写入端口控制提取来自功能单元20的如记录于功能单元字段1635中的结果数据,且将结果数据写入到如写入地址字段1633中所指定的寄存器。在实施例中,写入移位器163可通过旋转读取指标来实施,其中读取指标指示写入移位器163的底部以在每一时钟周期读取有效位1631、寄存器地址1633以及功能单元1635,且读取指标在每一时钟周期递增。
参考图1,执行队列19配置成保持调度为分派到功能单元20的所发布指令。功能单元20可包含但不限于:整数乘法、整数除法、算术逻辑单元(arithmetic logic unit;ALU)、浮点单元(FPU)、分支执行单元(BEU)、接收已解码指令且执行操作的单元等。在实施例中,执行队列19中的每一个耦合到或专用于功能单元20中的一个。举例来说,执行队列19A耦合在解码/发布单元13与对应功能单元20A之间以将指令排成队列且分派所述指令,所述指令指定对应功能单元20A设计成用于的操作。类似地,执行队列19B耦合在解码/发布单元13与对应功能单元20B之间,且执行队列19C耦合在解码/发布单元13与对应功能单元20C之间。在实施例中,执行队列19D、执行队列19E耦合在解码/发布单元13与加载/发布单元17之间以处置加载/存储指令。执行队列19D、执行队列19E还可分别称为标签执行队列(Tag-Execution Queue;TEQ)19D和数据执行队列(Data-Execution Queue;DEQ)19E。
图6是示出根据一些实施例的执行队列19的图。EQ 19可包含用于以将发送到功能单元20的次序来记录关于从解码/发布单元13发布的指令的信息的多个条目190(0)到190(Q),其中Q为大于0的整数。在实例中,执行队列19的每一条目包含在图6中分别标记为“v”、“ex_ctrl”、“data”以及“rd_cnt”的有效字段191、执行控制数据字段193、数据字段195以及读取计数字段197。在其它实施例中,可存在记录于每一EQ中的更多或更少的字段,且数据字段195可具有其它数据而不是立即数据。
有效字段191指示条目是否有效(例如,有效条目由“1”指示且无效条目由“0”指示)。执行控制数据字段193和数据字段195指示功能单元20的执行控制信息和从指令导出的指令的立即数据。读取计数字段197记录用于指示指令的读取时间的读取计数rd_cnt。存储于读取计数字段197中的读取时间每一时钟周期向下计数一,直到读取计数rd_cnt变为零为止。当读取计数字段197中的读取时间为0时,执行队列19将有效指令分派到功能单元20。
执行队列19可包含或耦合到用于存储累积计数值acc_cnt的累积计数器199,所述累积计数值acc_cnt每一时钟周期向下计数一,直到计数值变为零为止。累积计数零指示EQ19是空的。累积计数器199的累积计数值acc_cnt指示在未来可将解码/发布单元13中的下一指令分派到功能单元20或加载/存储单元17的时间。解码/发布单元13中的下一指令可以根据累积计数器199的累积计数值分派到功能单元20或加载/存储单元17的所调度分派时间发布到执行队列19。在一些实施例中,指令的读取时间为累积计数值,且根据下一指令的当前acc_cnt和指令吞吐时间的总和(acc_cnt=acc_cnt+inst_xput_time)来设置累积计数值。在一些其它实施例中,修改读取时间(其中读取时间大于当前累积计数),且针对下一指令,根据指令的读取时间(rd_cnt)和指令的吞吐时间的总和(acc_cnt=rd_cnt+inst_xput_time)来设置累积计数值acc_cnt。读取移位器161和写入移位器163设计成与执行队列19同步,使得执行队列19可在根据读取移位器161从寄存器组14读取源寄存器的同时将指令分派到功能单元20或加载/存储单元17,且根据写入移位器163将来自功能单元20或加载/存储单元17的结果数据写回到寄存器组14。
参考图1,加载/存储单元17耦合到解码/发布单元13以处置加载指令和存储指令。在实施例中,解码/发布单元13将加载/存储指令发布为包含标签微操作和数据微操作的两个微操作。将标签微操作发送到标签执行队列(TEQ)19D,且将数据微操作发送到数据执行队列(DEQ)19E。在一些实施例中,加载/存储指令的微操作的吞吐时间为1个周期;TEQ 19D和DEQ 19E为独立处理的加载/存储操作;并且TEQ 19D必须在DEQ 19E发布数据操作之前发布标签操作。
数据高速缓存18耦合到存储器30和加载/存储单元17,且配置成存储从存储器30提取且由加载/存储单元17存取以用于加载/存储数据的数据。数据高速缓存18包含来自存储器30的连续数据字节的许多高速缓存线。数据高速缓存18的高速缓存线被组织为类似于指令高速缓存11的直接映射、完全关联映射或组关联映射,但不需要与指令高速缓存11相同的映射。
数据高速缓存18可包含标签阵列(tag array;TA)22和数据阵列(data array;DA)24以用于分别存储由微处理器10使用的频繁使用的数据的地址的一部分和数据。类似于指令高速缓存11,标签阵列22中的每一标签对应于数据阵列24中的高速缓存线。当微处理器10需要执行加载/存储指令时,微处理器10首先通过将加载/存储地址与存储于标签阵列22中的标签进行比较来检查加载/存储数据在数据高速缓存18中的存在。如果加载/存储地址与标签阵列中的标签中的一个匹配(高速缓存命中),那么针对加载/存储数据存取数据阵列24中的对应高速缓存线。在一些实施例中,加载指令从数据阵列24的高速缓存线提取数据以写入到寄存器组14的目的地寄存器,而存储指令将来自寄存器组14的源寄存器的数据写入到数据阵列24中的高速缓存线。如果加载/存储地址不与标签阵列22中的任何条目匹配,那么其是高速缓存未命中,且微处理器10可存取存储器30以找到数据。在高速缓存命中的情况下,加载/存储指令的执行等待时间为已知的(例如,2个、3个、6个或任何数目个时钟周期)。在高速缓存未命中的情况下,加载/存储指令的执行等待时间为15个时钟周期或更多。加载指令的执行等待时间基本上為未知的,其取决于高速缓存命中和存储器30的等待时间。
标签操作包含通过加载/存储单元17中的地址产生单元(address generationunit,AGU)171计算地址,且使用所计算的地址来存取标签阵列22和数据转换后备缓冲器(translation look-aside buffer,TLB)(未示出)以用于虚拟地址到物理地址转换。地址计算为来自寄存器组14的源寄存器和来自图6的数据字段195的立即数据(“立即数据(immdata)”)的加法操作。图4的读取移位器161调度为从寄存器组14读取源寄存器以与从TEQ19D到AGU 171的标签操作的分派匹配。在一些实施例中,虚拟地址和物理地址在不需要数据TLB的情况下是相同的。TEQ 19D将标签操作分派到加载/存储单元17的地址产生单元(AGU)171以计算加载/存储地址。加载/存储地址用于存取数据高速缓存18的标签阵列(TA)22。保持高速缓存命中/未命中和命中路线(组关联映射)以便由DEQ 19E存取,其中数据操作存取DA 24中的命中路线的高速缓存线。对于加载指令,如果与TA 22同时存取DA 24,那么DA 24中的组关联映射的所有路线得以读取。在此实施例中,在TA 22之后的DA 24的串行存取允许读取DA 24的单个路线,因此DA 24可节省相当大的功率且减少数据库冲突。
对于加载指令,当高速缓存命中时,通过写入移位器的写入控制从写回到寄存器组14的目的地寄存器的DA 24中提取数据。对于高速缓存未命中,将记分板15中的目的地寄存器的状态改变为未知的,且从存储器30提取加载数据。来自存储器30的高速缓存未命中加载数据通过保留写入端口写回到寄存器组14的目的地寄存器。在实施方案中,来自存储器30的加载数据写入到数据未命中缓冲器(未示出),那么数据未命中缓冲器将写回到寄存器组14的目的地寄存器且最终将高速缓存线数据写入到数据高速缓存24。
对于存储指令,当高速缓存命中时,存储数据调度为由读取移位器即时从寄存器组14读取以写入到DA 24。对于高速缓存未命中,将存储数据发送到加载/存储单元17中的存储未命中缓冲器(未示出)。在存储指令的常规执行中,可同时从寄存器组14读取用于标签地址的源寄存器和用于存储数据的源寄存器,在此情况下,需要存储缓冲器来保持存储数据直到其写入到DA 24为止。在本发明中,将存储数据写入到DA024的时间(假设高速缓存命中)是已知的,因此,读取端口控制调度为“及时(just-in-time)”从寄存器组14读取用于存储数据的源寄存器以写入到DA 24,因此不需要存储缓冲器。对于高速缓存未命中,并不从寄存器组14读取用于存储数据的源寄存器,直到存储数据准备好写入到数据高速缓存为止,所述数据高速缓存是源寄存器的“及时”读取。
对于高速缓存未命中,加载/存储单元17可允许到存储器30的许多待决高速缓存未命中请求。多个待决未命中请求保持在加载/存储单元17中的未命中请求队列(未示出)中。将新高速缓存线从存储器30提取到数据高速缓存18中的未命中数据缓冲器(未示出)中。未命中数据缓冲器可由多个高速缓存线组成。另外,数据高速缓存18中的替换高速缓存线可能是脏的,其中脏高速缓存线必须在来自存储器30的新高速缓存线可写入到数据高速缓存18中之前写回到存储器30。在逐出到存储器30之前,将脏高速缓存线从数据高速缓存18提取到逐出缓冲器中。逐出缓冲器可实施为未命中数据缓冲器的一部分。必须通过用于数据的匹配和转发的后续加载/存储指令检查逐出缓冲器、未命中请求队列以及未命中数据缓冲器。
加载/存储指令可具有精确异常,其中必须从执行管线舍弃所有后续指令。类似于分支指令,加载/存储指令之后的所有后续指令无法写回到寄存器组14,直到加载/存储指令的执行之后为止。具有高速缓存未命中的加载/存储指令可具有数据错误异常,所述数据错误异常是不精确异常且通过阻止解码/发布单元13发布任何更多指令且在执行管线中的所有指令完成之后而采取。中断类似于不精确异常,其中通过阻止解码/发布单元13发布任何更多指令且在执行管线中的所有指令完成之后而采取中断。
图7A是示出根据一些实施例的执行块100B和执行块100C的图。为简单起见,执行块100B还称为专用于处理向量指令的向量执行块100B;且执行块100C还称为专用于处理FP指令的FP执行块100C。然而,执行块100B和执行块100C中的每一个可配置成处理任何其它类型的指令。执行块100B和执行块100C中的每一个可包含与执行块100A相同的元件。举例来说,执行块100B和执行块100C中的每一个可包含解码/发布单元、记分板、读取/写入控制单元、寄存器组、执行队列以及功能单元。执行块100B和执行块100C还称为第一类型发布单元和第二类型发布单元。
在一些实施例中,不同类型的指令可由执行块100B和执行块100C中的解码/发布单元13b和解码/发布单元13c并行地解码。在指令的并行解码中,解码/发布单元13b和解码/发布单元13c中的每一个可验证执行块100B和执行块100C中的一个中的指令,且指令一次只能在执行块100B和执行块100C中的一个中有效。
在一些实施例中,执行块100B和执行块100C中的解码/发布单元13b和解码/发布单元13c中的每一个在发布指令之前检查并解析不同类型的指令的所有可能的冲突。与执行块100A中相同的机制可用于解析数据相依性并控制执行块100B和执行块100C中的读取/写入端口。本文中以后接字母的特定附图标记指代的元件将由单独附图标记共同指代。举例来说,除非指定,执行队列291A到执行队列291C将统称为执行块100B的执行队列291,且执行队列292A到执行队列292C将统称为执行块100C的执行队列292。因而,下文省略关于解码/发布单元13b和解码/发布单元13c的详细描述。
执行块100B和执行块100C中的寄存器组14b和寄存器组14c、记分板15b和记分板15c、读取/写入控制单元16b和读取/写入控制单元16c、执行队列291和执行队列292以及功能单元201和功能单元202可类似于执行块100A中的寄存器组14、记分板15、读取/写入控制单元16、执行队列19以及功能单元20。执行块100A中的寄存器组14、记分板15、读取/写入控制单元16、执行队列19以及功能单元20用于标量整数指令,而执行块100B中的寄存器组14b、记分板15b、读取/写入控制单元16b、执行队列291以及功能单元201专用于向量指令,且执行块100C中的寄存器组14c、记分板15c、读取/写入控制单元16c、执行队列292以及功能单元202专用于FP指令。可从执行块100A中的对应元件推断执行块100B和执行块100C中的这些元件的结构和功能性,因此下文省略关于执行块100B和执行块100C的详细描述。
在一些实施例中,微处理器10可还包含多路复用(multiplex,MUX)300和共享功能单元20s,其中共享功能单元20s用于执行块100B和执行块100C共享。共享功能单元20s可执行从执行块100B分派的向量指令和从执行块100C分派的FP指令。共享功能单元20s可从多路复用300接收向量指令和FP指令,且执行接收到的指令。在一些实施例中,构造向量执行队列291C和FP执行队列292C,使得执行队列291C或执行队列292C中的仅一个可通过多路复用300一次将有效指令发送到共享功能单元20s。换句话说,多路复用300可一次将向量指令或FP指令中的仅一个提供到共享功能单元20s,且共享功能单元20s一次执行向量指令或FP指令中的仅一个。在一些实施例中,共享功能单元20s经由多路复用300以及读取总线31b和读取总线31c耦合到执行块100B和执行块100C的寄存器组14b和寄存器组14c,且来自共享功能单元20s的结果数据经由结果总线32b和结果总线32c写回到寄存器组14b或寄存器组14c。
在一些实施例中,共享功能单元20s可包含配置成执行向量指令的多个元素的多个执行单元200A到执行单元200D。向量指令在两个方面不同于标量整数指令和FP指令:(1)向量指令对许多元素操作,而标量整数指令或FP指令对单个元素操作,(2)向量指令的许多元素可分组为更小的元素集合,以便作为微操作按顺序执行。举例来说,向量指令可经编程以对32个元素执行,所述元素可在硬件中执行为4个元素的8个微操作;其中每一元素为32位数据。通过图7A中的执行单元200A到执行单元200D进行4个元素的执行。在一些实施例中,共享功能单元20s的一些功能单元用于VEQ 291C和FPEQ 292C两者共享;且共享功能单元20s的一些功能单元专用于执行向量指令的多个元素。在实例中,功能单元200D经共享用于执行向量指令和FP指令两者的元素;且功能单元200A到功能单元200C专用于执行向量指令的一些元素。共享功能单元20s中的共享执行单元的数目在本公开中不受限制。
在实施例中,多路复用300耦合到执行块100B的VEQ 291C和执行块100C的FPEQ292C,且配置成选择来自VEQ 291C的向量指令或来自FPEQ 292C的FP指令并将其分派到共享功能单元20s以供执行。在替代实施例中,执行块100B和执行块100C包含多个VEQ 291和多个FPEQ 292,且多路复用300耦合到多个VEQ 291和多个FPEQ 292以选择来自VEQ 291和FPEQ 292的有效指令且将其提供到共享功能单元20s以供执行。在一些实施例中,VEQ 291C和FPEQ 292C可将指示有效指令(即,向量指令或FP指令)的有效指示提供到多路复用300。多路复用300可基于来自VEQ 291C和FPEQ 292C的有效指示而选择向量指令或FP指令。在一些实施例中,向量指令和FP指令中的仅一个一次是有效的,因此向量指令或FP指令中的仅一个被发送到共享功能单元以供执行。
在一些实施例中,多路复用300经由读取总线31b和读取总线31c耦合到执行块100B和执行块100C的寄存器组14b和寄存器组14c以接收与向量指令和FP指令相关联的操作数数据。与向量指令或FP指令相关联的操作数数据可经由多路复用300发送到共享功能单元20s,如通过从寄存器组读取总线31b和读取总线31c到多路复用300的连接所示出。
在一些实施例中,来自寄存器组14b和寄存器组14c的操作数数据与VEQ 291C和FPEQ 292C同步地通过多路复用300发送到共享功能单元20s。举例来说,VEQ 291C和FPEQ292C可在从寄存器组14b和寄存器组14c读取操作数数据的同时经由多路复用300将指令分派到共享功能单元20。在一些实施例中,读取/写入控制单元16b和读取/写入控制单元16c调度指令的读取时间和写入时间,使得来自寄存器组14b和寄存器组14c的操作数数据与VEQ 291C和FPEQ 292C的操作同步地发送到共享功能单元20s。因为一次允许VEQ 291C和FPEQ 292C中的仅一个将有效指令发送到共享功能单元20s,所以通过VEQ 291C或FPEQ292C对多路复用300的选择是相互排斥的。
在一些实施例中,执行块100B包含用于整数、置换、掩码以及浮点的功能单元,且执行块100C包含仅用于浮点的功能单元。在一些实施例中,浮点功能单元包含FP乘法累积(FP multiply-accumulate;FP MACC)功能单元、FP除法(FP divide;FP DIV)功能单元、FP杂项(FP miscellaneous;FP MISC)功能单元,其中FP MACC配置成执行FP乘法指令、FP加/减指令以及FP乘法累积指令;FP DIV功能单元配置成执行FP除法指令;以及FP MISC功能单元配置成执行如整数FP转换、FP比较、FP最小、FP最大指令的其他指令。在一些实施例中,FPMACC功能单元比其它FP功能单元更关键,因此专用FP MACC功能单元经设计用于执行块100B和执行块100C中的每一个,且其它FP功能单元用于执行块100B和执行块100C两者共享。在实例中,FP MACC功能单元专用于执行执行块100C的FP指令,且向量FP MACC功能单元专用于执行执行块100B的向量FP指令。在一些替代实施例中,执行块100B具有多个向量FPMACC功能单元,其中一个向量FP MACC功能单元与执行块100C共享而另一向量FP MACC功能单元专用于执行块100B。
图7B示出根据一些实施例的执行块100B和执行块100C的图。图7A中所示出的图与图7B中所示出的图之间的差异在于,图7B示出共享执行队列19s和多路复用330而不是多路复用300。共享执行队列19s耦合到执行块100B和执行块100C的解码/发布单元13b和解码/发布单元13c,且配置成接收由解码/发布单元13b分派的向量指令或由解码/发布单元13c分派的FP指令。在一些实施例中,构造解码/发布单元13b和解码/发布单元13c,使得解码/发布单元13b和解码/发布单元13c中的仅一个可将有效指令发送到共享执行队列19s。换句话说,一次将向量指令或FP指令中的仅一个写入到共享执行队列19s中的多个条目当中的一个条目。在另一实施例中,如果来自执行块100B和执行块100C的指令是到共享功能单元20s的,那么解码/发布单元13b和解码/发布单元13c具有停止机制,所述停止机制可基于指令的序列停止解码/发布单元13b和解码/发布单元13c中的一个。在另一实施例中,向量指令和FP指令使用指令次序优先级以允许解码/发布单元13b或解码/发布单元13c一次仅将1个指令分派到共享执行队列19s。然而,在另一实施例中,解码/发布单元13b和解码/发布单元13c可同时将向量指令和FP指令两者分派到共享执行队列19s,且通过共享执行队列19s中的指令次序将所述指令写入到2个条目。来自寄存器组14b和寄存器组14c的寄存器操作数数据分别通过读取/写入控制单元16b和读取/写入控制单元16c与共享执行队列19s同步,以将数据发送到多路复用330以用于由共享功能单元20s执行。换句话说,多路复用330与待由共享执行队列19s发布的向量指令同步地从寄存器组14b选择寄存器操作数数据,或多路复用330与待由共享执行队列19s发布的FP指令同步地从寄存器组14c选择寄存器操作数数据。举例来说,共享执行队列19s可在从寄存器组14b或寄存器组14c读取操作数数据的同时将指令分派到共享功能单元20s。读取/写入控制单元16b和读取/写入控制单元16c可调度指令的读取时间和写入时间,使得来自寄存器组14b和寄存器组14c的操作数数据与共享执行队列19s的操作同步地发送到共享功能单元20s。
共享执行队列19s可包含如图6中所示出的EQ 19的多个字段。本公开的一些实施例可使用比图6中所示出的字段更多、更少或不同的共享执行队列19s的字段。在实施例中,共享执行队列19s具有标签位字段(未示出),所述标签位字段记录共享执行队列19s的每个条目的标签位以指示记录于共享执行队列19s的每一条目中的指令的指令类型(例如,向量或FP)。记录于共享执行队列19s中的标签位可用于从执行块100B或执行块100C的寄存器组14b和寄存器组14c选择操作数数据。举例来说,当共享执行队列19s的条目中的标签位指示所记录指令为向量指令时,从执行块100B的寄存器组14b中选出与向量指令相关联的操作数数据。存储在共享执行队列19s中的向量指令和FP指令可以分派次序分派到共享功能单元20s。可根据记录于功能单元20s的读取计数字段197(即,图6中所示出的执行队列10的读取计数字段197)中的读取计数值来确定共享功能单元20s的分派次序。
图8示出根据一些实施例的VEQ 291的图。VEQ 291可包含多个条目190(0)到190(Q),其中VEQ 291的每一条目配置成记录关于一个向量指令的信息。在一些实施例中,VEQ291的每一条目包含可与图6中所示出的EQ 19的字段相同或不同的多个字段。举例来说,图8中所示出的VEQ 291中的有效字段191、执行控制数据字段193、数据字段195以及读取计数字段197与图6中所示出的EQ 19中的对应字段相同。另外,图8中所示出的累积吞吐量计数器199与图6中所示出的累积吞吐量计数器199相同。省略关于图8中的VEQ 291和图6中的执行队列19的相同元件的详细描述。
VEQ 291可还包含微操作计数字段192和吞吐量计数字段(xput_cnt)194,其中微操作计数字段192表示向量指令中的多个微操作。举例来说,条目190(0)和190(2)中的向量指令具有4个微操作;且条目190(1)中的向量指令具有8个微操作。吞吐量计数字段194配置成表示向量指令中的每一微操作的吞吐时间(例如,多个时钟周期)。
在一些实施例中,VEQ 291包含或耦合到微操作计数器303以用于跟踪所执行的微操作的数目。微操作计数器303可接收第一条目190(0)的微操作计数字段192的值,且针对分派到功能单元201或功能单元20s的每一微操作将所述值递减一。在一些实施例中,在可通过复位有效字段191而使对应条目无效之前,微操作计数器303将微操作计数字段192的值递减到0。在实例中,第一条目190(0)中的向量指令具有吞吐时间为1个时钟周期的4个微操作。因而,微操作计数字段192的值每一时钟周期递减一。具有1个时钟周期的吞吐量等待时间的微操作的吞吐量计数字段194被设置为“0”。吞吐量计数字段194中的吞吐时间总是比实际吞吐时间小1。
在一些实施例中,VEQ 291还包含用于跟踪分派到功能单元201或功能单元20s的微操作的吞吐时间的吞吐量计数器305。吞吐量计数器305可从第一条目190(0)接收对应于第一微操作的吞吐量计数字段194的值,且每一时钟周期将所述值递减一,直到对应于第一微操作的吞吐量计数字段194的值达到0为止。当对应于第一微操作的吞吐量计数字段194的值达到0时,吞吐量计数器305被重新加载有对应于下一微操作的吞吐量计数字段194的值,且如果微操作计数字段192大于1,那么重复向下计数过程。在一些实施例中,VEQ 291的条目的有效字段191保持有效,直到微操作计数器303和吞吐量计数器305的值都达到0为止。
在一些实施例中,执行块100C的FPEQ 292可具有与图6中所示出的执行块100A的执行队列19大体上相同的结构。因此,下文省略关于执行块100C的FPEQ 292的详细描述。
参考图9,根据一些实施例示出用于在微处理器中发布不同类型的指令的过程。图9中所示出的微处理器可包含向量累积吞吐量计数器199b和FP累积吞吐量计数器199c,其中向量累积吞吐量计数器199b用于跟踪VEQ 291、VEQ 291C中的有效条目的累积吞吐量计数,且FP累积吞吐量计数器199c用于跟踪FPEQ 292、FPEQ 292C中的有效条目的累积吞吐量计数。
图9中所示出的微处理器还包含耦合到向量累积吞吐量计数器199b和FP累积吞吐量计数器199c的多路复用MUX 302_1和多路复用MUX 302_2。多路复用MUX 302_1配置成选择向量累积吞吐量计数器199b或FP累积吞吐量计数器199c作为图8的字段197中的读取时间(或读取计数rd_cnt)以将向量指令发布到VEQ 291C。多路复用MUX 302_2配置成选择向量累积吞吐量计数器199b或FP累积吞吐量计数器199c作为图8的字段197中的读取计数rd_cnt以将标量FP指令发布到FPEQ 292C。在一些实施例中,多路复用MUX 302_1和多路复用MUX 302_2基于向量活动位v_active和FP活动位f_active进行选择。举例来说,多路复用MUX 302_1和多路复用MUX 302_2选择向量累积吞吐量计数器199b以用于在设置向量活动位v_active且清除FP活动位f_active时发布指令;且多路复用MUX 302_1和多路复用MUX302_2选择FP累积吞吐量计数器199c以用于在清除向量活动位v_active且设置FP活动位f_active时发布指令。在一些实施例中,待发布的最后一个指令类型设置活动位。举例来说,当待发布的最后一个指令为向量指令时,设置活动位v_active;且当待发布的最后一个指令为FP指令时,设置活动位f_active。在另一实施例中,如果向量指令和FP指令两者同时有效且向量指令具有比FP指令更高的优先级,那么向量指令的读取时间遵循如上文所描述的程序,而FP指令的读取时间为此向量指令的吞吐时间与读取时间的总和。向量指令和FP指令两者可同时分别发布到执行队列291C和执行队列292C。在一些实施例中,向量累积吞吐量计数器199b、多路复用MUX 302_1以及VEQ 291包含于图1中所示出的执行块100B中;且FP累积吞吐量计数器199c,多路复用MUX 302_2以及FPEQ 292C包含于图1中所示出的执行块100C中。
在实施例中,图7B中的共享执行队列19s包含跟踪共享执行队列19s的有效条目的累积吞吐量计数的单个累积吞吐量计数器(未示出)。参考图7B和图9,单个累积吞吐量计数器可表示为图9中所示出的累积吞吐量计数器199b和累积吞吐量计数器199c的组合。在此实施例中,根据记录于共享执行队列19s中的指令的指令次序来更新单个累积吞吐量计数器。举例来说,可根据由共享执行队列19s的指令次序指示的最后一个指令来更新单个累积吞吐量计数器。如上文所提及,如果同时将向量指令和FP指令两者发布到图7B中的共享队列19s,那么根据共享执行队列19s的指令次序将向量指令和FP指令记录于两个条目中。向量指令和FP指令的指令优先级可确定向量指令和FP指令同时发布到共享执行队列19s的指令次序。单个累积吞吐量计数器的值用作共享执行队列19s中的所记录指令的读取时间(或图6的字段197中的读取计数rd_cnt)。
图10示出根据一些实施例的用于基于活动位v_active和活动位f_active将指令发布到共享功能单元的流程图。假设一个有效指令发送到图1中的执行块100B和执行块100C中的解码/发布单元。执行块100B和执行块100C设计成使得执行块100B和执行块100C中的仅一个对如在块501中所提及的有效指令进行解码。在块501中,如果有效指令inst被确定为向量指令v_inst,那么执行块100B用以发布有效指令。块502确定FP活动位f_active是否被设置或清除。如果FP活动位f_active被清除(f_active=0),那么在块503b中,执行块100B的向量累积吞吐量计数器199b用以将向量指令v_inst发布到向量执行队列(即,图8中的VEQ 291),且将对应于所发布指令的读取计数值(即,图8中的字段197中的读取计数rd_cnt)设置为向量累积吞吐量计数器199b的值(v_acc_cnt)。否则,如果FP活动位f_active被设置(f_active=1),那么在块503c中,执行块100C的FP累积吞吐量计数器199c用以将向量指令v_inst发布到向量执行队列(即,图8中的VEQ 291),且将对应于所发布指令的读取计数值(即,图8中的字段197中的读取计数rd_cnt)设置为FP累积吞吐量计数器199c的值(f_acc_cnt)。这里要更进一步指出,只要向量指令v_inst的读取时间等于或大于块502选择的累积时间(即,向量累积吞吐量计数器199b或FP累积吞吐量计数器199c的值),即可将向量指令v_inst发布到向量执行队列(即,图8中的VEQ 291),且将所选择的累积时间设置为向量指令读取时间(即,图8中的字段197中的读取计数rd_cnt的值)和所发布向量指令的吞吐时间的总和。因为向量源寄存器和/或目的地寄存器的读取/写入端口冲突或数据相依性,向量指令的读取时间可能会大于所选择的累积时间。
返回到块501,如果有效指令inst被确定为FP指令f_inst,那么执行块100C用以发布有效指令。块510确定向量活动位v_active是否被设置或清除。如果向量活动位v_active被清除(v_active=0),那么在块511c中,执行块100C的FP累积吞吐量计数器199c用以将FP指令f_inst发布到FP执行队列(即,图8中的FPEQ 291和图6中的EQ 19),且对应于所发布指令的读取计数值(即,图6中的字段197中的读取计数rd_cnt)为FP累积吞吐量计数器199c的值(f_acc_cnt)。否则,如果向量活动位v_active被设置(v_active=1),那么在块511b中,执行块100B的向量累积吞吐量计数器199b用以将FP指令f_inst发布到FP执行队列(即,图8中的FPEQ 291或图6中的EQ 19),且将对应于所发布指令的读取计数值(即,图6中的字段197中的读取计数rd_cnt)设置为向量累积吞吐量计数器199b的值(v_acc_cnt)。这里要更进一步指出,只要FP指令f_inst的读取时间等于或大于块510选择的累积时间(即,向量累积吞吐量计数器199b或FP累积吞吐量计数器199c的值),即可将FP指令f_inst发布到FP执行队列(即,图8中的FPEQ 291),且将所选择的FP累积时间设置为FP指令读取时间(即,图6中的字段197中的读取计数rd_cnt的值)和所发布FP指令的吞吐时间的总和。因为FP源寄存器和/或目的地寄存器的读取/写入端口冲突或数据相依性,FP指令的读取时间可能会大于所选择的累积时间。
根据实施例中的一个,公开一种包含共享功能单元、第一执行队列、第二执行队列、第一类型发布单元以及第二类型发布单元的微处理器。第一执行队列包含多个条目,其中第一执行队列的每一条目记录第一类型指令,第一执行队列的每一条目包含对应于第一类型指令的第一计数值,第一计数值递减直到第一计数值达到0为止。当对应于第一类型指令的第一计数值达到0时,第一执行队列将第一类型指令分派到共享功能单元。第二执行队列包含多个条目,其中第二执行队列的每一条目记录第二类型指令,第二执行队列的每一条目包含对应于第二类型指令的第二计数值,第二计数值递减直到第二计数值达到0为止。当对应于第二类型指令的第二计数值达到0时,第二执行队列将第二类型指令分派到共享功能单元。共享功能单元执行第一类型指令和第二类型指令。寄存器组的数据的读取和写入被预设为针对第一类型指令或第二类型指令在共享功能单元的未来的确切执行时间同步。与现有技术一样,不需要动态冲突解析,不需要动态数据相依性解析以及不需要动态读取/写入端口解析。动态解析是微处理器设计中的最多功率消耗。微处理器配置成将来自第一执行队列的第一类型指令和来自第二执行队列的第二类型指令相互分派到共享功能单元。第一类型发布单元将第一类型指令发布到第一执行队列,调度第一类型指令的读取时间和写入时间,且设置记录于第一执行队列的每一条目中的第一计数值。第二类型发布单元将第二类型指令发布到第二执行队列,调度第二类型指令的读取时间和写入时间,且设置记录于第二执行队列的每一条目中的第二计数值。
根据实施例中的一个,介绍一种适用于第一执行队列、第二执行队列、共享功能单元、第一类型发布单元以及第二类型发布单元的方法。方法包括以下步骤:由第一类型发布单元将第一类型指令发布到第一执行队列;由第一类型发布单元调度第一类型指令的读取时间和写入时间;由第一类型发布单元设置记录于第一执行队列的每一条目中的第一计数值,其中第一计数值递减直到第一计数值达到0为止;响应于确定包含于第一执行队列的条目中的第一计数值达到0,由第一执行队列将记录于第一执行队列的条目中的第一类型指令分派到共享功能单元;由第二类型发布单元将第二类型指令发布到第二执行队列;由第二类型发布单元调度第二类型指令的读取时间和写入时间;由第二类型发布单元设置记录于第二执行队列的每一条目中的第二计数值,其中第二计数值递减直到第二计数值达到0为止;响应于确定包含于第二执行队列的条目中的第二计数值达到0,由第二执行队列将记录于第二执行队列的条目中的第二类型指令分派到共享功能单元;以及由共享功能单元执行第一类型指令和第二类型指令。来自第一执行队列的第一类型指令和来自第二执行队列的第二类型指令相互分派到共享功能单元。
根据实施例中的一个,提供一种包含存储器和微处理器的数据处理系统。存储器配置成存储第一类型指令和第二类型指令。微处理器包含共享功能单元、第一执行队列、第二执行队列、第一类型发布单元以及第二类型发布单元。第一执行队列包含多个条目,其中第一执行队列的每一条目记录第一类型指令,第一执行队列的每一条目包含对应于第一类型指令的第一计数值,第一计数值递减直到第一计数值达到0为止。当对应于第一类型指令的第一计数值达到0时,第一执行队列将第一类型指令分派到共享功能单元。第二执行队列包含多个条目,其中第二执行队列的每一条目记录第二类型指令,第二执行队列的每一条目包含对应于第二类型指令的第二计数值,第二计数值递减直到第二计数值达到0为止。当对应于第二类型指令的第二计数值达到0时,第二执行队列将第二类型指令分派到共享功能单元。共享功能单元执行第一类型指令和第二类型指令,其中来自第一执行队列的第一类型指令和来自第二执行队列的第二类型指令相互分派到共享功能单元。第一类型发布单元将第一类型指令发布到第一执行队列,调度第一类型指令的读取时间和写入时间,且设置记录于第一执行队列的每一条目中的第一计数值。第二类型发布单元将第二类型指令发布到第二执行队列,调度第二类型指令的读取时间和写入时间,且设置记录于第二执行队列的每一条目中的第二计数值。
前文已概述了若干实施例的特征以使得本领域的技术人员可更好地理解以下详细描述。本领域的技术人员应了解,其可容易地将本公开用作设计或修改用于进行本文中所引入的实施例的相同目的和/或实现相同优势的其它工艺和结构的基础。本领域的技术人员还应认识到,这种等效构造并不脱离本公开的精神和范围,且其可在不脱离本公开的精神和范围的情况下在本文中进行各种改变、替代以及更改。

Claims (20)

1.一种微处理器,包括:
第一执行队列,包括多个条目,其中所述第一执行队列的每一条目记录第一类型指令,所述第一执行队列的每一条目包括对应于所述第一类型指令的第一计数值,所述第一计数值递减直到所述第一计数值达到0为止,且当对应于所述第一类型指令的所述第一计数值达到0时,所述第一执行队列将所述第一类型指令分派到共享功能单元;
第二执行队列,包括多个条目,其中所述第二执行队列的每一条目记录第二类型指令,所述第二执行队列的每一条目包括对应于所述第二类型指令的第二计数值,所述第二计数值递减直到所述第二计数值达到0为止,且当对应于所述第二类型指令的所述第二计数值达到0时,所述第二执行队列将所述第二类型指令分派到所述共享功能单元;
共享功能单元,执行第一类型指令和第二类型指令,其中来自所述第一执行队列的所述第一类型指令和来自所述第二执行队列的所述第二类型指令相互排斥地分派到所述共享功能单元;
第一类型发布单元,将所述第一类型指令发布到所述第一执行队列,调度所述第一类型指令的读取时间和写入时间,且设置记录于所述第一执行队列的每一条目中的所述第一计数值;以及
第二类型发布单元,将所述第二类型指令发布到所述第二执行队列,调度所述第二类型指令的读取时间和写入时间,且设置记录于所述第二执行队列的每一条目中的所述第二计数值。
2.根据权利要求1所述的微处理器,其中
所述第一执行队列的每一条目中的所述第一计数值表示所述第一类型指令的所述读取时间,
所述第一执行队列的每一条目中的所述第一计数值每一时钟周期递减一,直到所述第一计数值达到0为止,以及
当对应于所述第一类型指令的所述第一计数值达到0时,将记录于所述第一执行队列中的所述第一类型指令分派到所述共享功能单元。
3.根据权利要求1所述的微处理器,其中
所述第一类型发布单元包括第一类型解码/发布单元、第一类型寄存器组、第一类型记分板、用于所述第一类型寄存器组的第一类型读取/写入控制单元以及所述第一执行队列,以及
所述第二类型发布单元包括第二类型解码/发布单元、第二类型寄存器组、第二类型记分板、用于所述第二类型寄存器组的第二类型读取/写入控制单元以及所述第二执行队列。
4.根据权利要求3所述的微处理器,其中
所述第一类型发布单元与所述共享功能单元中所述第一类型指令的执行同步地调度所述第一类型指令的所述读取时间以从所述第一类型寄存器组读取所述第一类型指令的操作数数据,且调度所述第一类型指令的所述写入时间以将结果数据从所述共享功能单元写入到所述第一类型寄存器,
所述第二类型发布单元与所述共享功能单元中所述第二类型指令的执行同步地调度所述第二类型指令的所述读取时间以从所述第二类型寄存器组读取所述第二类型指令的操作数数据,且调度所述第二类型指令的所述写入时间以将结果数据从所述共享功能单元写入到所述第二类型寄存器,
所述第一类型发布单元解析所述第一类型指令的数据相依性和资源冲突以设置记录于所述第一执行队列的每一条目中的所述第一计数值,以及
所述第二类型发布单元解析所述第二类型指令的数据相依性和资源冲突以设置记录于所述第二执行队列的每一条目中的所述第二计数值。
5.根据权利要求3所述的微处理器,还包括:
第一多路复用,耦合到所述第一执行队列、所述第二执行队列以及所述共享功能单元,配置成将来自所述第一执行队列的所述第一类型指令或来自所述第二执行队列的所述第二类型指令相互排斥地分派到所述共享功能单元,其中
所述第一多路复用分别通过第一读取总线和第二读取总线进一步耦合到所述第一类型寄存器组和所述第二类型寄存器组,且所述第一多路复用将来自所述第一类型寄存器组的操作数数据或来自所述第二类型寄存器组的操作数数据相互排斥地分派到所述共享功能单元。
6.根据权利要求5所述的微处理器,其中
所述第一执行队列还包括每一时钟周期递减一的第一累积吞吐量计数器,所述第一累积吞吐量计数器表示所述第一类型发布单元在哪个时钟周期内允许将下一第一类型指令发布到所述第一执行队列,以及
所述第二执行队列还包括每一时钟周期递减一的第二累积吞吐量计数器,所述第二累积吞吐量计数器表示所述第二类型发布单元在哪个时钟周期内允许将下一第二类型指令发布到所述第二执行队列。
7.根据权利要求6所述的微处理器,其中
所述第一类型发布单元,基于所述第一执行队列的第一活动位和所述第二执行队列的第二活动位,使用所述第一累积吞吐量计数器或所述第二累积吞吐量计数器将所述第一类型指令发布到所述第一执行队列作为所发布的第一类型指令的读取时间;以及
所述第二类型发布单元,基于所述第一执行队列的所述第一活动位和所述第二执行队列的所述第二活动位,使用所述第一累积吞吐量计数器或所述第二累积吞吐量计数器将所述第二类型指令发布到所述第二执行队列作为所发布的第二类型指令的读取时间,其中
当所述第一类型发布单元发布所述第一类型指令时,设置所述第一活动位,
当所述第二类型发布单元发布所述第二类型指令时,清除所述第一活动位,
当所述第一累积吞吐量计数器为零时,清除所述第一活动位,
当所述第二类型发布单元发布所述第二类型指令时,设置所述第二活动位,
当所述第一类型发布单元发布所述第一类型指令时,清除所述第二活动位,以及
当所述第二累积吞吐量计数器为零时,清除所述第二活动位。
8.根据权利要求3所述的微处理器,还包括:
共享执行队列,用于所述第一类型发布单元和所述第二类型发布单元共享,接收所述第一类型指令和所述第二类型指令,且将所述第一类型指令和所述第二类型指令记录到所述共享执行队列的条目中,且依次分派记录于所述共享执行队列的条目中的所述第一类型指令和所述第二类型指令;以及
第二多路复用,分别通过第一读取总线和第二读取总线耦合到所述第一类型寄存器组和所述第二类型寄存器组,通过第一读取总线接收所述第一类型指令的操作数数据或通过第二读取总线接收所述第二类型指令的操作数数据,且将所述第一类型指令的所述操作数数据和所述第二类型指令的所述操作数数据相互排斥地分派到所述共享功能单元,
其中所述第二多路复用与所述共享执行队列对所述第一类型指令和所述第二类型指令的分派同步地分派所述第一类型指令的所述操作数数据和所述第二类型指令的所述操作数数据。
9.根据权利要求8所述的微处理器,其中
所述共享执行队列包含跟踪所述共享执行队列的有效条目的累积吞吐量计数的累积吞吐量计数器,
根据将从所述第一类型发布单元或所述第二类型发布单元发布到所述共享执行队列的最后一个指令来更新所述累积吞吐量计数器,以及
所述累积吞吐量计数器每一时钟周期递减一,所述累积吞吐量计数器表示所述发布单元在哪个时钟周期内允许将下一指令发布到所述共享执行队列。
10.根据权利要求1所述的微处理器,还包括:
未共享功能单元,具有与所述共享功能单元相同的功能性,其中所述未共享功能单元专用于执行所述第一类型指令或所述第二类型指令。
11.根据权利要求1所述的微处理器,其中所述共享功能单元包括:
第一执行单元,经共享用于执行所述第一类型指令和所述第二类型指令;以及
第二执行单元,专用于执行所述第一类型指令或所述第二类型指令。
12.一种适用于微处理器的方法,所述微处理器包括第一执行队列、第二执行队列、共享功能单元、第一类型发布单元以及第二类型发布单元,所述方法包括:
由所述第一类型发布单元将第一类型指令发布到所述第一执行队列;
由所述第一类型发布单元调度所述第一类型指令的读取时间和写入时间;
由所述第一类型发布单元设置记录于所述第一执行队列的每一条目中的第一计数值,其中所述第一计数值递减直到所述第一计数值达到0为止;
响应于确定包含于所述第一执行队列的所述条目中的所述第一计数值达到0,由所述第一执行队列将记录于所述第一执行队列的条目中的所述第一类型指令分派到所述共享功能单元;
由所述第二类型发布单元将第二类型指令发布到所述第二执行队列;
由所述第二类型发布单元调度所述第二类型指令的读取时间和写入时间;
由所述第二类型发布单元设置记录于所述第二执行队列的每一条目中的第二计数值,其中所述第二计数值递减直到所述第二计数值达到0为止;
响应于确定包含于所述第二执行队列的所述条目中的第二计数值达到0,由所述第二执行队列将记录于所述第二执行队列的条目中的所述第二类型指令分派到所述共享功能单元;以及
由所述共享功能单元执行所述第一类型指令和所述第二类型指令,其中来自所述第一执行队列的所述第一类型指令和来自所述第二执行队列的所述第二类型指令相互排斥地分派到所述共享功能单元。
13.根据权利要求12所述的方法,其中
所述第一执行队列中的每一个中的所述第一计数值表示所述第一类型指令的所述读取时间,
所述第一执行队列的每一条目中的所述第一计数值每一时钟周期递减一,直到所述第一计数值达到0为止,以及
当对应于所述第一类型指令的所述第一计数值达到0时,将记录于所述第一执行队列中的所述第一类型指令分派到所述共享功能单元。
14.根据权利要求12所述的方法,其中
所述第一类型发布单元包括第一类型解码/发布单元、第一类型寄存器组、第一类型记分板、用于所述第一类型寄存器组的第一类型读取/写入控制单元以及所述第一执行队列,以及
所述第二类型发布单元包括第二类型解码/发布单元、第二类型寄存器组、第二类型记分板、用于所述第二类型寄存器组的第二类型读取/写入控制单元以及所述第二执行队列。
15.根据权利要求14所述的方法,其中
所述第一类型发布单元与所述共享功能单元中所述第一类型指令的执行同步地调度所述第一类型指令的所述读取时间以从所述第一类型寄存器组读取所述第一类型指令的操作数数据,且调度所述第一类型指令的所述写入时间以将结果数据从所述共享功能单元写入到所述第一类型寄存器,
所述第二类型发布单元与所述共享功能单元中所述第二类型指令的执行同步地调度所述第二类型指令的所述读取时间以从所述第二类型寄存器组读取所述第二类型指令的操作数数据,且调度所述第二类型指令的所述写入时间以将结果数据从所述共享功能单元写入到所述第二类型寄存器,
所述第一类型发布单元解析所述第一类型指令的数据相依性和资源冲突以设置记录于所述第一执行队列的每一条目中的所述第一计数值,以及
所述第二类型发布单元解析所述第二类型指令的数据相依性和资源冲突以设置记录于所述第二执行队列的每一条目中的所述第二计数值。
16.根据权利要求14所述的方法,其中
所述第一执行队列还包括每一时钟周期递减一的第一累积吞吐量计数器,所述第一累积吞吐量计数器表示所述第一类型发布单元在哪个时钟周期内允许将下一第一类型指令发布到所述第一执行队列,以及
所述第二执行队列还包括每一时钟周期递减一的第二累积吞吐量计数器,所述第二累积吞吐量计数器表示所述第二类型发布单元在哪个时钟周期内允许将下一第二类型指令发布到所述第二执行队列,
所述第一类型发布单元基于所述第一类型执行队列的第一活动位和第二类型执行队列的第二活动位,使用所述第一累积吞吐量计数器或所述第二累积吞吐量计数器将所述第一类型指令发布到所述第一类型执行队列作为所发布的第一类型指令的读取时间;以及
所述第二类型发布单元基于所述第一类型执行队列的所述第一活动位和所述第二类型执行队列的所述第二活动位,使用所述第一累积吞吐量计数器或所述第二累积吞吐量计数器将所述第二类型指令发布到所述第二类型执行队列作为所发布的第二类型指令的读取时间,其中
当所述第一类型发布单元发布所述第一类型指令时,设置所述第一活动位,
当所述第二类型发布单元发布所述第二类型指令时,清除所述第一活动位,
当所述第一累积吞吐量计数器为零时,清除所述第一活动位,
当所述第二类型发布单元发布所述第二类型指令时,设置所述第二活动位,
当所述第一类型发布单元发布所述第一类型指令时,清除所述第二活动位,以及
当所述第二累积吞吐量计数器为零时,清除所述第二活动位。
17.根据权利要求14所述的方法,其中所述微处理器还包括:
第一多路复用,耦合到所述第一执行队列、所述第二执行队列以及所述共享功能单元,配置成将来自所述第一执行队列的所述第一类型指令或来自所述第二执行队列的所述第二类型指令相互排斥地分派到所述共享功能单元,其中
所述第一多路复用分别通过第一读取总线和第二读取总线进一步耦合到所述第一类型寄存器组和所述第二类型寄存器组,且所述第一多路复用将来自所述第一类型寄存器组的操作数数据或来自所述第二类型寄存器组的操作数数据相互排斥地分派到所述共享功能单元。
18.根据权利要求14所述的方法,其中所述微处理器还包括:
共享执行队列,用于所述第一类型发布单元和所述第二类型发布单元共享,接收所述第一类型指令和所述第二类型指令,且将所述第一类型指令和所述第二类型指令记录到所述共享执行队列的条目中,且依次分派记录于所述共享执行队列的条目中的所述第一类型指令和所述第二类型指令;以及
第二多路复用,分别通过第一读取总线和第二读取总线耦合到所述第一类型寄存器组和所述第二类型寄存器组,通过第一读取总线接收所述第一类型指令的操作数数据或通过第二读取总线接收所述第二类型指令的操作数数据,且将所述第一类型指令的所述操作数数据和所述第二类型指令的所述操作数数据相互排斥地分派到所述共享功能单元,
其中所述第二多路复用与所述共享执行队列对所述第一类型指令和所述第二类型指令的分派同步地分派所述第一类型指令的所述操作数数据和所述第二类型指令的所述操作数数据。
19.根据权利要求18所述的方法,其中
所述共享执行队列包含跟踪所述共享执行队列的有效条目的累积吞吐量计数的累积吞吐量计数器,以及
根据将从所述第一类型发布单元或所述第二类型发布单元发布到所述共享执行队列的最后一个指令来更新所述累积吞吐量计数器,以及
所述累积吞吐量计数器每一时钟周期递减一,所述累积吞吐量计数器表示所述发布单元在哪个时钟周期内允许将下一指令发布到所述共享执行队列。
20.一种数据处理系统,包括:
存储器,配置成存储第一类型指令和第二类型指令;以及
微处理器,包括:
第一执行队列,包括多个条目,其中所述第一执行队列的每一条目记录第一类型指令,所述第一执行队列的每一条目包括对应于所述第一类型指令的第一计数值,所述第一计数值递减直到所述第一计数值达到0为止,且当对应于所述第一类型指令的所述第一计数值达到0时,所述第一执行队列将所述第一类型指令分派到共享功能单元;
第二执行队列,包括多个条目,其中所述第二执行队列的每一条目记录第二类型指令,所述第二执行队列的每一条目包括对应于所述第二类型指令的第二计数值,所述第二计数值递减直到所述第二计数值达到0为止,且当对应于所述第二类型指令的所述第二计数值达到0时,所述第二执行队列将所述第二类型指令分派到所述共享功能单元;
共享功能单元,执行第一类型指令和第二类型指令,其中来自所述第一执行队列的所述第一类型指令和来自所述第二执行队列的所述第二类型指令相互排斥地分派到所述共享功能单元;
第一类型发布单元,将所述第一类型指令发布到所述第一执行队列,调度所述第一类型指令的读取时间和写入时间,且设置记录于所述第一执行队列的每一条目中的所述第一计数值;以及
第二类型发布单元,将所述第二类型指令发布到所述第二执行队列,且调度所述第二类型指令的读取时间和写入时间,且设置记录于所述第二执行队列的每一条目中的所述第二计数值。
CN202111395887.5A 2021-06-01 2021-11-23 微处理器、适用于微处理器的方法以及数据处理系统 Pending CN115437694A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US17/335,089 2021-06-01
US17/335,089 US11467841B1 (en) 2021-06-01 2021-06-01 Microprocessor with shared functional unit for executing multi-type instructions

Publications (1)

Publication Number Publication Date
CN115437694A true CN115437694A (zh) 2022-12-06

Family

ID=83547302

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111395887.5A Pending CN115437694A (zh) 2021-06-01 2021-11-23 微处理器、适用于微处理器的方法以及数据处理系统

Country Status (4)

Country Link
US (1) US11467841B1 (zh)
JP (1) JP7348969B2 (zh)
CN (1) CN115437694A (zh)
TW (1) TWI796755B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11210098B2 (en) * 2013-07-15 2021-12-28 Texas Instruments Incorporated Variable latency instructions

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6148395A (en) * 1996-05-17 2000-11-14 Texas Instruments Incorporated Shared floating-point unit in a single chip multiprocessor
US5996064A (en) * 1997-12-30 1999-11-30 Intel Corporation Method and apparatus for guaranteeing minimum variable schedule distance by using post-ready latency
US6725354B1 (en) * 2000-06-15 2004-04-20 International Business Machines Corporation Shared execution unit in a dual core processor
US6826704B1 (en) 2001-03-08 2004-11-30 Advanced Micro Devices, Inc. Microprocessor employing a performance throttling mechanism for power management
GB2447907B (en) * 2007-03-26 2009-02-18 Imagination Tech Ltd Processing long-latency instructions in a pipelined processor
US9104399B2 (en) * 2009-12-23 2015-08-11 International Business Machines Corporation Dual issuing of complex instruction set instructions
US11163582B1 (en) 2020-04-20 2021-11-02 Andes Technology Corporation Microprocessor with pipeline control for executing of instruction at a preset future time

Also Published As

Publication number Publication date
TW202248846A (zh) 2022-12-16
TWI796755B (zh) 2023-03-21
US11467841B1 (en) 2022-10-11
JP2022184701A (ja) 2022-12-13
JP7348969B2 (ja) 2023-09-21

Similar Documents

Publication Publication Date Title
US6141747A (en) System for store to load forwarding of individual bytes from separate store buffer entries to form a single load word
US8335911B2 (en) Dynamic allocation of resources in a threaded, heterogeneous processor
US10528355B2 (en) Handling move instructions via register renaming or writing to a different physical register using control flags
US5751983A (en) Out-of-order processor with a memory subsystem which handles speculatively dispatched load operations
US5860017A (en) Processor and method for speculatively executing instructions from multiple instruction streams indicated by a branch instruction
JP3977016B2 (ja) 仮想レジスタ番号を用いて論理レジスタ番号を物理レジスタ番号にマッピングするように構成されるプロセッサ
US7516305B2 (en) System and method for retiring approximately simultaneously a group of instructions in a superscalar microprocessor
US20080126771A1 (en) Branch Target Extension for an Instruction Cache
US8006075B2 (en) Dynamically allocated store queue for a multithreaded processor
US7093106B2 (en) Register rename array with individual thread bits set upon allocation and cleared upon instruction completion
US5778210A (en) Method and apparatus for recovering the state of a speculatively scheduled operation in a processor which cannot be executed at the speculated time
US7849293B2 (en) Method and structure for low latency load-tagged pointer instruction for computer microarchitechture
US20220382546A1 (en) Apparatus and method for implementing vector mask in vector processing unit
JP2839075B2 (ja) 処理システムを動作させる方法及び処理システム
US6772317B2 (en) Method and apparatus for optimizing load memory accesses
US20140068230A1 (en) Micro-architecture for eliminating mov operations
EP1121635B1 (en) Mechanism for load block on store address generation and universal dependency vector
US6393546B1 (en) Physical rename register for efficiently storing floating point, integer, condition code, and multimedia values
US6230262B1 (en) Processor configured to selectively free physical registers upon retirement of instructions
US11467841B1 (en) Microprocessor with shared functional unit for executing multi-type instructions
US5805916A (en) Method and apparatus for dynamic allocation of registers for intermediate floating-point results
US11687347B2 (en) Microprocessor and method for speculatively issuing load/store instruction with non-deterministic access time using scoreboard
US6490653B1 (en) Method and system for optimally issuing dependent instructions based on speculative L2 cache hit in a data processing system
CN117742796A (zh) 指令唤醒方法、装置以及设备
Omondi et al. Data Flow: Detecting and Resolving Data Hazards

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination