CN1632877A - 可变延滞时间堆栈快取存储器及提供资料的方法 - Google Patents

可变延滞时间堆栈快取存储器及提供资料的方法 Download PDF

Info

Publication number
CN1632877A
CN1632877A CN200510003692.6A CN200510003692A CN1632877A CN 1632877 A CN1632877 A CN 1632877A CN 200510003692 A CN200510003692 A CN 200510003692A CN 1632877 A CN1632877 A CN 1632877A
Authority
CN
China
Prior art keywords
memory cache
data
instruction
signal
address
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.)
Granted
Application number
CN200510003692.6A
Other languages
English (en)
Other versions
CN1632877B (zh
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.)
Zhiquan No1 Co
IP First LLC
Original Assignee
Zhiquan No1 Co
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 Zhiquan No1 Co filed Critical Zhiquan No1 Co
Publication of CN1632877A publication Critical patent/CN1632877A/zh
Application granted granted Critical
Publication of CN1632877B publication Critical patent/CN1632877B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30134Register stacks; shift registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0875Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1027Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
    • G06F12/1045Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB] associated with a data cache
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • 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, look ahead
    • G06F9/3824Operand accessing
    • G06F9/383Operand prefetching
    • 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, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative 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)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本发明揭露一种可变延滞时间堆栈快取存储器及提供资料的方法。其包含复数个储存元件,并以后进先出的操作模式,储存堆栈存储器资料。此快取存储器能区分取出和下载指令的要求,并以臆测取出资料可能存在于快取存储器的最上层快取列的操作方式;此外,此快取存储器亦将对下载指令所请求的堆栈数据进行臆测,并认为其数据将存在于快取存储器的最上层快取列或其上层的多个快取列中。因此,当下载指令的来源虚拟地址命中于快取存储器的最上层快取列时,则快取存储器提供下载资料的速度将较资料位于较低的快取列时来得快;或与一实体地址比较时来得快;或较数据必须从微处理器的非堆栈快取存储器中提供时的速度来得快。

Description

可变延滞时间堆栈快取存储器及提供资料的方法
优先权说明
本案主张美国主张优先权,其优先权基于一篇名为具可变延滞时间堆栈快取存储器的微处理器(Microprocessor with Variable LatencyStack Cache),其申请案号为10/759483及申请日期为2004年1月16日。
相关申请书文献
本申请书与下列待审的美国专利申请书为相关,且与其具有相同的申请日、代理人和发明人。
    申请案号  Title
    10/759559  Microprocessor and apparatus for performing fastspeculative pop operation from a stack memory
    10/759564  Microprocessor and apparatus for performingspeculative load operation from a stack memory
    10/759489  Microprocessor and apparatus for performing fastpop operation from random access cache memory
技术领域
本发明有关一种微处理器中的快取存储器,特别是一种关于能区分堆栈和非堆栈存储器存取的快取存储器。
背景技术
微处理器(microprocessor)是一种能执行计算机程序所指定的指令的数字元件。传统的计算机系统包含与系统存储器(system memory)连结的微处理器,其中系统存储器用以储存程序指令和利用此程序指令数据处理相关资料。像这样的计算机系统其性能受限于从系统存储器读取资料到微处理器,或从微处理器写入资料到系统存储器所需花费的时间,通常比处理器执行处理资料的指令所需的时间来得长,其中,两者的时间差异通常介于10的一次方到10的二次方。因此,在等候资料读取或写入的过程,微处理器将闲置一段时间。
然而于过去,处理器的设计者认为,程序通常倾向要花相当长的时间存取相当少的资料,例如一些常被存取的程序变量。具有此特性的程序被认为其存在不错的临时区域性,而此特性的特点通常被称为取用区域性原理。利用此原理的优点,现代化的微处理器通常包含有一个或多个快取存储器(cache memory)。快取存储器或高速缓冲储存器(cache)为一相当小的存储器且其电性连接于靠近微处理器的核心,用以暂存通常储存于较其体积大且离微处理器较远的计算机系统的存储器中的资料子集,例如计算机的系统存储器。利用快取存储器快取资料的原理先储存资料于一快取存储器的储存元件中,故之后,从快取存储器将可比从离计算机系统较远的存储器中,更快速地提供资料给微处理器。
当微处理器执行一存储器读取指令,例如执一下载指令或一取出(pop)指令时,微处理器会快速的检查,看需求的数据是否存在于目前的快取存储器中,亦即检查存储器读取地址是否命中(hit)于快取存储器。若不是,亦即存储器读取地址非命中于快取存储器,则微处理器除了下载此数据至微处理器指定的寄存器(register)外,并将此资料放置于快取存储器中。于是,目前此资料已储存快取存储器中,下次碰到一存储器读取指令需要读取此相同的资料时,资料便可直接从此快取存储器中,快速地取出至微处理器的寄存器中进行处理,其将比从系统存储器中取出来要快。实质上,当资料已存在于目前的快取存储器时,存储器读取指令将可以立即地被执行。
快取存储器储存数据于快取列(cache lines)或快取区块(cacheblocks)中。快取列为快取数据,其可于快取存储器和系统存储器间传递的最小单元,例如快取列可以是大小为64字节(bytes)。当存储器读取指令发生快取未中命(cache miss)的情形时,整个与未命中地址(missing address)有关连的快取列将被提取至快取存储器中,而非仅提取存储器读取指令所需的资料。随后,另一存储器读取指令所需的资料若在此相同的快取列时,则此存储器读取指令可很快地被执行完成;因为,其数据可从快取存储器直接存取,而不需由系统存储器存取。
此外,当执行存储器写入指令,如执行储存指令或推入指令时,若存储器写入地址恰命中于快取存储器内,则数据将可立即地写入快取存储器的快取列中,藉此让欲写入系统存储器的数据先被放置在快取列中,即允许数据延迟写入系统存储器中。之后,快取列存储器将此快取列写入系统存储器中,以产生空间给新的快取列。此种操作方式通常被视为是一回写操作。此外,当存储器写入地址未命中于快取存储器时,有些快取存储器亦将配置(allocate)一登入口(entry)于快取存储器上;亦即,快取存储器将在其一登入口执行一旧快取列的回写操作,并将与系统存储器写入地址有关的新快取列,加载的前旧的快取列所占据的快取存储器登入口中。此操作一般被视为一写入配置操作。
从上述知,具高执行效率的快取存储器将可大幅改善微处理器的执行效能。影响快取存储器效率的两个主要因素分别为,快取存储器的命中率和快取存储器的存取时间。快取存储器的命中率指快取命中次数与未中次数的总和中,命中次数所占的比例;而存取时间则指从快取存储器读出或写入指定资料所需花费的微处理器核心时脉周期数(the number of processor core clock cycles)。影响快取命中率(cache hitrate)最主要的原因快取存储器的容量大小,亦即指能储存于快取存储器中的数据字节数。快取存储器的容量越大,能储存的系统存储器的资料子集(subset)数也越多,因此,与指令地址具有关联性的快取列,将更有可能存在于快取存储器中,根据此理由,快取存储器有需增加其容量大小的必要性。过去,由于微处理器所能释出供予快取存储器建置于中的物理空间有限,因此快取存储器的大小亦受到限制。然而,随着电子元件的几何大小逐渐地微小化,此项限制也跟着日渐严格。
此外,快取存储器的大小亦影响到传统的快取存储器的存取时间。不幸的是,愈大的快取存储器其存取时间将比体积较小的快取存储器来得慢。这是因为传统快取存储器为随机存取存储器,亦即当快取存储器容量变大的同时,亦需要花较多的时间去存取在快取存储器中的每一快取列。资料在快取存储器中所可能存放的位置总数愈多,就愈需要复杂的电路及电路元件用以存放这些由存储器地址所指定的资料。所幸,随着电子元件的几何体积逐渐缩小化,相对地减少了快取存储器的存取时间,并且补偿了快取存储器因体积变大所带来的负面影响。
然而一直以来,微处理器的时脉频率(clock frequency)一向不断地被要求提高,换言之,微处理器的时脉周期时间必须减少,亦即暗示着存取快取存储器的周期总次数将变得更多。其结果造成在微处理器里,倾向采用体积较小的快取存储器,特别是Level-1(L1)型的快取存储器,例如Pentium4所采用的快取存储器,已从Pentium3中具有16KB的L1型快取存储器,减为只有8KB的L1型快取存储器。尽管快取存储器的容量的缩小会带来其相对应的问题,然而会采取此做法,并不是因为受限于微处理器所能容纳的空间不够,迫使快取存储器的体积必须缩小;而是因为微处理器的核心时脉周期时间日益趋短,以致强迫快取存储器的大小必须减小。
鉴于上述,为了进一步强化微处里器与快取存储器的使用效率,亟待必需增加大体积的快取存储器,或减少快取存储器的存取时间,亦或两者同时进行。
发明内容
本发明提出一可变延滞时间快取存储器(variable latency cachememory),其包含复数个以后进先出(last-in-first-out,LIFO)的方式储存堆栈存储数据(stack memory data)的储存元件(storage elements)。另一方面,此快取存储器能区分,取出指令和下载指令相对应的所需数据。快取存储器臆测取出数据将位于顶层快取列,并于第一时脉周期数中,从顶层快取列提供取出资料;而于第二时脉周期数中,从快取存储器的任一快取列提供下载数据,其中,第一时脉周期数将少于第二时脉周期数。换言之,取出资料将比下载资料更快被提供,因为取出资料在执行一地址比较之前,即被提供,其中,此地址比较用以侦测此取出资料是否实际存在于此顶层快取列中。反之,下载数据则是在地址比较执行完成后才被提出。
另一方面,快取存储器亦包含了大致与堆栈快取存储器平线动作的非堆栈快取存储器。非堆栈快取存储器设置做为一随机存取快取存储器,而非一后进先出(LIFO)存储器。从堆栈存储器下载和从非堆栈存储器下载不同,一般而言,从堆栈存储器中提供下载资料将比从非堆栈存储器中来的快。
在另一方面,本发明认为有些下载指令为了堆栈数据,而这些堆栈数据则是接近(或靠近)顶层的快取存储器,例如,配置在堆栈里的局部变量。结果,若下载地址的虚拟地址命中于快取存储器顶层时,此下载动作将对堆栈资料直接进行要求。因此,堆栈快取存储器将于执行一实体地址比较前,先行臆测性地提供下载资料,其中,实体地址比较用以判断要求的资料存在与否。因此,若虚拟地址命中于快取存储器的顶层快取列时,下载资料即可在第一时脉周期数中即被臆测性地提供;但若必须于执行一虚拟-实体地址转换和一实体地址比较后,方以提供下载资料时,则下载资料将于具较多周期数的第二时脉周期数中才被臆测性地提供。
附图说明
图1根据本发明,说明微处理器管线架构的一方块图;
图2为说明图1中堆栈快取存储器的方块图;
图3为图1堆栈快取存储器中的其它额外元件的方块图;
图4为说明图1中的L1资料快取存储器的多工器逻辑的方块图;
图5为说明图1中堆栈快取存储器的一快速取出操作的流程图;
图6为说明图1中堆栈快取存储器的一推入操作的流程图;
图7为说明当遇到一堆栈指示器指令时图1的微处理器的操作流程图;
图8为说明图1中由堆栈快取存储器的下载操作的流程图;
图9为说明图1中L1资料快取存储器的一储存操作的流程图;
图10为图1中的堆栈存储器中,于图5中的快速取出操作时序的时序图;
图11为图8中的堆栈快取存储器操作的臆测下载的时序图;
图12为图8中的堆栈快取存储器操作的正常(非臆测性地)下载时序的时序图;
图13为图8中的非堆栈快取存储器操作的下载时序的时序图;
图14为本发明的微处理器管线架构的一方块图;
图15为图14中的L1资料快取存储器的方块图;
图16为图15中的资料快取存储器的一快速取出操作的流程图;
图17为图15中的资料快取存储器的一推入操作的流程图;
图18为说明当加入一堆栈指示指令时图14的微处理器的操作流程图;以及
图19为本发明用以说明图15中的资料快取存储器于图16里的一快速取出操作时序的时序图。
图中符号说明:
100 微处理器                  102 指令快取存储器
104 指令提取器                106 指令翻译器
108 指令排程器                112 寄存器档案
114 执行单元                  116 回写平台
118 总线介面单元              122 非堆栈快取存储器
124 堆栈快取存储器            126 L1数据快取存储器
128 微码存储器                132 处理器总线
152 堆栈指示寄存器            202 MESI
204 地址标签                  206 资料快取列
302 控制逻辑                  304 算术单元
306 地址产生器                308 TLB
312 比较器                      314 比较器
316 多工器                      318 多工器
322 fp_offset                   324 回写缓冲器
326 多工器                      402 多工器
404 多工器                      406 多工器
408 多工器                      412 多工器
502~524 流程步骤方块           602~628 流程步骤方块
702~708 流程步骤方块           802~848 流程步骤方块
902~928 流程步骤方块           1400 微处理器
1402 L1数据快取存储器           1502 控制逻辑
1504 储存元阵列                 1506 列解译器
1508 检验逻辑                   1512 多工器
1514 堆栈最上层                 1516 堆栈fp_row 1516
1524 线选取产生器               1526 多工器
1528 多工器                     1532 堆栈最上层
1534 fp_row堆栈1534             1602~1624 流程步骤方块
1702~1732 流程步骤方块         1802~1808 流程步骤方块
具体实施方式
一般而言,程序通常将系统存储器分离为两部分:一堆栈区和一非堆栈区,本发明即基于此事实而提出。非堆栈区通常亦被称为堆置(heap)区。堆栈(stack)和堆置(heap)主要的差异在于堆置是以随机存取的方式被存取;而堆栈一般则以后进先出(LIFO)的操作方式。两者之间另外的不同点为,对其进行(或执行)读取或写入指令的指示读取或写入地址的方式。一般而言,对堆置从事读取或写入的指令,通常会明确指定存储器地址。反之,对堆栈执行读取或写入的指令,则通常间接通过微处理器中的一特别寄存器以指示其存储器地址,其中此特别寄存器一般指堆栈指示寄存器。推入指令根据将被推入堆栈区的资料大小,以更新堆栈指示寄存器,然后将资料由微处理器的一寄存器储存到记录于更新后的堆栈指示寄存器的存储器地址。例如在x86的计算机内部结构中,推入指令(如PUSH、CALL(呼叫)或ENTER(输入)等指令)通过将被推入的资料大小,缩减堆栈指示寄存器(例如,若资料为双字语(dword)即减少4字节(byes)),然后储存资料到堆栈区中,更新后的堆栈指示寄存器所指示的记忆地址中。相反地,取出指令(popinstruction)在储存于堆栈指示寄存器的地址,读取资料,并下载资料至一微处理器的寄存器,然后根据从堆栈区取出(popped off)的资料大小更新堆栈指示寄存器。例如在x86的计算机内部结构中,取出指令(如POP、RET或LEAVE等指令)通过被取出的资料大小以增加堆栈指示寄存器。因此传统上,根据堆栈区的LIFO特性,当资料推入堆栈区时,堆栈区将逐渐往上成长(亦即逐渐减少存储器地址);相同地,当数据于堆栈区取出时,堆栈区将逐渐往下限缩,(亦即逐渐增加存储器地址)。结果最后,储存于堆栈寄存器的值即被视为堆栈区的顶层。
堆栈区为一用以方便配置存储器空间的机制。在一般的程序执行过程中,堆栈区的一主要用途伴随着呼叫例程(calling routine)的返回地址(return address),堆入子程序参数(subroutine parameters)至堆栈区上。此被呼叫的子程序可再通过从堆栈区取出(pop off)此返回地址至微处理器的程序计数器(program counter),以回复此呼叫例程;然后,此呼叫例程从堆栈区中取出此子程序参数,以恢复堆栈区至其呼叫前的状态(pre-call condition)。
在此所描述的快速取出操作(fast pop operations),基于在推入和取出指令中通常存在一对一(one-to-one)的一致性的此事实而设定。也就是说,当执行一取出指令时,从堆栈区所取出的数据通常为先前一推入指令推入至此堆栈区的数据。
在本发明的揭露中,取出指令为将资料从存储器搬移至微处理器的指令,例如,将资料搬移至微处理器的寄存器档案(register file)的寄存器;且在此指令中,资料的存储器地址以间接而非以明确(explicitly)的方式指明。特别是取出资料的存储器地址通常根据一储存于微处理器的堆栈指示寄存器中的相关值而得到。举例来说,在x86的计算机的微处理器中,取出指令包含有POP、RET、LEAVE等指令,该等指令的来源操作数(source operand)相对于堆栈指示寄存器的值而言,并非明确地被指定,然而,其目的操作数(destination operand)则明确指明微处理器的寄存器档案的一寄存器。
本发明揭露中的下载指令属于一非取出指令,用以将资料从存储器搬移至微处理器,例如,将资料搬移至微处理器的寄存器档案的寄存器。同时,下载指令明确地指定来源资料的存储器地址,或者至少明确地指定一指定来源资料的存储器位置的寄存器或一组寄存器。举例来说,在x86的计算机的微处理器中的MOV指令为一下载指令,此MOV指令的来源操作数明确地指定存储器地址;而其目的操作数则指定微处理器的寄存器档案的寄存器。
本发明揭露中的推入指令(push instruction)为将资料从微处理器搬移至存储器的指令,例如,将资料从微处理器的寄存器档案的一寄存器搬移出;且在此指令中,资料的存储器地址以间接(implicitly)而非以明确(explicitly)的方式指明。特别是推入资料的存储器地址,通常根据一储存于微处理器的堆栈指示寄存器中的相关值而得到。举例来说,在x86的计算机的微处理器中,推入指令包含有PUSH、CALL和ENTER等指令,该等指令的目的操作数相对于堆栈指示寄存器中的值而言并非明确被指定,而其来源操作数则明确地指明微处理器的寄存器档案的寄存器。
本揭露中的储存指令属于一非推入指令,用以将资料从微处理器搬移至存储器,例如,将资料从微处理器的寄存器档案的一寄存器搬移至存储器。同时,此储存指令明确地指定目的资料的存储器地址,或至少明确地指定用以指明目的资料的存储器位置的一寄存器或一组寄存器。例如,在x86计算机的微处理器中的一储存指令,MOV指令,其来源操作数明确地指定微处理器的寄存器档案的一寄存器;而其目的操作数则指明了存储器地址。
参考图1,为根据本发明的管线架构化微处理器100的方块图。在一实施例中,微处理器100包含一指令集(instruction set)大致与x86计算机的指令集相符合的微处理器。此指令集包含x86中的指令:POP、PUSH、CALL、RET、ENTER和LEAVE等。此外,此指令集更包含一用以从存储器中下载资料及将资料存入存储器的指令,例如一x86 MOV指令。然而,本发明并非仅限于x86计算机微处理器或x86的指令集。
微处理器100亦包含一寄存器档案(register file)112。寄存器档案112包含复数个用以储存微处理器100的操作数和状态信息的寄存器。在一实施例中,寄存器档案112包含:一般目的的寄存器(generalpurpose registers)、程序段地址寄存器(address segment registers)、索引寄存器(index registers)、状态和控制寄存器(status and controlregisters)、指令指示寄存器(instruction pointer register)和程序计数寄存器(program counter register)。在一实施例中,寄存器档案112包含至少一x86微处理器中的使用者可见(user-visible)的寄存器集(registerset)。此外,寄存器档案112包含一堆栈指示寄存器(stack pointerregister)152用以储存系统存储器中堆栈资料的顶层地址。在一实施例中,堆栈指示寄存器152大致上与x86中的ESP寄存器相似。
微处理器100亦包含一指令快取存储器(instruction cache)102,用以快速存取指令字节(instruction bytes)的快取列(cache lines)。在一实施例中,指令快取存储器102包含一level-1(L1)快取存储器(L1 cache)。指令快取存储器102存取从与微处理器100相连接的系统存储器(system memory)中读取出的指令,例如推入或取出指令。推入和取出指令则根据堆栈指示寄存器152中顶层(或称最上层)的堆栈地址(stackaddress),间接存取系统存储器中的一堆栈数据。
微处理器100亦包含一总线介面单元(bus interface unit)118,其连接于指令快取存储器102。总线介面单元118并连接一处理器总线(processor bus)132,其中处理器总线用以将微处理器100与系统存储器做连接。总线介面单元118将微处理器中100不同的功能单元(function units)与微处理器总线132连结。举例来说,总线介面单元118可从系统存储器中取出指令至指令快取存储器102。此外,总线介面单元118亦可在系统存储器中读出或写入数据,例如,在系统存储器中其最上层被堆栈指示寄存器152所指定的堆栈资料。
如图1所示,微处理器100亦包含一与指令快取存储器102连结的指令提取器(instruction fetcher)104。指令提取器104将从指令快取存储器102中取出指令。指令提取器104将持续取出下一个由寄存器档案112的指令指示寄存器所指定的指令;除非遇到一程控改变事件(program control change event),例如一分支指令(branch instruction),则此时指令提取器104开始在分支指令的目标地址(target address)上抓取相关指令;或除非是在遇到一异常(exception)情况下,则指令提取器104将因应此一特殊异常其况,开始抓取异常处理例程(exceptionhandler routine)的相关指令。
微处理器100亦包含一与指令提取器104连结的微码存储器(microcode memory)128。微码存储器128用以储存将被指令提取器104抓取的指令。此外,微码存储器128内包含有异常处理例程指令,用以处理微处理器100所发生的各种不同的异常情况。在一实施例中,微处理器100将根据与取出或下载资料有关的防范不正确臆测(incorrect speculative)的侦测结果,产生一异常处理动作以更正微处理器100中与堆栈资料存取有关的状态。
微处理器100亦包含了一与指令提取器104连结的指令翻译器(instruction translator)106。指令翻译器106从指令提取器104中接收指令,例如,接收一推入或取出指令,并进行指令译码,以及将指令翻译成微指令(microinstructions)用以供图1所示元件以外的微处理器100的其它配置单元执行。在一实施例中,微处理器100的其它配置单元包含用以执行微指令的精简指令集计算机核心(reducedinstruction-set computer core,RISC core)。另一实施例中,指令翻译器106将根据每一指令产生一指引(indicator),用以显示是否微指令中的指令已被翻译,上述被称为是微指令者推入、取出、下载或储存等指令。
微处理器100亦包含一与指令翻译器106相连结的指令排程器(instruction scheduler)108。指令排程器108接收来自指令翻译器106中已被翻译的微指令并指派微指令134至一用以执行此微指令的执行单元(execution unit)114。
执行单元114从指令排程器108和操作数142接收微指令134,例如接收一推入指令资料或从寄存器档案112中接收堆栈指示寄存器152的值,并执行此微指令134。在一实施例中,执行单元114包含一整数单元(integer unit)、一浮点运算单元(floating point unit)、一矩阵数学延伸单元(matrix math extensions unit,MMX unit)、一SSE单元、一分支单元(branch unit)、一下载单元(load unit)和一储存单元(storeunit)。下载单元执行由系统存储器下载数据至微处理器100的指令,如一取出指令;而储存单元则执行从微处理器100储存数据至系统存储器的指令,如一推入指令。
微处理器100亦包含一与执行单元114连结的回写平台(write-backstage)116。回写平台116接收被执行单元114执行后的指令的结果并写入此结果,例如将取出指令资料回写至寄存器档案112。
微处理器100亦包含一资料快取存储器126,其中资料快取存储器126通过总线136与总线介面单元118连结,并经由总线138与执行单元114连结。在一实施例中,数据快取存储器126为一L1数据快取存储器。数据快取存储器126包含一堆栈快取存储器124和一非堆栈快取存储器122。总线介面单元118从系统存储器抓取数据到数据快取存储器126,并将数据从数据快取存储器126写入系统存储器中。特别的是,总线介面单元118亦从堆栈快取存储器124和非堆栈快取存储器122中,回写快取列(cache lines)至系统系统存储器;并且从系统存储器中读取快取列,用以将其写入一堆栈快取存储器124和非堆栈快取存储器122的一配置入口(allocated entry)。此外,总线介面单元118将于系统存储器和堆栈快取存储器124之间,传递推入指令和取出指令所指定的数据。
在一实施例中,非堆栈快取存储器122本质上包含了一传统的L1资料快取存储器。也就是说,由于系统存储器地址为随机混乱排列,故非堆栈快取存储器122中包含一L1资料快取存储器将可促使存取时间(access times)一致。在一实施例中,非堆栈存储器122包含一4个分路集(4-way set)结合快取存储器(associative cache)。此储存单元能区分推入和非推入指令的资料以决定是要将资料储存到堆栈存储器124或到非堆栈存储器122。例如,此储存单元将储存推入指令的资料至堆栈存储器124而不是储存至非堆栈存储器122。储存单元储存推入指令的资料(如储存指令资料)至堆栈存储器124而不是非堆栈存储器122。在此方面而言,非堆栈存储器122不同于传统的快取存储器。关于堆栈存储器124,其将配合图2于其后内容中做详细说明。
在一实施例中,微处理器100亦包含了一level-2(L2)快取存储器用以支持L1指令快取存储器102和L1数据快取存储器126。此外,L2快取存储器亦可作为一收容快取存储器(victim cache),用以接收从L1数据快取存储器126(包含非堆栈快取存储器122和堆栈快取存储器124)被送出的快取列;另一方面,L1数据快取存储器126则可从L2快取存储器填充快取列。
参考图2,用以说明根据本发明图1的堆栈快取存储器124的方块图。堆栈快取存储器124包含复数个储存元件(storage elements)所构成的一堆栈或后进先出(LIFO)存储器。因堆栈存储器124为一堆栈或LIFO存储器,故其不致与系统存储器中的堆栈混淆,其中,系统存储器中的堆栈的顶层被堆栈指示寄存器152内的相关值所指定。此外,堆栈存储器124用以快取系统存储器的堆栈的资料。
图2的实施例中,包含16个储存元件(storage elements)或入口(entries),并以0到15标记的。最上层的入口标记为入口0,而最底层的入口则标记为入口15。然而,在本发明中所提出的堆栈存储器124中的入口总数量并不限制在堆栈快取存储器124中入口的数量。每一入口包含一储存空间分别提供资料快取列(cache line)206、快取列206的地址标签(address tag)204和快取列206的快取状态(cache status)202容置于中。在一实施例中,快取状态202包含的状态大致与熟知的MESI(Modified,Exclusive,Shared,Invalid)的快取同调状态值(cachecoherency state values)一致。在一实施例中,快取列206包含大小为64字节的数据。在一实施例中,标签204包含此快取列206的实体地址(physical address)。
在一实施例中,标签204包含快取列206实体地址的最上层明显的位,用以指明快取列206。在一实施例中,微处理器100包含一存储器分页系统(memory paging system)用以将虚拟存储器地址(virtualmemory address)转换为物理存储器地址,且其标签204亦包含了快取列206的虚拟地址。在一实施例中,虚拟地址包含一虚拟地址位的散列(hash),用以减少用来储存虚拟位置所需的空间总量。利用标签204的虚拟地址部份来执行从堆栈快取存储器124的臆测下载(speculativeload)动作将于底下详细说明。
如图2所示,堆栈快取存储器124通过讯号sc_write_MESI 212接收新的快取状态,并存入最上层入口的MESI区域202中;并通过讯号sc_write_tag 214接收新的标签,并将其存入最上层入口的标签区域204中;且通过讯号sc_write_data 216接收新的快取列,并将其存入最上层入口的资料域206中。快取列124亦从图3中的控制逻辑(control logic)302接收一讯号push_sc 232。当控制逻辑302在讯号push_sc 232中产生一真值(true value)时,堆栈快取存储器124将被向下推移一个入口,亦即,最底层入口将被推移出堆栈快取存储器124,且其余每一个入口将立即接收其本身上方入口的值;而讯号sc_write_MESI 212、sc_write_tag 214和sc_write_data 216的值将被写入堆栈存储器124的最上层入口。在一实施例中,每一个堆栈存储器124的快取列206的双字语(dword)可以经由sc_write_data 216个别被写入。在一实施例中,一双字语(dword or double-word)包含4字节(4bytes)。在其它实施例中,堆栈存储器124的快取列206的每一字语(即2字节)或每一字节的方式将透过讯号sc_write_data 216个别被写入。
堆栈快取存储器124提供其16个入口的每一个的MESI状态202至一讯号sc_MESI[15:0]222中;且提供其16个入口的每一标签204至一讯号sc_tag[15:0]224;以及提供其16个入口的每一快取列206至一讯号sc_MESI[15:0]226。讯号sc_data[0]供最上层入口的快取列206,而讯号sc_data[1]供最上层的次一层入口的快取列206,依此类推,最后sc_data[15]供最底层入口的快取列206。同理,标签204和MESI状态202亦以此相同方式实行的。堆栈快取存储器124亦接收一来自图3的控制逻辑302的一讯号pop_sc 234。当控制逻辑302确立讯号pop_sc 234为真值后,堆栈存储器124于是将被向上推移一个入口,亦即,最上层的入口将被推移出堆栈存储器124,同时其余每一个入口立即接收位于本身下方入口的值。在一实施例中,当一入口被从堆栈快取存储器124中取出,亦即当讯号pop_sc 234为真时,堆栈快取存储器124的最底层入口的MESI状态202将更新为无效值(Invalid value)。接着,堆栈存储器124的所有入口的MESI状态202将开始被更新为无效值。
参考图3,显示根据本发明图1中堆栈快取存储器124的其它额外元件的方块图,其中,堆栈快取存储器124包含一控制逻辑302。
控制逻辑302接收一来自图1的执行单元114的储存单元的讯号push_instr 342。若讯号push_instr 342其表示为真值,储存单元正依据来自图1的指令排程器108的一推入指令,要求储存一资料至图1的资料快取存储器126中。
控制逻辑302亦接收一来自执行单元114的下载单元的讯号pop_instr 344。若讯号pop_instr 344为真值,下载单元正依据来自图1的指令排程108的一取出指令,要求从资料快取存储器126中下载一资料。
控制逻辑302亦接收一来自执行单元114的下载单元的讯号load_instr 346。当讯号load_instr 346为真值时,下载单元正依据来自图1的指令排程器108的一下载指令,要求从资料快取存储器126中下载一资料。
控制逻辑302亦接收一来自执行单元114的储存单元的讯号store_instr 348。当讯号store_instr 348为真值时,储存单元正依据来自一图1的指令排程器108的储存指令,要求将资料储存至资料快取存储器126中。
控制逻辑302亦接收一来自执行单元114的整数单元的讯号add_sp_instr 352。当讯号add_sp_instr 352为真值时,整数单元正告知数据快取存储器126其接收到来自指令排程器108的一堆栈指示寄存器加法指令,例如一x86 ADD指令。在一实施例中,加法微指令(addmacroinstruction)增加一立即值(immediate value)至堆栈指示寄存器152,例如一ADD ESP,imm指令。
堆栈存储器124亦包含一地址产生器(address generator)306。地址产生器306从图1的寄存器档案112接收操作数,例如基础值(basevalues)、偏差值(offsets)和存储器描述值(memory descriptor values),并根据该等接收到的值产生一虚拟地址(virtual address)334。虚拟地址334对系统存储器进行存取动作指令的虚拟存储器地址,例如推入、取出、下载或储存指令的虚拟存储器地址。以下载指令而言,虚拟地址334为下载资料的虚拟来源地址(virtual source address)。以储存指令而言,虚拟地址334为储存数据的虚拟目的地址(virtual destinationaddress)。以取出指令而言,虚拟地址334为取出资料的虚拟来源地址。以推入指令而言,虚拟地址334为推入数据的虚拟目的地址。在一实施例中,地址产生器306被包含于每个下载和储存单元内。
堆栈快取存储器124亦包含与地址产生器306连结的变换后备缓冲区(translation look-aside buffer;TLB)308。TLB 308将用以将虚拟地址的一快取分页表数据(page table information)转换为一实体地址336。在一实施例中,只有实体地址336的较上层部份被TLB 308转换,而实体地址336的较下层部份则恰为虚拟地址334的较下层部份。在一实施例中,一最小的分页大小为4位,因此,实体地址336较下方的12个地址位则没有被转换。
堆栈快取存储器124亦包含两个与地址产生器306连结的比较器(comparators)312。每个比较器312皆接收虚拟地址334。此外,该等比较器的其中一比较器312接收图2的讯号sc_tag[0]224的虚拟地址部份,而另一比较器312则接收讯号sc_tag[1]224的虚拟地址部份。换言之,此两个比较器312分别接收图2的前两个最上层入口的标签204的虚拟地址部份;同时,此两比较器312并个别针对其上的讯号sc_tag 224与虚拟地址334做一比较。若虚拟sc_tag[0]224与虚拟地址334相符,则第一个比较器312在一讯号VA_match[0]产生一真值,并传送至控制逻辑302。同理,若虚拟讯号sc_tag[1]224与虚拟地址334相符,则第二个比较器312在讯号VA_match[1]产生一真值,并传送至控制逻辑302。此外,控制逻辑302亦从图2的堆栈快取存储器124接收讯号sc_MESI[15:0]222。控制逻辑302利用讯号VA_match[1:0]362和讯号sc_MESI[1:0]222以判断虚拟地址334是否命中于堆栈快取存储器124的最上层前两个入口其中之一,并藉此从堆栈快取存储器124执行一臆测下载(speculative load)动作,其详细情形如下所述。控制逻辑302利用讯号VA_match[1:0]362和讯号sc_MESI[1:0]222以判断虚拟地址334是否与两个讯号sc_tag[1:0]224中的其一讯号的虚拟地址部份的值相符合。在一实施例中虚拟标签tag204为一虚拟地址位的散列(hash),即虚拟地址334在提供给比较器312做比较前,为散列(hash)排列(或散列讯号)。
要注意的是,虽然在图3的实施例中,通过检查(check)堆栈快取存储器124的最上层前两个入口,用以判断是否执行一臆测下载,在其它实施例亦考量以检查超过两个入口的方式,亦或只检验一个入口。在检查的过程中当其所能检查的资料量愈多,则其执行一快速下载能力的可能性也就愈大。其结果,快取列的大小愈大,所需被检查的入口数量将愈少。在本发明图3的实施例中其检查128位。
堆栈快取存储器124亦包含与TLB 308连结的16个比较器314。每一个比较器接收一实体地址336,且亦分别接收个别的讯号sc_tag[15:0]224。也就是说,比较器314通过讯号sc_tag 224接收标签204实体地址的部分,并将其与实体地址336比较。比较结果若sc_tag[0]224的实体地址与实体地址336相符,则第一个比较器314将在讯号PA_match[0]364产生一真值,其中讯号PA_match[0]364提供至控制逻辑302;若sc_tag[1]224的实体地址与实体地址336相符,则第二个比较器314在讯号PA_match[1]364产生一真值,并提供至控制逻辑302;依此类推此16个比较器314皆以此方式进行。控制逻辑302利用讯号PA_match[15:0]364和讯号sc_MESI[15:0]222侦测实体地址336是否命中堆栈存储器124中的任何入口,并藉此从堆栈快取存储器124中执行下载动作,以及侦测臆测取出或臆测下载所提供的资料是否正确。由上述知,控制逻辑302通过讯号PA_match[15:0]364和讯号sc_MESI[15:0]222以侦测实体地址336是否与讯号sc_tag[15:0]224的一实体地址部份的正确值相符。
控制逻辑302亦产生一提供至执行单元114的下载和储存单元的讯号sc_hit 389,以显示与取出、推入、下载和储存指令相关联的快取列至少隐含存在于堆栈快取存储器124中。以取出指令而言,在确认取出来源地址前,若讯号pop_instr 344为真值,则控制逻辑302将进行臆测动作,在讯号sc_hit 389产生一真值,如下图5所示。以推入指令而言,若讯号sc_MESI[15:0]222和讯号PA_match[15:0]364显示实体地址336符合堆栈存储器124中的一正确的实体地址标签时,或若堆栈存储器124中配置一与实体地址336相关联的快取列时,控制逻辑302在讯号sc_hit 389将臆测性地产生一真值,如之后于图6中所示。以一下载指令而言,若讯号sc_MESI[1:0]222和讯号VA_match[1:0]362显示虚拟地址334与堆栈存储器124的最上层入口的一正确虚拟地址标签相符合时,则控制逻辑302将明确地于讯号sc_hit 389产生一真值;或若讯号sc_MESI[15:0]222和讯号PA_match[15:0]364显示实体地址336与堆栈快取存储器124中的一正确实体地址标签相符时,则控制逻辑302将明确地在讯号sc_hit 389产生一真值,如之后图8中所示。以储存指令而言,若讯号sc_MESI[15:0]222和PA_match[15:0]364显示实体位置336与堆栈存储器124中的一正确实体地址标签相符时,则控制逻辑302将在讯号sc_hit 389产生一真值,如之后图9中所示。
控制逻辑302亦从图1的非堆栈快取存储器122接收一讯号non_sc_hit 366。当实体地址336命中于非堆栈快取存储器122时,讯号sc_hit 366为真值。此外,控制逻辑302亦产生如图2中所示的讯号push_sc 232和讯号pop_sc 234,其操作方式将在下面内容描述。堆栈快取存储器124亦包含与控制逻辑302连结的fp_offset寄存器322,用以储存一称为fp_offset的讯号值。fp_offset寄存器322由讯号fp_offset 396输出其值,并提供至控制逻辑302。fp_offset 322的值用以从堆栈存储器124中执行一快速取出操作,关于此操作将于本文之后内容详细描述的。由下列所述其余的图标,特别是图5至图7的流程图可知,fp_offset 322用以指定储存于最近的推入指令所指定资料的堆栈存储器124最上层入口的快取列的位置(location)。也就是说fp_offset 322用以指定一还未从主存储器的堆栈中取出的推入指令的数据地址。在一实施例中,fp_offset 322包含一四位(4-bit)值用以指定储存于堆栈快取存储器124的最上层入口的快取列206中16个双字语的其一字语的偏移(offset)值。控制逻辑302将监控取出、推入和加法堆栈指示指令(an add to stack pointer),以预测堆栈指示寄存器152的变化情形,以及使fp_offset 322的值保持与堆栈指示器152的位[5:2]值一致。在一实施例中,当执行单元114中的下载、储存或整数单元显示一取出、推入或加法堆栈指示指令已分别发布执行时,控制逻辑302即对fp_offset 322进行更新(update)。在一实施例中,控制逻辑302不等待回写平台116重新更新堆栈指针寄存器152,即对fp_offset 322进行更新。如此一来,一推入指令之后的取出指令、加法堆栈指示指令或其它取出指令将可直接利用对于堆栈指示寄存器152的预测值,以获得堆栈指针器152的位[5:2]值,而不必花时间等待回写平台116更新堆栈指针寄存器152。
堆栈快取存储器124亦包含一与fp_offset寄存器322连结并具有16个输入端的多工器(multiplexer)318。在一实施例中,多工器318包含16个输入端,每个输入端用以个别接收16个双字语其中之一个讯号sc_data[0]226。当执行一快速取出操作时,多工器318接收讯号fp_offset 396做为一选择用输入(select input),藉以选取16个双字语中的一个讯号sc_data[0],并输出于讯号fp_data 398以供取出指令,详细情形将于后述。
堆栈快取存储器124亦包含一与控制逻辑302连结的算术单元(arithmetic unit)304,其中算术单元304并接收讯号fp_offset 396。
算术单元304亦接收一来自控制逻辑302的递减讯号(decrementsignal)384。若控制逻辑302在递减讯号384产生一真值,算术单元304将递减来自于讯号fp_offset 396的值并在在一输出讯号372提供此递减值。当递减操作产生一算术下溢(underflow),算术单元304将在下溢讯号388产生一真值并传送至控制逻辑302。
算术单元304亦从控制逻辑302接收一递增讯号(incrementsignal)386。当控制逻辑302在递增讯号386产生一真值时,算术单元304将递增来自讯号fp_offset 396的值并提供此递增值至输出讯号372。若递增操作导致一算术溢流(overflow),此时算术单元304在溢流讯号392产生一真值并传送至控制逻辑302。
算术单元304亦接收一来自控制逻辑302的加法讯号(addsignal)382。若控制逻辑302在加法讯号382产生一真值,则算术单元304即将来自讯号fp_offset 396的值加入来自讯号add_sp_val 394的值,并将结果传送至输出讯号372。若加法操作导致溢流(overflow),算术单元304则在讯号392产生一真值。在一实施例中,讯号add_sp_val394由图1的执行单元114的整数单元所提供。讯号add_sp_val 394所提供的值被一指令所指定,该指令用以对堆栈指示寄存器152加入一数值。
堆栈快取存储器124包含一与fp_offset寄存器322连结的双输入多工器(two-input multiplexer)316。多工器316的输出连结于fp_offset寄存器322的输入端。多工器316的其中一输入端接收算术单元304的输出讯号372;而另一端则接收堆栈指示寄存器152输出的位[5:2]。多工器316从控制逻辑302接收一控制讯号368做为一选择用输入,以选取其输入值的一,并输出至fp_offset寄存器322。
堆栈快取存储器124亦包含一与控制逻辑302连结并具有16个输入口的多工器326。通过来自具有16个个别讯号的sc_data[15:0]226,多工器326的16个输入口的每一个输入口,分别接收堆栈存储器124的16个快取列的其中之一。多工器326从十六个讯号sc_data[15:0]226中选取一被讯号write_mux_sel 328所指定的讯号做为输出,其中讯号write_mux_sel 328由控制逻辑302所产生。多工器326的输出作为回写列缓冲器(writeback line buffer)324的输入,而回写列缓冲器324的输出则通过总线136传送到图1的总线介面单元118。控制逻辑302亦产生一讯号writeback_request 338,用以提供至总线介面单元118。回写列缓冲器324和讯号writeback_request 338,用以从堆栈快取存储器124回写一快取列至系统存储器,详细情形将于后述。
控制逻辑302亦在讯号allocate_fill_buffer 397中产生一真值以配置一填充缓冲区(fill buffer),用以抓取一快取列至系统存储器或从微处理器100的另一快取存储器抓取一快取列至微处理器,例如堆栈快取存储器124或一L2快取存储器。
控制逻辑302亦通过在一异常讯号(exception signal)399产生一真值,用以显示异常状况已发生并使得微处理器100分支(branch)至一微码存储器128中的一异常处理器(exception handler)。
控制逻辑302亦产生一讯号spec_sc_load_mux_sel 391、一讯号normal_sc_load_mux_sel 393和一讯号L1_mux_sel 395,上述所有讯号将于之后的内容并参照图4做详细描述。
参考图4,根据本发明用以说明图1中L1资料快取存储器126的多工器逻辑(muxing logic)的方块图。数据快取存储器126包含一具有四输入口的多工器402,多工器402的输出传送至图1中的总线138。此外,多工器402通过输出至总线138提供取出资料和下载资料至图1中执行单元114的下载单元。
多工器402的第一输入口接收一来自图1的非堆栈快取存储器122的输出数据432,用以从非堆栈快取存储器122提供数据给一下载指令。多工器402的第二输入口接收具有16个输入的多工器404的输出424,用以从堆栈快取存储器124提供数据给一臆测下载(speculativeload)。多工器402的第三输入口接收第二个具有16个输入的多工器406的输出426,用以提供从堆栈快取存储器124提供数据给一的正常(normal)或非臆测(non-speculative)的下载操作。多工器402的第四个输入接收图3的讯号fp_data 398,以提供快速取出操作所需的资料。
多工器404可以从一具有两输入的多工器412的输出,接收快取列422的16个双字语(dwords)。多工器404根据一选择用输入,选取快取列422中16个双字语的其中之一,其中,此选择用输入图3实体地址336的位[5:2]。
多工器406也可以从一具有16个输入的多工器408的输出,接收快取列428的16个双字语。多工器406根据一选择用输入,选取快取列428中16个双字语其中之一,其中,此选择用输入实体地址336的位[5:2]。
多工器412的两个输入经由讯号sc_data[1:0]226,接收堆栈快取存储器124的最上层两个入口的快取列。多工器412根据图3的讯号spec_sc_load_mux_sel 391,选取两快取列讯号sc_data[1:0]226的其中之一做为输出讯号422,其中讯号spec_sc_load_mux_sel 391由控制逻辑302根据讯号load_instr 346、讯号VA_match[1:0]362、和讯号sc_MESI[1:0]222的值而产生。
多工器408经由讯号sc_data[15:0]226在其16个输入口上,个别地接收堆栈快取存储器124的16个入口的快取列。多工器408根据图3的讯号normal_sc_load_mux_sel 393择取16个快取列讯号sc_data[15:0]226的其中之一做为输出讯号428,其中,讯号sc_data[15:0]226由控制逻辑302根据讯号load_instr 346、讯号PA_match[15:0]364、和讯号sc_MESI[15:0]222的值而产生。
参考图5,根据本发明用以说明图1的堆栈快取存储器124的快速取出操作的流程图,其中整体流程由方块502开始。
在一方块502,图1的指令翻译器106将解译(decodes)一取出指令,而指令排程器108则指派此取出指令至执行单元114的下载单元。其后,下载单元在图3中的讯号pop_instr 344产生一真值。接着,流程步骤来到方块504。
在方块504中,多工器318根据目前储存于图3中fp_offset寄存器322的值,从堆栈快取存储器124的最上层入口中的快取列讯号sc_data[0]226,选择一适当的双字语以提供至讯号fp_data 398。当讯号pop_instr signal 344为真值,图3的控制逻辑302将在讯号L1_mux_sel 395产生一值,使得图4多工器402根据此值选择一图3的输入讯号fp_data 398至总线138,并传至执行单元114的下载单元以供取出指令。其后,回写平台116接着将取出资料下载至取出指令所指定的寄存器档案112里的一寄存器。例如,若取出指令为一x86REF指令,则取出数据将被下载至暂存存盘案112的指令指示寄存器中;若取出指令为一x86 LEAVE指令,则取出资料将被下载至寄存器档案112的x86的EBP中;若取出指令为一x86 POP指令,则取出数据将被下载至POP指令所指定的的寄存器档案112的寄存器。由图5可知,上述的取出资料将被以臆测(speculatively)的方式提供至下载单元。上述操作的所以称的为臆测操作,因取出指令的来源地址(sourceaddress)还尚未被确定是否与来自快取存储器124最上层入口的取出数据的地址相同,其中,该取出指令的来源地址将于之后的步骤中被产生(generates)在实体地址336,如图5的方块516所示。且若讯号pop_instr 344为真值,控制逻辑302将在图3的讯号sc_hit 389产生一真值,并提供至执行单元114的下载单元。接着,来到方块506。
在方块506中,控制逻辑302在递增讯号386产生一真值,此时算术单元304将分别递增讯号fp_offset 396和提供此被递增的值至输出讯号372。接着,控制逻辑302将使得多工器316通过控制讯号368做出选择,并将选择的讯号下载至寄存器fp_offset 322。接着,流程来到决定方块508。
在决定方块508中,控制逻辑302通过检验溢出讯号392以判断在方块506中执行的递增操作是否引起fp_offset寄存器322的溢流。亦即,控制逻辑302判断取出指令是否引起堆栈指针寄存器152绕回至(wrap to)下一个快取列;若是,流程来到方块512;若否,则流程来到方块514。
在方块512中,控制逻辑302在讯号pop_sc 234产生一真值,用以取出堆栈快取存储器124的最上层入口。因(系统存储器)最上层入口的快取列的最末双字语(dword)正经由取出指令被取出系统存储器的堆栈,故(堆栈块取存储器124)最上层的入口将被从堆栈块取存储器124中取出,藉以使得堆栈快取存储器124保持与系统存储器的堆栈相符。在一实施例中,方块512直到方块518执行完后才开始执行。在方块518执行后,实体地址336将与讯号sc_tag[0]224的值做比较,其中,讯号sc_tag[0]的值由方块504中的入口值所提供。在一实施例中,在方块504所使用的讯号sc_tag[0]224将被储存以供其后方块518中使用。虽然在一实施例中fp_offset 322被维持为一具有双字语大小的偏移(offset)以容纳双字语长的推入和取出指令,在其它实施例中,则亦可考虑其它大小的推入和取出资料,例如复数字语长(words)、字节(bytes)或四字语(quadwords)等。接着,来到方块514。
在方块514中,图3的地址产生器306将计算取出指令的来源虚拟地址334。接着,步骤来到方块516。
在方块516中,图3的TLB 308将产生出此取出指令的源实体地址336。继之,步骤来到方块518。
在方块518中,图3比较器314的其中一比较器,通过比较图2的实体讯号sc_tag[0]224与在方块516中所产生的实体地址336,以产生图3的讯号PA_match[0]364。继之,流程来到决定方块522。
在决定方块522中,控制逻辑302通过检验图2的讯号sc_MESI[0]222和讯号PA_match[0]364,以判断堆栈快取存储器124的最上层入口是否正确;以及判断取出指令的源实体地址336是否与堆栈快取存储器124最上层入口的实体标签204相符,亦即,实体地址336是否命中堆栈存储器124的最上层入口。在一实施例中,实体地址336的位[5:2]亦被拿与讯号fp_offset 396的值比较,以供多工器318选择出供予讯号fp_data 398的双字语,并确保被提供的双字语属正确。若取出指令的源地址336命中堆栈快取存储器124最上层的入口,亦即,此臆测快速取出操作提供正确的取出资料;若非命中,则流程来到方块524。
在方块524中,控制逻辑302在异常讯号399产生一真值,使得微处理器100分支(branch)至一异常处理器(exception handler)以处理臆测快速取出操作所提供的不正确的取出资料。在一实施例中,异常处理器负责清除(flush)堆栈存储器124,并下载最新的堆栈指示寄存器152的位[5:2]值至fp_offset寄存器322,然后异常处理器使得正确的资料得以提供至取出指令。在一实施例中,清除堆栈快取存储器124包含,回写堆栈快取存储器124中任何正确的快取列至系统存储器或一L2数据快取存储器。最后,流程结束于方块524。
由上述或底下根据图10的详细讨论可知,如图5所描述的快速取出操作可以用较习知技术快上多重时脉周期(multiple clock cycles)的操作方式,快速地提供取出资料至取出指令,此操作将快于传统快取存储器的不分取出和下载指令的操作。
参考图6,根据本发明用以说明图1中快取存储器124的推入操作的流程图,其流程从方块602开始。
在方块602中,图1的指令翻译器106解译一推入指令,以及图1的指令排程器108将指派推入指令至执行单元114的储存单元。继之,储存单元在讯号push_instr 342产生一真值。接着,流程来到方块604。
在方块604中,控制逻辑302在递减讯号384产生一真值,且算术单元304对讯号fp_offset 396的值进行递减以及提供此递减值至输出讯号372。接着,控制逻辑302通过控制讯号368使得多工器316得以选择一讯号并将其下载至图3的fp_offset寄存器322。此外,当讯号push_instr 342为真值时,控制逻辑302亦将于讯号sc_hit 389产生一真值,并传送至执行单元114中的储存单元。接着,流程进入方块606。
在方块606中,图3的地址产生器306将计算此推入指令的目的虚拟地址334。接着,流程来到方块608。
在方块608中,图3TLB 308将产生此推入指令的目的实体地址336。接着,流程来到方块612。
在方块612中,图3比较器314的其中一比较器对产生方块516中的实体地址336与图2的实体讯号sc_tag[0]224进行比较,并产生图3的讯号PA_match[0]364。接着,流程来到决定方块614。
在方块614中,控制逻辑302检验讯号PA_match[0]364和图2的讯号sc_MESI[0]222以判断堆栈存储器124的最上层入口是否正确,以及判断推入指令的目的实体地址336是否与堆栈快取列124最上层的实体标签204符合;亦即,判断实体地址336是否命中堆栈快取存储器124的最上层入口。若是,则流程来到方块616;若不是,则流程来到决定方块618。在一实施例,若实体地址336命中堆栈快取存储器124中的任一入口而非最上层的入口,则在正确入口被回写至系统存储器之后,快取存储器124将被清除(flush)。接着,流程来到方块616。
在方块616中,经由讯号sc_write_data 216进入快取列206的双字语偏移(dword offset),推入数据将被储存至快取存储器124的最上层入口,其中,快取列206由实体地址336的地址位[5:2]所指定。若有需要,最上层入口的MESI状态202将经由讯号sc_write_MESI212被更新,例如更新一修改(Modified)值。推入资料由推入指令所指定的寄存器档案112的寄存器所获得。例如,若推入指令为一x86 CALL指令,则堆入资料为由寄存器档案112的指令指示寄存器(instructionpointer register)所计算出的下一笔指令指示内容;若推入指令为一x86ENTER指令,则推入资料为寄存器档案112的x86EBP寄存器中的值;若推入指令为一x86 PUSH指令,则推入资料为PUSH指令所指定的寄存器档案112的寄存器。接着,流程进入到结束方块616。
在决定方块618中,因推入资料的目的实体地址336并非存在于堆栈快取存储器124中,于是于堆栈存储器124中须配置一个新的上层入口,用以供与推入目的实体地址336相关联的快取列容置。此时因堆栈快取存储器124将被向下推移,以释出上层入口提供给新的快取列,最下层的入口势必将被推移出堆栈快取存储器124。因此,控制逻辑302将检验讯号sc_MESI[15]222以判断堆栈快取存储器124的底层入口是否正确。若是,则流程进入到方块622;若否,则流程进入到方块624。
在方块622中,控制逻辑302通过在讯号writeback_mux_select 328产生一值使得多工器326得以选取讯号sc_data[15]226,用以安排堆栈快取存储器124底层入口的回写(writeback),其中sc_data[15]226即为堆栈快取存储器124的底层快取列,用以提供至回写列缓冲器324;然后,在讯号writeback_request 338中产生一真值,以要求图1的总线介面单元118将底层的快取列回写至L2快取存储器中的系统存储器。接着,流程进入至方块624。
在方块624中,控制逻辑302透过讯号push_sc 232使得堆栈存储器124向下推移一个入口,并经由讯号sc_write_data 216、讯号sc_write_tag 214、及讯号sc_write_MESI 212,以分别储存推入资料及其标签以及其MESI状态至堆栈快取存储器124中。接着,流程进入到方块626中。
在方块626中,控制逻辑302配置一填充缓冲器(fill buffer)用以建立,与推入指令的目的实体地址336相关连的快取列的堆栈存储器124的所有权(ownership);并用以将相关联的快取列抓取至其中。在一实施例中,方块626包含:检视(snooping)非堆栈快取存储器122和L2快取存储器;以及从非堆栈存储器122或L2快取存储器中获得相关联的快取列,若快取列存在于两者其中之一。接着,流程来到方块628。
在方块628中,此相关联的快取列将被接收至方块626中所配置的填充缓冲器中,且此快取列资料将与储存于方块624中的推入数据结合,并存放至堆栈快取存储器124的最上层入口。接着,步骤流程结束于方块628。
参考图7,根据本发明用以说明,当遇到一堆栈指示指令的加法动作时图1微处理器的操作情形。如同上述,快速取出的操作基于下述的特性:对大部份一般正常的程序而言,推入和取出指令间具有一一对一(one-to-one)的对应关系;也就是说每一推入指令最后将跟随一相对应的取出指令。然而,值得注意的是,在上述的特性中,至少存在一必须端视所通过的子(次)程序参数(the passing of subroutineparameters)的状况的异常情况(exception),以下将根据x86指令说明的。
在C语言中,例如,函数参数(function parameters)传递于系统存储器的堆栈中。在一连串的推入指令中,每一参数所适合的每一推入指令,将被执行以将参数推入至堆栈中。例如,在呼叫(calling)一用以接收5个四字节参数(4-byte parameters)的函数的前,此呼叫函数(calling function)将执行5个PUSH指令以将5个参数推入至堆栈中。然后,此呼叫函数执行一CALL指令,用以将返回地址(return address)推入至堆栈中,并且传递控制权至子程序(subroutine)。此子程序所执行的最后的指令为REF指令,用以将返回地址取出堆栈中。于是,此呼叫程序(calling routine)现在必须重新要求收回被那些参数所占用的堆栈的空间。有一项选择为:可执行一列的五个取出指令,以使堆栈指示寄存器回复至在参数被推入至堆栈前的值。然而,因呼叫函数不需此参数,故大部分的编译器(compiler)即简单地执行一ADD指令,用以将被参数占领的空间加回至堆栈指示寄存器;亦即,不须执行一列的5个跳取指令,编译器即能产生一更快及更小的单一ADD指令。在上述例子中,呼叫程序(calling routine)将加入20至堆栈指示寄存器中。上述亦为当推入或取出指令无法匹配时最有可能的做法。在一实施例中,快速取出装置将有效地对一用以将一值加入堆栈指示寄存器的指令进行译码,并且相对应地更新讯号fp_offset 322的值。此操作流程于图7的方块702。
在方块702,图1的指令翻译器106对一目的(destination)为堆栈指示寄存器152的加法指令进行译码;接着,指令排程108指派此加法指令至执行单元114的整数单元。继之,整数单元在图3讯号add_sp_instr 352产生一真值。接着,流程来到方块704。
在方块704中,控制逻辑302在加法讯号382产生一真值,而算术单元304则将讯号add_sp_val 394加入讯号fp_offset 396中,并将其总和提供至输出讯号372;其后,控制逻辑302经由发出一控制讯号368,促使多工器316选择一讯号,并将其下载至图3的fp_offset寄存器322。接着,流程来到决定方块706。
在决定方块706中,控制逻辑302检验溢流讯号392以判断于方块704中所执行的加法操作,是否引起fp_offset 322的溢流。亦即,控制逻辑302判断此加法指令是否引起堆栈指示寄存器152回绕至(wrap to)另一快取列。在方块706中,一溢流状况为:此加法指令使得堆栈指示寄存器152将不再参考储存于堆栈快取存储器124最上层入口的快取列。此外,若加法指令引起一溢流,堆栈指示寄存器152通常将参考,存储器地址邻接(adjacent to)于或大于堆栈快取存储器124最上层快取列的存储器地址的快取列。因此,为了使位于最上层入口的快取列为正确的快取列,堆栈快取存储器124必须被取出。在一实施例中,控制逻辑302将能提供一溢流超过一快取列的堆栈指示寄存器加法指令。在此实施例中,此N个在方块708中被取出的入口,将以底下的方式计算;假设快取列的大小为64字节,则
N=(fp_offset+add_sp_val)/64
因此,若N比1大,则一溢流将发生。当溢流状况发生,流程进入到方块708;否则流程来到结束方块。
在方块708中,控制逻辑302在讯号pop_sc 234产生一真值,用以将最上层入口取出堆栈快取存储器124。然而,控制逻辑302首先会判断在最上层的快取列是否正确;若是,则安排此正确的快取列的回写(writeback),将其回写至系统存储器或L2快取列,如同图6的方块622中的底层入口的回写操作。如的前关于方块706的描述,在一实施例中,N值将被计算出,且N个入口将从堆栈快取存储器124中被取出,并且所有在N个入口中的正确的快取列将被回写。接着,流程结束于方块708。
参考图8,根据本发明用以说明图1堆栈快取存储器124的下载操作的流程图。图8中包含有:图8A、图8B和图8C。图8A说明图1堆栈快取存储器124的一臆测下载操作;图8B说图1明堆栈存储器124的一正常下载操作;而图8C图说明图1非堆栈存储器122的一下载操作。首先,流程于方块802开始。
在一般典型的计算机程序中,系统存储器堆栈的另一主要用途在其堆栈上配置一空间予子程序局部变量(subroutine local variable)。子程序将根据局部变量所需的总空间通过减少堆栈指示寄存器,以在堆栈中配置出所需空间。然后,根据下载指令,并经由计算出一与堆栈指示寄存器相关的一地址偏移(offset),以存取局部变量。结果,下载资料(the load data)将有极高的机率与最新已被推入的资料位于相同的快取列。此外,子程序将很有可能执行一下载指令,以存取根据呼叫例程(calling routine)而被推入至堆栈的参数。另外,一极高的可能性为,被推入的参数将展成(span)两个快取列,亦即,其中一推入指令产生回绕(wrap)至下一个快取列,如图6中,方块618至方块628所述。最后造成,参数中的某些参数将可能位于堆栈快取存储器124最上层快取列的下一层快取列,而非最上层快取列,亦或位于最上层快取列的下下一层,一此类推。因此,在一实施例中,堆栈快取存储器124的臆测下载(speculative load)操作,利用通过检查堆栈快取存储器124,看下载数据目前是否位于最上面两层入口。通过直接检查最上面两个入口,将可避免传统快取存储器的列解译操作(row decodeoperation),因此无形中将可节省一时脉周期(clock cycle)。
另外,在一实施例中,臆测下载无形中节省一额外的时脉周期,其通过利用下载指令的虚拟地址334而非实体地址336,将其与堆栈标签比较看是否下载数据目前位于最上层的两个入口而达成。若虚拟地址符合最上方两入口其中之一,则表示下载资料目前将很有可能位于此入口,虽然因虚拟地址为一替址(aliasing address),而无法百分的百确定。在微处理器100的一实施例的臆测下载操作中,堆栈快取存储器124的所以提供不正确的下载资料,其因为操作系统的任务切换(task switch)时,将可能更新存储器分页资料(paging information),因而使得虚拟地址无法匹配。在一实施例中,特别是一使用堆栈地址区段寄存器(stack address segment register)的微处理器100,例如x86计算机的SS寄存器,其臆测下载操作中,堆栈快取存储器124的所以提供不正确的下载数据,因为堆栈地址区段寄存器的资料更新动作将影响地址计算(address calculation)的效率,因而使得虚拟地址无法匹配。
虽然图8所述的实施例中,在执行一臆测下载操作时,检验堆栈快取存储器124的最上层两个入口做为候选入口(candidates);然而实际上,臆测下载操作中其所检验的堆栈快取存储器124的入口数并非限制于一特定数,亦即,非限定只检验最上层两个入口;在其它不同的实施例中,亦可考量检验不同的入口数量。
在方块802中,图1的指令转换器106将对一下载指令进行译码,而指令排程器108则发送此下载指令至执行单元114的下载单元。继之,下载单元在讯号load_instr 346产生一真值。接着,流程来到方块804。
在方块804中,地址产生器306计算下载指令的来源虚拟地址334。接着,流程来到方块806。
在方块806中,图3的两个比较器312将方块804中所产生的虚拟地址336与图2讯号sc_tag[1:0]224做比较,以产生讯号VA_match[1:0]362。接着,流程来到决定方块808。
在决定方块808中,图3的控制逻辑302将检验讯号VA_match[1:0]362和图2的讯号sc_MESI[:0]222,以判断堆栈存储器124的最上层两个入口,的任一入口是否正确,以及下载指令的来源虚拟地址334是否与堆栈存储器124最上层两个入口标签204的虚拟地址部分相符(match);亦即,其将检验虚拟地址334是否命中于迭存储器124最上层两个入口;若是,流程来到方块812;若否,则流程来到图8B的方块824。
在方块812中,因讯号load_instr 346为真值,控制逻辑302将在讯号spec_sc_load_mux_sel 391产生一值以使得图4中多工器412选择一决定方块808所判定的堆栈快取存储器124的两个快取列数据sc_data[1:0]226其中之一快取列,并将其提供至讯号422中,其中,此快取列具有一与下载指令的来源虚拟地址334符合的虚拟标签204。接着,多工器404从一由实体地址[5:2]336所指定的快取列422中,选取一双字语,以提供至图4的讯号424。继之,控制逻辑302在图3讯号L1_mux_sel 395产生一值,使得图4的多工器402对输入424进行选取,并将结果提供至总线138,最后提供至执行单元114的下载单元。接着,回写平台其后将资料下载至下载指令所指定的寄存器档案112的寄存器中。如图8A所示,此资料以臆测的方式被提供至下载单元。上述的操作的所称为臆测因为,下载指令的来源实体地址尚未与从堆栈快取存储器124的最上层两个入口所提供至下载单元的下载数据的地址进行确认,其中,上述的下载指令的实体地址将于方块814中产生。在于方块808中侦测到虚拟地址334命中于堆栈存储器124最上层两个入口的其中之一入口后,控制逻辑302在讯号sc_hit389产生一真值,并将其提供至执行单元114的下载单元中。接着,流程来到方块814。
在方块814中,TLB 308产生下载指令的来源实体地址336。接着,流程来到方块816。
在方块816中,图3中两个比较器314将对产生于方块814的实体地址336与方块812中所提供的下载资料的实体标签sc_tag[1:0]224做一比较,以产生图3中的讯号PA_matchp[1:0]364。接着,流程来到决定方块818。
在决定方块818中,控制逻辑302检验相对应于堆栈快取存储器124入口(用以在block812中臆测性地提供下载资料)的讯号PA_match[1:0]364,以判断下载指令的来源实体地址是否符合(matches)入口的实体标签tag 204;亦即,检验实体地址336是否命中于此入口。若下载指令的来源实体地址336命中于堆栈快取存储器124的臆测入口,则流程结束,亦即表示此臆测下载操作提供正确的取出资料;否则,流程来到方块822。
在方块822中,控制逻辑302将在异常讯号399产生一真值,使得微处理器100分支出一异常处理用以处理当臆测下载操作提供不正确的下载资料的情况。此异常处理器将为此下载指令提供一正确的数据。在一实施例中,异常处理器将从非堆栈快取存储器122、系统存储器或L2快取存储器中下载正确的数据。接着,流程来到方块822。
由上述或之后配合图11的详细说明可知,根据图8A所述的堆栈快取存储器124的臆测下载操作,下载指令下载所需要的下载资料的速率,往往会比传统使用的闪存快上多个时间周期。
在图8B的方块824中,TLB 308产生此下载指令的来源实体地址336。接着,流程来到方块826。
在方块826中,图3的比较器314将对方块824中所产生的实体地址336与堆栈快取存储器124中16个入口的每一入口的实体标签sc_tag[15:0]224进行比较,以产生讯号PA_match[15:0]364。接着,流程来到决定方块828。
在方块828中,控制逻辑302检验讯号sc_MESI[15:0]222和讯号PA_match[15:0]364以判断堆栈快取存储器124所有入口的任一地址是否正确,以及判断下载指令的来源实体地址336是否与一正确的堆栈快取存储器124入口的实体标签204相符;亦即,判断是否实体地址336命中于堆栈快取存储器124。若下载指令的来源实体地址336命中堆栈快取存储器124,则流程来到方块832;若否,则流程来到图8C的方块834。
在方块832中,因讯号load_instr 346为真值;及因下载指令的来源虚拟地址334未命中于堆栈快取存储器124最上层两个入口;以及因下载指令的来源实体地址336命中于堆栈快取存储器124,因而控制逻辑302在讯号normal_sc_load_mux_sel 393产生一值,使得图4中多工器412选择一决定方块828所判定的堆栈快取存储器124的16个快取列数据sc_data[1:0]226其中之一快取列,并将其提供至讯号422中;其中,此快取列将具有一与下载指令的来源实体地址336符合的实体标签204。此外,多工器406将从被实体地址[5:2]336所指定的快取列428中,选取一双字语以供图4的讯号426。再者,控制逻辑302将在讯号L1_mux_sel 395产生一值,使得多工器402得从输入426中选取一资料以供总线138,最后将其传送至执行单元114的下载单元,以执行此下载指令;其后,回写平台116将资料下载至下载指令所指定的寄存器档案112的一寄存器。若在方块828中侦测到实体地址336命中于堆栈快取存储器124,控制逻辑302即在讯号sc_hit 389产生一真值,以传送至执行单元114的下载单元。然后,流程结束于方块832。
由上述或之后配合图12的详细说明可知,图8B所述的堆栈快取存储器124的正常下载(normal load)操作,使得下载指令得以较快速的传送方式传送下载资料,且此传送方式将较例如使用非堆栈快取存储器122的传统的快取存储器操作快上至少一时脉周期(clock cycle)的来得快。
在图8C的方块834中,非堆栈快取存储器122将接收一图8B方块824中所产生的实体地址336的索引部分(index portion),并在非堆栈快取存储器122中执行此索引部分的列解译(a row decode of theindex portion)动作,以选取一列(row)或线组(set of ways)。接着,流程来到方块836。
在方块836中,非堆栈快取存储器122将对产生于方块824的实体地址336的上层部分(或标签)和方块834中所选取的每一线组(set ofways)的实体地址标签进行比较。接着,流程来到决定方块838。
在决定方块838中,非堆栈快取存储器122检验方块836的比较结果以及被选择线组中的合适位,藉以判断下载实体地址336是否命中于非堆栈快取存储器122。若是命中,则流程来到方块842;否则,流程来到方块844。
在决定方块842中,非堆栈快取存储器122将从实体地址所命中的非堆栈快取存储器122的入口,提供出下载数据。接着,流程来到方块844。
在方块844中,因在决定方块838中所做的判断结果为,实体地址336未命中于非堆栈快取存储器122;因此,此时非堆栈存储器122将配置(allocate)一入口,以供与下载指令的实体地址336有关的未命中的快取列加载。接着,流程来到方块846。
在方块846中,非堆栈快取存储器122从系统存储器或L2快取存储器中抓取未命中(或错失)的快取列,至方块844中所配置的非堆栈快取存储器122的入口。接着,流程来到方块848。
在方块848中,非堆栈快取存储器122则从方块846中被抓取的快取列提供下载资料。于是,流程结束于方块848。
在一实施例中,从图8C的方块834至方块848的操作根据传统快取存储器的技术达成。亦即,图8C描述在传统非堆栈快取存储器122执行技术中,当下载实体地址336未命中于堆栈快取存储器124时的传统下载操作流程。
参考图9,为根据本发明用以说明图1的L1快取存储器126的储存操作(store operation)的流程图。首先,流程开始于方块902。
在方块902中,图1的指令翻译器106对一储存指令进行译码,然后,指令排程器108指派此储存指令至执行单元114的储存单元。继之,储存单元于图3的讯号store_instr 348产生一真值。接着,流程来到方块904。
在方块904中,图3地址产生器306将计算储存指令的目的虚拟地址334。接着,流程来到方块906。
在方块906中,图3TLB 308产生储存指令的目的实体位置336。接着,流程来到方块908。
在方块908中,图3的比较器314将对在方块906所产生的实体地址336与堆栈快取存储器124中16个入口的每一入口的实体标签sc_tag[15:0]224进行比较,以产生讯号PA_match[15:0]364。接着,流程来到决定方块912。
在决定方块912中,控制逻辑302检验讯号sc_MESE[15:0]222和讯号PA_match[15:0]364以判断堆栈快取存储器124的任一出口是否正确,以及判断储存指令的目的实体地址336使否与一正确的堆栈快取存储器124入口的实体标签204相符,亦即,判断实体地址336是否命中于堆栈快取存储器124。若储存指令的目的地址336命中于堆栈快取存储器124,则流程来到方块914;若否,则流程来到方块916。
在方块914中,储存资料(the store data)将经由讯号,进入实体地址336的地址位[5:2]所指示的快取列206的双字语偏移(dword offset),以被存入至方块912中所判断的堆栈快取存储器124内的一正确相符入口中。若有需要,最上层入口的MESI状态202将可经由讯号sc_write_MESI 212进行更新,例如,更新一正确的Modified值。储存资料从储存指令所指定的寄存器或存储器的地址获得。例如,若储存指令x86 MOV指令指定一目标寄存器做为储存资料的来源地址时,则表此指令的储存资料将位于寄存器档案112的此目标寄存器中,并做为MOV指令的来源操作数(source operand)。当方块912中侦测到实体地址336命中于堆栈124时,控制逻辑302将在sc_hit讯号389产生一真值,并提供至执行单元114的储存单元。接着,流程来到方块914。
在方块916中,产生于方块906的实体地址336的标签部分(tagportion)将被拿与被实体地址336的索引部分(index portion)所选取的非堆栈快取存储器122的每一线组(way set)中的实体标签做比较。接着,流程来到决定方块918。
在决定方块918中,控制逻辑302将检验讯号non-sc_hit 366以判断储存指令的目的实体地址336是否命中于非堆栈快取存储器122。若是命中,流程来到方块922;若否,则流程来到方块924。
在方块922中,储存资料被存入至决定方块918中被选取的非堆栈快取存储器122的线组的正确相符线(matching way)中。接着,流程结束于方块922。
在方块924中,由于决定方块918中的判断结果为储存指令的实体地址336未命中(错失,missing)于非堆栈存储器122,因而,非堆栈快取存储器122将在其内配置一入口,用以储存此与储存指令实体地址336相关联的快取列(implicated cache line)。接着,流程来到方块926。
在方块926中,非堆栈快取存储器122将从系统存储器或L2快取存储器中,抓取此未命中(或错失)的快取列至方块924中所配置的非堆栈快取存储器122的入口。接着,流程来到方块928。
在方块928中,非堆栈快取存储器122将把储存数据储存至方块926中被抓取的快取列。接着,流程来到方块928。
在一实施例中,图9的方块902至方块906,以及方块916至方块928,根据传统的快取存储器技术执行的。亦即,方块902至906,以及方块916至928描述传统非堆栈快取存储器122的传统储存操作,且该操作在储存指令实体地址336未命中于堆栈快取存储器124的情况下执行的。
参考图10,根据本发明用以说明图5中关于图1堆栈快取存储器124的一快速取出操作的时序操作的时序图。图10包含4个标示为1到4的线(columns),用以对应于微处理器100的4个时脉周期(clockcycles)。图10亦包含5个列(rows),且每列表示微处理器100不同的动作和结果。每一个由线和列所形成的方形方块中,不是空白就是包含一取出字样“pop”,以显示取出指令的操作时序进行到何处,如同其在微处理器100线路图的操作流程位置。
在时脉周期1中(in clock cycle 1),根据图10的第一列可知,图1执行单元114的储存单元将在讯号pop_instr 344产生一真值,以要求取出指令将请求一取出资料,如图5的方块502。
在时脉周期2中,根据第二列,图1堆栈快取存储器124将从被fp_offset 396所指定的最上层入口的快取列提供下载资料予取出指令,如图5方块504。再者,多工器318将从来自堆栈存储器124最上层入口的讯号sc_data[0]226所提供的16个双字语中,选取一由讯号fp_offset 396所指定的双字语,而多工器402则从输入讯号fp_data398选取一fp_data资料。此外,堆栈快取存储器124将通过讯号sc_hit389,把取出指令的命中情形告知下载单元,亦即,堆栈快取存储器124将向下载单元告知取出指令所要求的资料目前存在于堆栈快取存储器124中。如同前面根据图5的描述,此命中指示讯号sc_hit 389一臆测,因其尚未确认取出指令的来源地址(取出指令的来源地址将产生于时脉周期3)是否与时脉周期3中由快取存储器124最上层入口提供至下载单元的取出数据的地址相同。在一实施例中,此讯号sc_hit 389告知下载载单元取出指令的命中结果的动作,伴随着正确的sc_MESI[0]222位信息而完成;亦即,除非堆栈快取存储器124的最上层入口为正确,否则堆栈快取存储器124将不通知下载单元取出指令的命中情形。也就是说,虽然控制逻辑302在表明一取出命中前,没有确认地址相符情形,然事实上,其已对堆栈快取存储器124的最上层入口是否正确做了确认。
在时脉周期2中,根据时序图第三列,地址产生器306将计算图3的虚拟地址334,如图5方块514所述。
在时脉周期3中,根据时序图第四列,TLB 308将产生取出图3中的取出指令的来源实体地址336,如图5中方块516所述。
在时脉周期4中,根据时序图第五列,控制逻辑302将侦查堆栈快取存储器124是否提供不正确的取出数据,如如图5中方块518~524所述。
当比较图10和之后将描述的图13时可知,快速取出操作使得L1资料快取存储器126可以较习知技术快上数个多重时脉周期(multipleclock cycles)的操作模式提供取出指令所需的资料,这是由于传统快取存储器不具区分取出指令和下载指令的操作模式来得快。
在一实施例中,实体地址336的位[5:2]用以选取双字语而非fp_offset 396,且资料在时脉周期3被提供而非时脉周期2。
参考图11,根据本发明用以说明图8操作的堆栈快取存储器124的臆测下载操作时序的时序图。图11包含4个标示为1到4的线,以对应于微处理器100的4个时脉周期。同时,图11亦包含6个列,且每列表示微处理器100不同的动作和结果。每一个由线和列所形成的方形方块中,不是为空白就是包含一下载字样“load”以显示下载指令的操作时序进行到何处,如同其在微处理器100线路图的操作流程所在位置。
在时脉周期1中,根据图11的第一列,图1执行单元114的下载单元将于图3讯号load_instr 346产生一真值,用以请求下载指令所需的下载资料,如图8方块802所述。
在时脉周期2中,根据第二列,地址产生器306将计算图3的虚拟地址334,如图8方块804所述。
在时脉周期3中,根据第三列,图3的比较器312执行一虚拟标签比较动作以产生讯号VA_matach[1:0]362,如图8方块806所述。此外,控制逻辑302如图8方块812所示,将基于讯号VA_match[1:0]362和讯号sc_MESI[1:0]222,产生讯号spec_sc_load_mux_sel 391。此外,堆栈快取存储器124将通过讯号sc_hit 389告知下载单元下载指令的命中情形,如图8方块812所示;亦即,堆栈快取存储器124将通知下载单元下载指令所需的资料目前存在于堆栈快取存储器124中。如同的前图8中的描述,此命中告知为臆测,因其尚未确认下载指令的来源实体地址(下载指令的实体来源地址将产生于时脉周期3)是否与将在时脉周期4中由快取存储器124最上层入口提供至下载单元的下载数据的地址相同。
在时脉周期3中,根据第四列,TLB 308将产生下载指令的来源实体地址336,如图8的方块814所述。
在时脉周期4中,根据第五列,下载资料将被提供至下载单元,如图8方块812所示。此外,图4的多工器412将根据讯号spec_sc_load_mux_sel 391从两快取列资料sc_data[1:0]226中选取其中一资料;而多工器404则根据实体地址336的位[5:2]选取一适当的双字语,且多工器402将执行选取输出讯号424的动作。
在时脉周期4中,根据第六列,控制逻辑302将对堆栈快取存储器124是否提供不正确的下载资料的情形进行侦测,如图8方块816至方块822所示。
通过比较图11和之后将描述的图13可知,此臆测下载操作将使得L1快取存储器126,得以较习知的快取存储器以快上多重时脉周期的模式提供下载指令的下载资料。
参考图12,根据本发明用以说明图8堆栈快取存储器124的一正常(非臆测)的下载操作时序的时序图。图12包含5个标示为1到5的线,其对应于微处理器100的五个时脉周期。图12中亦包含5个列,且每列表示微处理器100不同的一动作和结果。每一个由线和列所形成的方形方块中不是为空白就是包含一下载字样“load”,以显示下载指令的操作时序进行到何处,如同其在微处理器100线路图的步骤流程所进行到的阶段。
在时脉周期1中,根据图12的第一列,此时图1执行单元114的下载单元将在图3的讯号load_instr 346产生一真值,用以请求下载指令所需的下载资料,如图8方块802所述。
在时脉周期2中,根据第二列,图3地址产生器306将进行虚拟地址334的计算,如图8方块804所述。
在时脉周期3中,根据第三列,TLB 308将产生下载指令的来源实体地址336,如图8的方块824所述。
在时脉周期4中,根据第四列,图3的比较器314将执行一实体标签比较动作,以产生图3所示的讯号PA_matach[15:0]364,如图8方块826所述。此外,控制逻辑302将基于讯号PA_match[15:0]364以及讯号sc_MESI[15:0]222二者,产生讯号normal_sc_load_mux_sel393,如图8方块812所示。接着,堆栈存储器124将通过讯号sc_hit 389告知下载单元下载指令的命中情形,如图8方块832所示。
在时脉周期5中,根据第五列,下载资料将被提供至下载单元,如图8方块832所示。此外,图4的多工器408将根据讯号spec_sc_load_mux_sel 393从快取列资料sc_data[15:0]226中16个资料列中选取一资料列;而多工器406则根据实体地址336位[5:2]选取一适当的双字语,以及多工器402将进行选取输出讯号426的动作。
通过比较图12和之后将描述的图13可知,此正常下载操作将使得L1资料快取存储器126得以相对于传统的快取存储器,以快上多重时脉周期的操作模式来提供下载指令的下载资料。
参考图13,根据本发明用以说明图8非堆栈快取存储器122的下载操作时序的时序图。图13包含6个标示为1到6的线,用以分别对应于微处理器100的6个时脉周期。图13中亦包含6个列,且每列用以区别微处理器100中不同的操作动作或结果。图13中每一个由线和列所形成的方形方块,若非为空白即包含一下载字样“load”以显示下载指令的操作时序进行到何处,如同其在微处理器100线路图的操作流程所进行到的阶段。
在时脉周期1中,根据图13的第一列,此时图1执行单元114的下载单元将在图3的讯号load_instr 346产生一真值,用以请求下载指令所需的下载资料,如图8方块802所述。
在时脉周期2中,根据图13的第二列,地址产生器306将进行图3的虚拟地址334的计算,如图8方块804所述。
在时脉周期3中,根据第三列,图3的TLB 308将产生下载指令的来源实体地址336,如图8的方块824所述。
于时脉周期4中,根据第四列,此时非堆栈快取存储器122将基于实体地址336的索引部份执行一传统列解译(row decode)动作,并从列解译结果所指定线集(way set)的每一线中读取所需的资料。
如图13的第五列,于时脉周期5,此时非堆栈快取存储器122将对实体地址336的标签部份与被选取线集的每一线进行一实体标签比较。接着,非堆栈快取存储器122将根据标签的比较结果和每一线的正确位,产生一线选择用讯号(a select signal)用以选取相符的正确线。
脉周期6中,根据第六列,此时非堆栈快取存储器122将输出(muxes)被线选取讯号所指定的快取列,并根据实体地址336的较低位,输出(muxes)被选取快取列的正确双字语。
值得注意的是,依据图10到图13的时序图,在其它实施例中则可考虑不同的功能,例如,由不同的地址比较和多工器处理,将可组合出不同的时脉周期;且上述的快速取出、臆测下载、正常下载和非堆栈快取存储器122的下载操作,并非仅限于本发明所提的有限实施例。
由前述可得知,具有堆栈快取存储器124和非堆栈快取存储器的数据快取存储器的优点在于,其能通过资料存放空间的安排,而较传统的没有区分堆栈与非堆栈存取的单一快取存储器,更能有效地增加如L1资料快取存储器126的容量利用空间,且不会增加L1资料快取存储器126的存取时间。因此,在不以堆栈资料(stack data)混淆非堆栈快取存储器122的情形下,非堆栈快取存储器122的整体效能将有效提升,且当执行程序存取动作时,其存取资料的效率将超越传统具有同样大小的快取存储器。此外,堆栈快取存储器124对于大部份的取出指令而言将提供更快的存取,且其利用堆栈存取的LIFO特性达成的;亦即,取出指令所要求的资料通常有极高的可能性位于堆栈快取存储器124的最上层,因为堆栈快取存储器124的最上层存在最新被推入的资料中。因此,堆栈快取存储器124将在判定取出地址实际上是否命中于堆栈快取存储器124前,以臆测的方式先提供取出资料。同样地,堆栈快取存储器124对于大部份的下载指令亦提供更快速的存取,其利用堆栈存取的LIFO特性达成的;亦即,下载指令所要求的下载资料通常有极高的可能性位于或接近堆栈快取存储器124的最上层。因此,堆栈快取存储器124在执行一用以明确地判断下载资料是否存在的实体地址比较前,即基于虚拟地址的比较结果从堆栈快取列上层的一入口,执行臆测并提供下载资料。如此一来,堆栈快取存储器124在大部份的情况下,其提供下载资料的速度将快于传统须先进行实体地址比较的下载速度,此因为传统的操作中由虚拟地址转换至实体地址需消耗额外的时间。在本发明中,当下载虚拟地址未命中于堆栈快取存储器的上层入口时,其表示下载数据将无法经由臆测操作提供予下载指令;此时,若下载实体地址命中于堆栈快取存储器124,则堆栈快取存储器124将据此提供下载数据。但若下载实体地址未命中于堆栈快取存储器124,则非堆栈快取存储器122将担负提供此下载资料的任务。因此,从堆栈快取存储器124读取资料所需的延滞时间(latency time)可变的(variable),且若能事先能臆测的存取情况愈多,其所需的时脉周期将愈少,亦即将能更快进行存取。在一方面,堆栈操作延滞时间的变更(the latency variation)依指令读取堆栈快取存储器124的形式而定;在另一方面,延滞时间的变化依所要求的资料存在于堆栈快取存储器124的何处而定。
参考图14,根据本发微处理器1400的线路方块图。微处理器1400相似于图1的微处理器100,不同点在于微处理器1400包含一L1数据快取存储器1402,且L1数据快取存储器1402内不包含如图1的堆栈快取存储器124。本实施例中,L1数据快取存储器1402内具有一用以从L1数据快取存储器1402中执行一快速取出操作的装置的传统L1资料快取存储器,如底下所述。
参考图15,根据本发明用以说明图14L1资料快取存储器1402的方块图。图15中的许多元件及其功能皆与图3的元件相似,且相似的元件的标号亦与图3中元件的标号互为对应。此外,数据快取存储器1402亦包含:地址产生器306用以接收操作数332和产生虚拟地址334;TLB 308用以接收虚拟位置334和产生实体地址336;运算单元304用以接收加法讯号382、递减讯号384和递增讯号386并产生下溢讯号388和溢流讯号392;以及多工器316、多工器318、fp_offset寄存器322、讯号add_sp_val 394、堆栈指示寄存器位[5:2]152、输出讯号372和讯号fp_offset 396。上述的元件其功能与图3中所对应相似标号的元件功能相同,至于其它不同的处将于底下说明的。资料快取存储器1402亦包含一控制逻辑1502,其功能相似于图3的控制逻辑302。控制逻辑1502与控制逻辑302的功能相似且包含:接收讯号pusn_instr 342、讯号pop_instr 344和讯号add_sp_instr 352;产生多工器选择讯号368;以及当侦查到一不正确的快速取出操作时,控制逻辑1502将产生异常讯号399。至于其它与图3控制逻辑302不同的处亦将于底下说明的。
资料快取存储器1402亦包,用以储存复数个快取列(cache lines)的一储存元件阵列(a storage element array)1504、每一快取列的地址标签(address tag)和每一快取列的快取状态(cache status),如MESI状态。在图15的实施例中,储存元件阵列1504配置有N个列(rows)或集(sets),和4个线(columns)或线(ways)。亦即,数据快取存储器1402配置为一四线集(four-way set)组成的快取存储器,然而,本发明对于快取存储器线数并无限制,其它数目亦可考虑。在一实施例中,储存于储存元件阵列1504的一快取列大小为64字节(bytes)。
数据快取存储器1402包含一列译码电路(row decode circuit)1506(或称列译码器)。列译码器1506接收一列讯号1552用以指定出储存元件阵列1504的N列中的其中一列。接着,列译码器1506将在复数个读取讯号[N-1:0]1542中的其一个由列讯号1552所指定的讯号中产生一真值。继之,储存元阵列1504输出被讯号read[N-1:0]1542所指定的列的内容1594。亦即,被指定的快取列的每一线的快取列资料、标签和MESI状态将伴随讯号1594输出。在十五图的实施例中,四个快取列中每一快取列包含了16个双字语,且其将伴随着其所对应配置的标签1574和MESI状态的正确位1576输出于讯号1594。
数据快取存储器1402亦包含一与储存元阵列1504连结且具有4个输入口的多工器1528。多工器1528透过其4个输入口,分别接收储存元阵列1504的4个快取列输出讯号1594。多工器1528将依据一控制用输入讯号1596选取其中一快取列,并输出至讯号1592。此被选取的快取列讯号1592提供至多工器318,然后再依据讯号fp_offset396提供一双字语至总线138。
资料快取存储器1402亦包含由控制逻辑1502所产生的讯号fast_pop 1564。若讯号pop_instr 344为真值,则控制逻辑1502将在讯号fast_pop 1564产生一真值,使得快速取出操作得以于数据快取存储器1402执行。
数据快取存储器1402亦包含与控制逻辑1502连结的储存元第一堆栈(a first stack of storage elements)fp_row 1516,如图15所示。堆栈fp_row 1516包含复数个储存元(storage elements),且每一储存元用以储存一值以辨识及指定储存元阵列1504的其中一列。在一实施例中,堆栈fp_row 1515的每一储存元储存了log2N位,其中N为储存元阵列1504的列数。此堆栈fp_row 1516的复数个储存元为一堆栈或LIFO存储器,且其包含一上层入口1514用以储存由控制逻辑1502的讯号new_row 1554所提供的最新被推入的列值。亦即,讯号new_row 1554将指明出储存元阵列1504中一存有最新推入指令所需资料的快取列,详细情形将于之后配合图17描述。此外,通过此储存包含有最新推入指令所需数据的列的操作,将使数据快取存储器1402得以执行一快速取出操作,详细情形亦将于之后说明的。堆栈fp_row 1516亦从控制逻辑1502接收一讯号push_row 1562。当控制逻辑1502确认讯号push_row 1562的真值后,堆栈fp_row 1516将被向下推移一入口,亦即,底层入口将被推移出堆栈fp_row 1516,而剩余的每一入口将立即接收其本身上一入口的值,且讯号new_row 1554的值将被写入堆栈fp_row 1516的最上层入口。堆栈fp_row 1516亦从控制逻辑1502接收一讯号pop_row 1558。若当控制逻辑1502于讯号pop_row 1558产生一真值时,堆栈fp_row 1516将往上推移一入口,亦即,最上层入口将被推移出堆栈fp_row 1516,而剩余的每一入口将立即接收其本身下方一入口的值。
数据快取存储器1402亦包含一与堆栈fp_row 1516连结的双输入口多工器1512。多工器1512从其中一入口接收堆栈fp_row 1516最上层1514的值,此值标示为讯号fp_row 1556;同时,多工器1512从另一入口接收一来自TLB 308的实体地址336中的索引(index)158或列选取部份(row select portion)。在一实施例中,索引1548包含实体地址336的较低地址位(lower address bits)。若讯号fast_pop 1564为真值,则多工器1512将选取讯号fp_row 1556做为输出,以供列讯号1552并传送至列编译器1506;若讯号fast_pop 1564非真,则多工器1512将选取索引1548以供列讯号1552。
数据快取存储器1402亦包含一与控制逻辑1502连结的储存元第二堆栈(second stack of storage elements)fp_way 1534,如图15所示。堆栈fp_way 1534包含复数个储存元,且每一储存元用以储存一值以辨识储存元阵列1504的其中一线。在一实施例中,图15中,堆栈fp_way1534的每一储存元储存2位资料用以指明储存元阵列1504四个线中的其中一线。堆栈fp_way 1534的复数个储存元设计为一包含了一上层入口1532的堆栈或LIFO存储器,其中此上层入口1532用以储存控制逻辑1502的讯号new_way 1582所提供的最新被推入的线值(wayvalue);亦即,讯号new_way 1582可指定出储存元阵列1504中讯号new_row 1554所指定的线中的线,其中讯号new_row 1554所指定的线储存了一包含最新堆入指令资料的快取列,详细情形将于之后配合图17说明。通过此储存一包含最新推入资料的线的动作,将使得资料快取存储器1402得以执行一如之后所述的快速取出操作。堆栈fp_way 1534亦从控制逻辑1502接收一讯号push_way 1588。当控制逻辑1502在讯号push_way 1588产生一真值时,堆栈fp_way 1534将被向下推移一入口,而底层入口将被推移出堆栈fp_way 1534,接着,剩余的每一入口将立即接收其上一入口的值;同时,讯号new_way 1582的值将被写入堆栈fp_way 1534的上层入口1532。堆栈fp_way 1534亦从控制逻辑1502接收讯号pop_way 1586。当控制逻辑1502在讯号pop_way 1586产生一真值时,堆栈fp_way 1534将被向上推移一入口,即最上层入口堆被推移出堆栈fp_way 1534,且剩余的每一入口将立即接收其本身下一入口的值。
在一实施例中,堆栈fp_row 1516和堆栈fp_way 1534包含于储存元件的单一堆栈中,且每一堆栈储存有一对列/线(row/way pair)。
数据快取存储器1402亦包含一与堆栈fp_way 1534连结的双输入多工器1526。多工器1526的其中一输入接收来自堆栈fp_way 1534上层入口1532的值,此值为讯号fp_way 1584;而多工器1526的另一输入则接收讯号normal_way_select 1578。若讯号fast_pop 1564为真值,则多工器1526将选取讯号fp_way 1584做为输出并传送至多工器选择用讯号1596以供多工器1528;若讯号fast_pop非真,则多工器1528选取讯号normal_way_select 1578做为输出并传送至多工器选择用讯号1596。
在一实施例中,堆栈fp_way 1534和堆栈fp_row 1516的每一入口将包含一正确位,且讯号fast_pop 1564将伴随着上层入口1514和上层入口1532的正确位的逻辑加法(ADD)进行多工器闸控。亦即,虽然控制逻辑1502在执行一快速取出操作前,并无确认取出来源地址是否相符;然而,在快速取出操作执行前,其确认了堆栈fp_row 1516的上层入口1514和堆栈fp_way 1534的上层入口1532为正确。在此实施例中,每当堆栈fp_row 1516或堆栈fp_way1534被取出时,及入口被往上推移后,其底层入口将由正确值设定为错误值。
堆栈快取存储器1402亦包含一与控制逻辑1502连结的线选择产生器(way select generator)1524。线选择产生器1524从一由储存元阵列1504中被选取的列,接收此列的每一地址标签(address tags)1574和每一正确位(valid bits)1576。线选择产生器1524亦从TLB 308接收实体地址336的地址标签部份1546。线选择产生器1524将对储存元阵列1504输出讯号中的每一地址标签1574和实体地址1546,如取出、推入、下载或储存指令的实体地址进行比较。若标签1574中的标签一与实体位置标签1546相符,且其对应的正确位1576显示标签1574为正确,则线选择产生器1542将在讯号cache_hit 1572产生一真值并提供至控制逻辑1502。此外,线选择产生器1524亦提供正确相符线(thevalid matching way)的值,即此命中于储存元阵列1504的线将通过讯号normal_way_select 1578提供至控制逻辑1502和多工器1526。
数据快取存储器1402亦包含与储存元阵列1504相连结的检验逻辑(check logic)1508。检验逻辑1508将接受讯号实体地址336、讯号fast_pop 1564、讯号fp_row 1556、讯号fp_way 1584、讯号fp_offset 396、标签讯号1574和正确讯号1576。检验逻辑1508执行检验动作以判断一快速取出操作中依取出指令而得的臆测取出数据是否为正确的资料。检验逻辑1508将分别对由讯号fp_row 1556和讯号fp_way 1584所提供的正确列和正确线的值进行判断,看其是否于快速取操作中被使用,藉以从储存元阵列1504中选取正确的快取列,以提供正确的取出资料。在一实施例中,检验逻辑1508将对快速取出操作中所使用的讯号fp_row 1556的值和讯号fp_way 1584所指定的线的标签1574值进行比较。在一实施例中,检验逻辑1508亦对快速取出操作中讯号fp_row 1556的值和实体地址336的对应位进行比较。在一实施例中,检验逻辑1508亦将针对快速取出操作中讯号fp_offset 396的值和实体地址336的对应位进行比较。检验逻辑1508亦将对此由讯号fp_way 1584所指定的线的正确位1576进行确认,以显示快速取出操作中被存取的快取列为一正确的快取列。若快取列为不正确或正确的快取列没有被存取到,则检验逻辑1508将在讯号fp_check 1544产生一伪值(false value),并将其提供至控制逻辑1502;倘若快取列为正确,则检验逻辑将于讯号fp_check 1544产生一真值并将其提供至控制逻辑1502。
参考图16,根据本发明用以说明图15资料快取存储器140的快速取出操作的流程图。整体流程开始于方块1602。
在方块1602中,图14的指令转换器106将对取出指令进行译码,而指令排程108则指派取出指令至图14执行单元114的下载单元。继之,下载单元在讯号pop_instr 344中产生一真值,如图15所示。接着,流程来到方块1604。
在方块1604中,若讯号pop_instr 344为真,则控制逻辑1502于讯号fast_pop 1564产生一真值。接着,多工器1512选取讯号fp_row1556做为输出,并将其提供至讯号1552,最后传送到列译码器1506。继之,列译码器1506于讯号fp_row 1556所指定的讯号read[N-1:0]1542的一产生一真值。然后,储存元阵列1504输出真值讯号read[N-1:0]的列值至输出讯号1594。若讯号fast_pop 1564为真值,则多工器1526将选取讯号fp_way 1584做为输出,并将其提供至多工器选取讯号1596,最后传送至多工器1528。而多工器1528将由讯号fp_way 1584所指定的线中选取一快取列做为输出并提供至讯号1592。接着,多工器318将根据目前储存于寄存器fp_offset 322的值,从输出于多工器1528的快取列1592中选取一适当双字语,以提供至总线138,并通过总线传送至执行单元114的下载单元以供取出指令;之后,回写平台116将其下载至寄存器档案112中的一取出指令所指定的寄存器。例如,若取出指令为一x86 RET指令,则取出资料将被下载至寄存器档案112的指令指示寄存器;若取出指令为一x86 LEAVE指令,则取出资料将被下载至寄存器档案112的x86 EBP中;若取出指令为一x86 POP指令,则取出数据将被下载至取出指令中所指定的寄存器档案112的寄存器。从图16可知,下载指令的下载资料将以臆测的方式被提供至下载单元。此操作的所以称为一臆测操作主要因,其操作中尚未确认取出指令的来源地址是否与由讯号fp_row 1556和讯号fp_way 1584所指定的储存元阵列1504的入口所提供取出资料的地址相同,其中,取出指令的来源地址将于其后的方块1616中产生。接着,流程来到方块1606。
在方块1606中,控制逻辑1502于递增讯号386产生一真值,而算术单元304将递增讯号fp_offset 396的值并将递增后的值提供至输出372,继之,控制逻辑1502将通过控制讯号368使得多工器316选取此输出372做为多工器316的输出并下载至fp_offset寄存器322。接着,流程来到决定方块1608。
在决定方块1608中,控制逻辑1502将检验溢流讯号392以判断方块1606的递增操作是否引起fp_offset寄存器322的溢流。亦即,控制逻辑1502将判断取出指令是否将使得堆栈指示寄存器152回绕至(wrap to)下一快取列;若是,则流程来到方块1612;若否,流程将来到方块1614。
在方块1612中,控制逻辑1502在讯号pop_row 1558产生一真值以将堆栈fp_row 1516的最上层入口从堆栈fp_row 1516中取出,同时,控制逻辑1502在讯号pop_way 1586产生一真值以将堆栈fp_way1534的最上层入口从堆栈fp_way 1534取出。此最上层入口被取出的动作,用以使其保持与系统存储器的快取存储器一致,因为此储存于储存元阵列1504中由堆栈fp_row 1516的上层入口1514和堆栈fp_way的上层入口1534所指定的快取列的最后双字语,将因取出指令而从系统存储器堆栈中被取出。在一实施例中,方块1612将直到方块1618执行后才执行,其中方块1618的操作将于下面的内容叙述的。在一实施例中,在方块1604中所使用到的fp_row 1556和fp_way 1584的值将被储存,以供其后方块1618执行的用。接着,流程来到方块1614。
在方块1614中,地址产生器306将对取出指令的来源虚拟地址334进行计算。接着,流程来到方块1618。
在方块1618中,TLB 308将产生取出指令的来源实体地址336。接着,流程来到方块1618。
在方块1618中,检验逻辑1508将对产生于方块1616中的实体地址336的部份与讯号fp_way 1584所选取的标签1574的部分进行比较,并对部份的相应实体地址336和讯号fp_row 1556进行比较,以及对相应的实体地址336部份和讯号fp_offset 396进行比较;同时,检验逻辑1508并检验讯号fp_way 1584所选取的正确讯号1576以产生讯号fp_check 1544,并将其传送至控制逻辑1502。接着,流程来到决定方块1622。
在决定方块1622中,控制逻辑1502检验讯号fp_check 1544以判断取出指令的来源实体地址336是否命中于堆栈fp_row 1516和堆栈fp_way 1534所指定的储存元阵列1504的入口。若取出指令的来源实体地址336命中于堆栈fp_row 1516和堆栈fp_way 1534所指定的储存元阵列1504的入口,则流程来到结束方块,亦即表示此臆测快速取出操作提供正确的取出资料;否则,流程来到方块1624。
在方块1624中,控制逻辑1502在异常讯号399产生一真值,使得微处理器1400分支至一异常处理(exception handler)以处理臆测取出操作发生提供不正确取出资料的情形。通过此异常处理器,将使得正确的数据得以供予取出指令。在一实施例中,异常处理器将更新堆栈fp_row 1516和堆栈fp_way 1534,并下载堆栈指针寄存器152位[5:2]的正确值至fp_offset 322。接着,流程结束于方块1624。
由上述和之后关于图19的详细说明可知,图16中所描述的快速取出操作,将使得取出指令的操作得以较习知的快取存储器的操作可能快上多重时脉周期(multiple clock cycles)的模式来传送取出资料。
参考图17,根据本发明用以说明图15资料快取存储器1402的推入操作流程图,其中流程开始于方块1702。
在方块1702中,指令翻译器106对一推入指令进行解译,而指令排程器108则传送此推入指令至执行单元114的储存单元。继之,储存单元在讯号push_instr 342产生一真值。接着,流程来到方块1704。
在方块1704中,控制逻辑1502于递减讯号384产生一真值,此时算术单元3041将递减讯号fp_offset 396并提供递减后的值至输出372;继之,控制逻辑1502将通过选取用讯号368使得多工器316选取此输出讯号372做为输出,并将其传送至寄存器fp_offset 322。接着,流程来到决定方块1706。
在决定方块1706中,控制逻辑1502通过检验下溢讯号388以判断在方块1704中的递减讯号fp_offset 396是否引起fp_offset 322下溢。亦即,控制逻辑1502将判断推入指令是否引起堆栈指针寄存器152回绕至(warp to)先前快取列,若是,流程来到决定方块1716;若否,则流程来到决定方块1708。
在决定方块1708中,控制逻辑1502将检验讯号cache_hit 1572以判断推入指令的目的实体地址336是否命中于储存元阵列1504,若是,则流程来到方块1712;若否,则流程来到方块1714。
在方块1712中,资料快取存储器1402操作推入指令的方式将如同一正常推入指令(the normal push instruction)于命中于资料快取存储器1402时的操作方式。亦即,资料快取存储器1402利用传统习知的资料快取存储器的操作方法处理推入指令。因其推入操作并回绕至先前的快取列,故不需对堆栈fp_row 1516和堆栈fp_way 1524进行更新;因此,其后的一取出操作将很可能在被指定的快取列中指定一资料,其中,此被指定的快取列被堆栈fp_row 1516的最上层入口1514和堆栈fp_way 1534的最上层入口1532所指定。于是,流程结束于方块1712。
在方块1714中,控制逻辑1502于异常讯号399产生一真值使得微处理器1400分支至一异常处理,以对堆栈fp_row 1516和堆栈fp_way1534进行更新。在一实施例中,异常处理器将清除(flush)堆栈fp_row1516和堆栈fp_way 1534,并将堆栈指示寄存器152的位[5:2]的最新值下载至寄存器fp_offset 322。接着,流程来到方块1726
在决定方块1716中,控制逻辑1502检验讯号cache_hit 1572以判断推入指令目的实体地址336是否命中于储存元阵列1504,若是,则流程来到决定方块1718;若否,则流程来到方块1726。
在方块1718中,控制逻辑1502将决定命中于储存元阵列1504的列或线。列由索引1548指定,而线则由normal_way_select 1578所指定。控制逻辑1502将此命中线提供予讯号new_way 1582,并传送至堆栈fp_way 1534。此外,控制逻辑1502亦将此命中列提供予讯号new_row 1554,并传送至堆栈fp_row 1516。接着,流程来到方块1722。
在方块1722中,控制逻辑1502将在讯号push_row 1562产生一真值,用以将讯号new_row 1554的值推入堆栈fp_row 1516。同时,控制逻辑1502亦在讯号push_way 1588产生一真值,用以将讯号new_way 1582的值推入堆栈fp_way 1534。接着,流程来到方块1724。
在方块1724中,资料快取存储器1402处理推入指令的方式如一正常推入指令命中于资料快取存储器1402的处理方式。亦即,在方块1722中,当堆栈fp_row 1516和堆栈fp_way 1534被更新后,资料快取存储器1402将根据传统习知关于资料快取存储器的操作方式处理推入指令。接着,流程来到方块1726。
在方块1726中,控制逻辑1502将决定索引1548所选取的储存元阵列1504中的列中的线,并将其以与错失推入地址336相关联的快取列取代的,且此快取列须立即被存取至数据快取存储器1402中。在一实施例中,控制逻辑1502将选取被选取列中最新被使用的线。且控制逻辑1502将讯号new_way 1582提供替代线(replacement way)至堆栈fp_way 1534。此外,控制逻辑1502将把此被索引1548所指定的列提供至讯号new_row 1554,并传送至堆栈1516。接着,流程来到方块1728。
在方块1728中,控制逻辑1502于讯号push_row 1562产生一真值,用以将讯号new_row 1554所提供的值推入至堆栈fp_row 1516。控制逻辑1502亦于讯号push_way 1588产生一真值,用以将讯号new_way 1582所提供的值推入堆栈fp_way 1534。接着,流程来到方块1732。
在方块1732中,资料快取存储器1402处理推入指令的方式,如一正常推入指令于未命中于资料快取存储器1402时的处理方式。亦即,当方块1728中的堆栈fp_row 1516和堆栈fp_way 1534被更新后,资料快取存储器1402将根据传统习知资料快取存储器的操作方式处理的。于是,流程结束于方块1732。
参考图18,根据本发明用以说明图14微处理器100的堆栈指示加法指令(an add to stack pointer instruction)操作的流程图,其中,流程开始于方块1802。
在方块1802中,指令翻译器106将对一目的为堆栈指示寄存器152的加法指令进行解译,而指令排程108则将传送此加法指令至执行单元114的整数单元。继之,整数单元于讯号add_sp_instr 352产生一真值。接着,流程来到方块1804。
在方块1804中,控制逻辑1502将在加法讯号382产生一真值,此时,算术单元304将讯号add_sp_val 394加入至讯号fp_offset 396,并将总和提供至输出讯号372。继之,控制逻辑1502将通过讯号368使得多工器316选取输出讯号372做为其输出,并将下载至寄存器fp_offset 322。接着,流程来到决定方块1806。
在决定方块1806中,控制逻辑1502将检验溢流讯号392以判断方块1804中所执行的加法操作是否引起讯号fp_offset 322的溢流。亦即,控制逻辑1502将判断此加法指令是否将造成堆栈指针寄存器152回绕至另一快取列。在方块1806中,一溢流情况为:此加法操作将使得堆栈指示寄存器152不再参考储存于被指定的资料快取存储器1402中的入口的快取列,其中此快取列由堆栈fp_row 1516最上层入口1514和堆栈fp_way 1534最上层入口1532所指明。特别是,若此加法引起一溢流,堆栈指示寄存器152通常将参考其存储器地址紧邻于并大于储存在被指定的资料快取存储器1402中入口的快取列的存储器地址,其中此快取列由堆栈fp_row 1516最上层入口1514和堆栈fp_way 1534最上层入口1532所指定。结果,为了使正确的快取列能被堆栈fp_row 1516最上层入口1514和堆栈fp_way 1534最上层入口1532所指定,堆栈fp_row 1516和堆栈fp_way 1534必须被取出。在一实施例中,控制逻辑1502提供一堆栈指示寄存器152加法操作,且其引起的溢流将超过一快取列的多。在此实施例中,其于方块1808的堆栈fp_row 1516和堆栈fp_way 1534取出的入口数目为N,N的计算方式如下,其中假设一快取列的大小为64字节:
N=(fp_offset+add_sp_val)/64
若N大于1,则将发生溢流。若溢流情况出现,流程将来到方块1808;否则流程来到结束方块。
在方块1808中,控制逻辑1502在讯号pop_row 1558产生一真值,使得最上层入口从堆栈fp_row 1516中取出,同时,控制逻辑1502亦将于讯号pop_way 1586产生一真值,使得最上层入口能从堆栈fp_way 1534中取出。如同前面关于方块1806的描述,在一实施例中,N值由计算而得,且N个入口将由堆栈fp_row 1516和堆栈fp_way 1534中被取出。接着,流程来到方块1808。
参考图19,为根据本发明图15资料快取存储器1402的快速取出操作的时序操作的时序图。图19包含4个标示为1到4的线(columns),其分别对应于微处理器1400的4个时脉周期(clock cycles)。图19亦包含6个列(row),其个别的列用以表示微处理器1400不同的操作步骤和结果。图19中由列和线所构成的每一个方形方块,不是为空白就是以取出字样”pop”标示的,以表示取出指令的操作所在位置,一如微处理器1400线路图中流程进行的步骤。
在时脉周期1中,根据图19的第一列,此时执行单元114的下载单元将在讯号pop_instr 344产生一真值,用以请求取出指令所需的资料,如图16中方块1602所示。
在时脉周期2中,根据第二列,列译码器1506将对讯号fp_row1556所提供的列值进行解译以在讯号read[1:0]1542的一产生一真值,如图16中方块1604所示。继之,储存元阵列1504提供由真值讯号read[N-1:0]1542所选取的列中四个线中的每快取列、快取列标签和快取列状态,如图16的方块1604所示。
在时脉周期2中,根据第三列,地址产生器306将计算虚拟位置334,如图16方块1614所示。
在时脉周期3中,根据第四列,多工器1528将选取出讯号fp_way1584所指定的快取列1592,而多工器318则输出讯号fp_offset 396所指定的被选取快取列1592中的双字语,如图16方块1604所示。在一实施例中,由实体地址336较低位[5:2]所指定的被选取快取列中的双字语将被选取出。
在时脉周期3中,根据第五列,TLB 308产生取出指令的来源实体地址336,如图16方块1616所示。
在时脉周期4中,根据第六列,控制逻辑1502将检验讯号fp_check1544,以判断不正确的臆测取出操作是否已发生,如方块1618的方块1624所示。
在一实施例中,图15中关于快取存储器1402的一下载指令的时序操作相似于图1非堆栈快取存储器122的下载指令的时序操作。因此图13描述关于快取存储器1402一下载指令的时序操作。比较图19和图13,图16的快速取出操作将使得快取存储器1402能以可能节省下多重时脉周期的操作模式提供资料予取出指令,且其将较传统的快取存储器的操作来得快,其中传统的存储器的差异在于其不包含图15的快速取出装置,且其不具分辨取出指令和下载指令的功能。
在一实施例中,虚拟地址334的位[5:2]用以选取双字语而非讯号fp_offset 396。
虽然本发明的主要目的、特征和优点已通过一些实施例于本文中详细描述,然而本发明亦涵盖其它相关的实施例。例如,堆栈快取存储器或LIFO存储器可以以不同的方法构成,以实现一功能如LIFO(last-in-first-out)的存储器。一实施例为,一寄存器档案将做为一循环的LIFO存储器(a circular FIFO memory),以使堆栈指示寄存器的最上层和最下层能被保留,用以判断哪个入口被推入或之后哪个被取出,以及判断堆栈是否已被清空。再者,虽然本发明已在一些实施例中根据x86相关指令做详细的描述,且实施例中堆栈将随着逐渐减少的存储器地址而成长;但本发明亦可应用于其它微处理器,例如一具有堆栈存取指令(stack access instructions)的微处理器,且其堆栈将随着逐渐增加的存储器地址而成长。此外,虽然在本发明的实施例中揭露特定大小的快取列,然而其它大小的快取列亦适用于本发明。
虽然本发明的目的、特征和优点已于本文详细描述,本发明亦涵盖其它的实施例。关于实现本发明所需的硬件方面,根据本发明,其可以将计算机可读取码,如计算机可读程序代码、资料等,写入计算机可用媒体而实现的。计算机码将使得本发明的功能或设备得以具体化。例如,可通过使用一般的程序语言(如C,C++,JAVA等);GDSII数据库;硬件描述软件(HDL),包含Verilog HDL、VHDL、Altera HDL或其它程序/电路获取工具完成的。计算机码可建置于任何已知的计算机可用(或可读)的媒体,包括:半导体存储器、磁盘光盘(如CD-ROM、DVD-ROM)等,且计算机码可做为一具体化于一计算机可读的传输媒体(如传送波或任何其它媒介包含数字、光学或模拟媒介等)的计算机资料讯号。一般而言,计算机码可传输于联络网络,包含互联网和企业网络等。由此可知本发明可通过一计算机码,如一智能核(例如一微处理器核);或通过一系统设计,如一系统芯片来实施;并将其转换成一硬件,如集成电路等硬设备,以具体实现的。另外,本发明亦可通过将硬件和计算机码结合于一以实现的。
当然,本文的有限实施例并非用以限缩本发明的专利申请范围。本发明已针对其较佳实施例做特别说明与描述,对于熟知本技术的专门人士应可明了及根据本发明的实施例实施,因此其它未脱离本发明所揭示的精神下所完成的等效改变或修饰,均应包含在所述的权利要求范围中。

Claims (24)

1.一种可变延滞时间堆栈快取存储器,其特征是,包含:
一输入,用以指明一指令要求的形式,以从快取存储器中读取一资料,其中该形式为复数个预先判定的指令形式的其中之一;
复数个第一储存元件,与该输入连结,用以当该输入指明出该复数个预先判定的指令形式中的一第一预先判定的指令形式时,在一第一时脉周期数中,提供该资料;并于当该输入指明出该复数个预先判定的指令形式中的一第二预先判定的指令形式时,在一第二时脉周期数中,提供该资料,其中,该第一时脉周期数和该第二时脉周期数不相同。
2.如权利要求1所述的可变延滞时间堆栈快取存储器,其特征是,该复数个储存元件构成为一后进先出的存储器。
3.如权利要求1所述的可变延滞时间堆栈快取存储器,其特征是,更包含:复数个第二储存元件,与该复数个第一储存元件相连结,用以快取非堆栈资料,而该复数个第一储存元件用以快取堆栈资料。
4.如权利要求3所述的可变延滞时间堆栈快取存储器,其特征是,当该输入指定该复数个预先判定的指令形式中的该第二预先判定的指令形式时,该复数个第二储存元件将于一第三时脉周期数中,提供该资料,其中该第二时脉周期数和该第三时脉周期数不相同。
5.如权利要求1所述的可变延滞时间堆栈快取存储器,其特征是,该复数个预先判定的指令形式中的该第一预先判定的指令形式包含一取出指令形式,其中该复数个预先判定的指令形式中的该第二个预先判定的指令形式包含一下载指令形式。
6.一种可变延滞时间堆栈快取存储器,其特征是,包含:
复数个储存元件,该复数个储存元件构成为一后进先出的存储器,且该复数个储存元件中具有一第一子集和一第二子集,其中该第一子集所快取的堆栈数据较该第二子集中所快取的资料更晚被推入。
一输入端,用以从该快取存储器中指定一要求的来源资料的一地址;及
至少一第一比较器,与该输入端连结,用以对该地址和在该储存元件的该第一子集所快取的该资料中的一个或多个地址进行比较,其中,若根据比较结果该地址命中于该第一子集,该快取存储器将于一第一时脉周期数中,从该第一子集提供该来源资料;且若根据比较结果该地址未命中于该第一子集时,该快取存储器将于一第二时脉周期数中,提供该来源资料,其中该第一时脉周期数和该第二时脉周期数不相同。
7.如权利要求6所述的可变延滞时间堆栈快取存储器,其特征是,若经该比较,该地址未命中于该第一子集,且若该地址命中于该第二子集,则该快取存储器将于一第二时脉周期数中,从该第二子集提供该来源资料。
8.如权利要求6所述的可变延滞时间堆栈快取存储器,其特征是,该地址包含下列可能变化的至少一种:一虚拟地址和一下载指令的一来源地址。
9.如权利要求8所述的可变延滞时间堆栈快取存储器,其特征是,更包含:
一第二输入端,与该复数个储存元件相连结,用以从该快取存储器所指定来的该来源资料中指定一实体地址。
10.如权利要求9所述的可变延滞时间堆栈快取存储器,其特征是,更包含至少一第二比较器,与该第二输入连结,用以对该实体地址和在该储存元件的该第一子集中所快取的该数据的一个或多个实体地址进行比较。
11.如权利要求10所述的可变延滞时间堆栈快取存储器,其特征是,更包含一输出,与该至少一第一和第二比较器连结,用以当该快取存储器根据该比较,从该第一子集提供该来源资料,且该第二至少一比较器显示该实体地址未与任何于该储存元件的该第一子集中所快取的该数据的该一个或多个实体地址相符时,指示一错误状况,其中该比较对该虚拟地址和该储存元件的该第一子集中所快取的该资料的一个或多个地址进行比较。
12.如权利要求6所述的可变延滞时间堆栈快取存储器,其特征是,更包含一第二复数个储存元件,与该第一复数个储存元件连结,用以快取非堆栈资料。
13.如权利要求12所述的可变延滞时间堆栈快取存储器,其特征是,若该地址非命中于该第一复数个储存元件,则该第二复数个储存元件将于一第三时脉期数提供该资料,其中,该第二和第三时脉周期数不相同。
14.如权利要求6所述的可变延滞时间堆栈快取存储器,其特征是,若根据该比较结果该地址未命中于该第一子集,则该快取存储器将根据一实体地址比较的结果,于一第二时脉周期数提供该来源资料。
15.如权利要求6所述的可变延滞时间堆栈快取存储器,其特征是,该第一子集包含下列其中之一:该复数个储存元件的最上层储存元件、该复数个储存元件的最上面两层储存元件和该复数个储存元件的最上面三层储存元件。
16.一种从一具有延滞时间特性的快取存储器提供资料的方法,其特征是,该方法包含:
储存堆栈资料至该快取存储器,其中该储存以后进先出的方式进行;
若一下载数据的一虚拟地址命中于该快取存储器,则于一第一时脉周期数从该快取存储器提供该下载数据;及
若该下载数据的该虚拟地址未命中于该快取存储器,且该下载数据的一实体地址命中于该快取存储器时,则于一第二时脉周期数从该快取存储器提供该下载数据,其中该第一时脉周期数和该第二时脉周期数不相同。
17.如权利要求16所述的方法,其特征是,更包含:
判断该虚拟地址是否命中于该快取存储器的快取列的最上层子集,其中该最上层子集将小于该快取存储器的所有快取列;
其中上述之若一下载数据的一虚拟地址命中于该快取存储器,则于一第一时脉周期数从该快取存储器提供该下载资料的步骤,根据该判断而执行。
18.如权利要求17所述的方法,其特征是,该快取存储器的快取列中的该最上层子集包含与最新被推入的堆栈数据相关的快取列。
19.如权利要求16所述的方法,其特征是,上述之若一下载资料的一虚拟地址命中于该快取存储器,则于一第一时脉周期数从该快取存储器提供该下载数据的步骤,为一臆测操作,且其后将伴随一判断该下载资料的实体地址,是否命中于该快取存储器的操作。
20.如权利要求16所述的方法,其特征是,更包含若该虚拟地址和该实体地址皆未命中于该快取存储器时,于一第三时脉周期数从一非堆栈快取存储器中提供该下载数据,其中该第一时脉周期数和该第三时脉周期数不相同。
21.一种从一具有延滞时间特性的快取存储器提供资料的方法,其特征是,该方法包含:
判断快取存储器资料的请求是否相对应于一取出或下载指令;
若该请求相对应于该取出指令,则于一第一时脉周期数中,提供该资料;及
若该请求相应于该下载指令,则于一第二时脉周期数中,提供该资料,其中该第一时脉周期数和该第二时脉周期数不相同。
22.如权利要求21所述的方法,其特征是,上述之若该请求相对应于该取出指令,则于一第一时脉周期数中,提供该资料的步骤为一臆测操作,且其后将伴随一判断该资料的实体地址是否命中于该快取存储器的操作。
23.如权利要求21所述的方法,其特征是,该下载指令包含下列的至少一种:一明确指定该资料的来源地址的指令和一原有指定该资料的来源地址的指令。
24.如权利要求23所述的方法,其特征是,该取出指令将明确指定出与一堆栈指示值相关联的该资料的该来源地址。
CN200510003692.6A 2004-01-16 2005-01-10 可变延滞时间高速缓冲存储器及提供数据的方法 Active CN1632877B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/759,483 2004-01-16
US10/759,483 US7191291B2 (en) 2003-01-16 2004-01-16 Microprocessor with variable latency stack cache

Publications (2)

Publication Number Publication Date
CN1632877A true CN1632877A (zh) 2005-06-29
CN1632877B CN1632877B (zh) 2011-01-12

Family

ID=34620718

Family Applications (1)

Application Number Title Priority Date Filing Date
CN200510003692.6A Active CN1632877B (zh) 2004-01-16 2005-01-10 可变延滞时间高速缓冲存储器及提供数据的方法

Country Status (5)

Country Link
US (1) US7191291B2 (zh)
EP (2) EP2101267B1 (zh)
CN (1) CN1632877B (zh)
DE (1) DE602004024024D1 (zh)
TW (1) TWI294590B (zh)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100377115C (zh) * 2005-11-11 2008-03-26 中国科学院计算技术研究所 适用于上下文切换的栈高速缓冲存储器及缓冲存储方法
CN104699627A (zh) * 2013-12-06 2015-06-10 上海芯豪微电子有限公司 一种缓存系统和方法
WO2016097795A1 (en) * 2014-12-14 2016-06-23 Via Alliance Semiconductor Co., Ltd. Multi-mode set associative cache memory dynamically configurable to selectively allocate into all or subset or tis ways depending on mode
CN106557304A (zh) * 2015-09-30 2017-04-05 想象技术有限公司 用于预测子程序返回指令的目标的取指单元
US9798668B2 (en) 2014-12-14 2017-10-24 Via Alliance Semiconductor Co., Ltd. Multi-mode set associative cache memory dynamically configurable to selectively select one or a plurality of its sets depending upon the mode
US10698827B2 (en) 2014-12-14 2020-06-30 Via Alliance Semiconductor Co., Ltd. Dynamic cache replacement way selection based on address tag bits
CN114333930A (zh) * 2021-12-23 2022-04-12 合肥兆芯电子有限公司 多通道存储器存储装置、控制电路单元及其数据读取方法

Families Citing this family (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7870542B1 (en) * 2006-04-05 2011-01-11 Mcafee, Inc. Calling system, method and computer program product
US8533778B1 (en) * 2006-06-23 2013-09-10 Mcafee, Inc. System, method and computer program product for detecting unwanted effects utilizing a virtual machine
US7937533B2 (en) * 2007-12-10 2011-05-03 International Business Machines Corporation Structure for handling data requests
US9053031B2 (en) * 2007-12-10 2015-06-09 International Business Machines Corporation System and method for handling data access
US8032713B2 (en) * 2007-12-10 2011-10-04 International Business Machines Corporation Structure for handling data access
US7949830B2 (en) * 2007-12-10 2011-05-24 International Business Machines Corporation System and method for handling data requests
CN108874693B (zh) 2011-01-27 2022-09-23 英特尔公司 使用处理器的转换后备缓冲器的基于客户指令到本机指令范围的映射
WO2012103245A2 (en) 2011-01-27 2012-08-02 Soft Machines Inc. Guest instruction block with near branching and far branching sequence construction to native instruction block
WO2012103367A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Guest to native block address mappings and management of native code storage
WO2012103359A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Hardware acceleration components for translating guest instructions to native instructions
WO2012103373A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Variable caching structure for managing physical storage
WO2012103253A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Multilevel conversion table cache for translating guest instructions to native instructions
US20130222422A1 (en) * 2012-02-29 2013-08-29 Mediatek Inc. Data buffering apparatus capable of alternately transmitting stored partial data of input images merged in one merged image to image/video processing device and related data buffering method
US9348385B2 (en) 2012-07-09 2016-05-24 L. Pierre deRochement Hybrid computing module
WO2014151652A1 (en) 2013-03-15 2014-09-25 Soft Machines Inc Method and apparatus to allow early dependency resolution and data forwarding in a microprocessor
CN105122206B (zh) 2013-03-15 2018-11-09 英特尔公司 用于支持推测的访客返回地址栈仿真的方法和装置
GB2518912B (en) * 2014-01-17 2015-08-26 Imagination Tech Ltd Stack pointer value prediction
US9646154B2 (en) * 2014-12-12 2017-05-09 Microsoft Technology Licensing, Llc Return oriented programming (ROP) attack protection
US10275356B2 (en) * 2015-12-11 2019-04-30 Quanta Computer Inc. Component carrier with converter board
US20230101038A1 (en) * 2021-09-29 2023-03-30 Advanced Micro Devices, Inc. Deterministic mixed latency cache
GB2622286A (en) * 2022-09-02 2024-03-13 Advanced Risc Mach Ltd Synchronization of load/store operations

Family Cites Families (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3401376A (en) * 1965-11-26 1968-09-10 Burroughs Corp Central processor
US3810117A (en) * 1972-10-20 1974-05-07 Ibm Stack mechanism for a data processor
US5043870A (en) 1982-02-24 1991-08-27 At&T Bell Laboratories Computer with automatic mapping of memory contents into machine registers during program execution
GB2260429B (en) 1991-10-11 1995-05-24 Intel Corp Versatile cache memory
US5500950A (en) 1993-01-29 1996-03-19 Motorola, Inc. Data processor with speculative data transfer and address-free retry
US6151661A (en) 1994-03-03 2000-11-21 International Business Machines Corporation Cache memory storage space management system and method
US5751990A (en) 1994-04-26 1998-05-12 International Business Machines Corporation Abridged virtual address cache directory
KR970029072A (ko) 1995-11-17 1997-06-26 김주용 이중 디렉토리 가상 캐쉬 및 그 제어 방법
US6038643A (en) * 1996-01-24 2000-03-14 Sun Microsystems, Inc. Stack management unit and method for a processor having a stack
DE69734399D1 (de) 1996-01-24 2006-03-02 Sun Microsystems Inc Verfahren und vorrichtung zur stapel-cachespeicherung
US5930820A (en) * 1996-03-18 1999-07-27 Advanced Micro Devices, Inc. Data cache and method using a stack memory for storing stack data separate from cache line storage
US5835968A (en) 1996-04-17 1998-11-10 Advanced Micro Devices, Inc. Apparatus for providing memory and register operands concurrently to functional units
US5953741A (en) 1996-11-27 1999-09-14 Vlsi Technology, Inc. Stack cache for stack-based processor and method thereof
US5956752A (en) * 1996-12-16 1999-09-21 Intel Corporation Method and apparatus for accessing a cache using index prediction
US6009499A (en) 1997-03-31 1999-12-28 Sun Microsystems, Inc Pipelined stack caching circuit
JPH11212788A (ja) 1998-01-28 1999-08-06 Toshiba Corp プロセッサのデータ供給装置
US6275903B1 (en) 1998-04-22 2001-08-14 Sun Microsystems, Inc. Stack cache miss handling
US6496902B1 (en) 1998-12-31 2002-12-17 Cray Inc. Vector and scalar data cache for a vector multiprocessor
US6425055B1 (en) * 1999-02-24 2002-07-23 Intel Corporation Way-predicting cache memory
US6622211B2 (en) 2001-08-15 2003-09-16 Ip-First, L.L.C. Virtual set cache that redirects store data to correct virtual set to avoid virtual set store miss penalty
TW556212B (en) 2002-01-14 2003-10-01 Ip First Llc L2 cache LRU generation method and apparatus
US6671196B2 (en) * 2002-02-28 2003-12-30 Sun Microsystems, Inc. Register stack in cache memory
US7467377B2 (en) 2002-10-22 2008-12-16 Intel Corporation Methods and apparatus for compiler managed first cache bypassing
US7203798B2 (en) 2003-03-20 2007-04-10 Matsushita Electric Industrial Co., Ltd. Data memory cache unit and data memory cache system

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100377115C (zh) * 2005-11-11 2008-03-26 中国科学院计算技术研究所 适用于上下文切换的栈高速缓冲存储器及缓冲存储方法
CN104699627A (zh) * 2013-12-06 2015-06-10 上海芯豪微电子有限公司 一种缓存系统和方法
CN104699627B (zh) * 2013-12-06 2019-05-07 上海芯豪微电子有限公司 一种缓存系统和方法
WO2016097795A1 (en) * 2014-12-14 2016-06-23 Via Alliance Semiconductor Co., Ltd. Multi-mode set associative cache memory dynamically configurable to selectively allocate into all or subset or tis ways depending on mode
US9798668B2 (en) 2014-12-14 2017-10-24 Via Alliance Semiconductor Co., Ltd. Multi-mode set associative cache memory dynamically configurable to selectively select one or a plurality of its sets depending upon the mode
US10698827B2 (en) 2014-12-14 2020-06-30 Via Alliance Semiconductor Co., Ltd. Dynamic cache replacement way selection based on address tag bits
US10719434B2 (en) 2014-12-14 2020-07-21 Via Alliance Semiconductors Co., Ltd. Multi-mode set associative cache memory dynamically configurable to selectively allocate into all or a subset of its ways depending on the mode
CN106557304A (zh) * 2015-09-30 2017-04-05 想象技术有限公司 用于预测子程序返回指令的目标的取指单元
CN106557304B (zh) * 2015-09-30 2022-02-18 美普思技术有限责任公司 用于预测子程序返回指令的目标的取指单元
CN114333930A (zh) * 2021-12-23 2022-04-12 合肥兆芯电子有限公司 多通道存储器存储装置、控制电路单元及其数据读取方法
CN114333930B (zh) * 2021-12-23 2024-03-08 合肥兆芯电子有限公司 多通道存储器存储装置、控制电路单元及其数据读取方法

Also Published As

Publication number Publication date
EP1555617A3 (en) 2006-06-07
EP2101267B1 (en) 2013-10-09
TW200525431A (en) 2005-08-01
US20040162947A1 (en) 2004-08-19
US7191291B2 (en) 2007-03-13
TWI294590B (en) 2008-03-11
EP2101267A2 (en) 2009-09-16
EP1555617A2 (en) 2005-07-20
DE602004024024D1 (de) 2009-12-24
EP2101267A3 (en) 2009-11-04
CN1632877B (zh) 2011-01-12
EP1555617B1 (en) 2009-11-11

Similar Documents

Publication Publication Date Title
CN1632877A (zh) 可变延滞时间堆栈快取存储器及提供资料的方法
CN1303536C (zh) 执行自高速缓存的快速推测式加载运算的微处理器及方法
CN1217262C (zh) 假想分支目标地址高速缓存中置换目标地址的装置及方法
CN1260646C (zh) 附有第二预测装置的假想分支目标地址高速缓存
CN1257452C (zh) 假想分支目标地址高速缓存分支的装置、系统及方法
CN1220938C (zh) 双调用/返回堆栈分支预测系统
CN1260645C (zh) 假想混合分支方向预测装置和方法
CN1217271C (zh) 假想分支目标地址高速缓存
CN1934543A (zh) 高速缓冲存储器及其控制方法
CN1641567A (zh) 自堆栈快取存储器进行快速推测性弹出操作方法及装置
CN1641607A (zh) 页表中维护性能监测结构用于监测程序性能的方法和设备
CN100342326C (zh) 多线程处理器和操作处理器的方法
CN1269030C (zh) 高速缓存的快取线选取目标地址的装置及方法
CN1186729C (zh) 从虚地址计算页表索引的方法和装置
CN1629801A (zh) 产生早期指令结果的管线式微处理器、装置以及方法
CN1387641A (zh) 并行处理器中的多线程执行
CN1658154A (zh) 早期修正分支指令预测错误的管线微处理器装置与方法
CN1387644A (zh) 并行处理器体系结构的sdram控制器
CN1742257A (zh) 基于识别寻址模式的双目的寄存器的数据预测机制
CN1625731A (zh) 具有多种长度指令集体系结构的可配置数据处理器
CN1664777A (zh) 用于控制信息处理设备的内部状态的装置和方法
CN1991798A (zh) 半导体存储装置
CN1898654A (zh) 高速缓冲存储器及其控制方法
CN1114153C (zh) 支持程序编码长度减小的微处理器
CN1821953A (zh) 可变群组组合分支目标地址快取传送每一快取列多目标地址

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant