CN1632877B - 可变延滞时间高速缓冲存储器及提供数据的方法 - Google Patents
可变延滞时间高速缓冲存储器及提供数据的方法 Download PDFInfo
- Publication number
- CN1632877B CN1632877B CN200510003692.6A CN200510003692A CN1632877B CN 1632877 B CN1632877 B CN 1632877B CN 200510003692 A CN200510003692 A CN 200510003692A CN 1632877 B CN1632877 B CN 1632877B
- Authority
- CN
- China
- Prior art keywords
- data
- cache memory
- instruction
- storehouse
- signal
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 151
- 230000015654 memory Effects 0.000 claims abstract description 457
- 238000003860 storage Methods 0.000 claims abstract description 146
- 239000000872 buffer Substances 0.000 claims description 29
- 230000000052 comparative effect Effects 0.000 claims description 5
- 241001269238 Data Species 0.000 claims description 3
- 230000008676 import Effects 0.000 claims description 2
- 230000008569 process Effects 0.000 description 124
- 238000010586 diagram Methods 0.000 description 39
- 238000001693 membrane extraction with a sorbent interface Methods 0.000 description 37
- 230000009471 action Effects 0.000 description 20
- 230000006870 function Effects 0.000 description 13
- 238000007689 inspection Methods 0.000 description 13
- 230000002159 abnormal effect Effects 0.000 description 8
- 238000012545 processing Methods 0.000 description 8
- 230000008859 change Effects 0.000 description 7
- 230000005856 abnormality Effects 0.000 description 6
- 239000000654 additive Substances 0.000 description 5
- 230000000996 additive effect Effects 0.000 description 5
- 230000007423 decrease Effects 0.000 description 5
- 230000003247 decreasing effect Effects 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 5
- 230000008901 benefit Effects 0.000 description 4
- 238000013519 translation Methods 0.000 description 4
- 230000014616 translation Effects 0.000 description 4
- 230000001419 dependent effect Effects 0.000 description 3
- 238000004590 computer program Methods 0.000 description 2
- 230000009977 dual effect Effects 0.000 description 2
- 238000000605 extraction Methods 0.000 description 2
- 230000014759 maintenance of location Effects 0.000 description 2
- 239000011159 matrix material Substances 0.000 description 2
- 210000001367 artery Anatomy 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000000739 chaotic effect Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000012790 confirmation Methods 0.000 description 1
- 230000005574 cross-species transmission Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000035876 healing Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 239000003550 marker Substances 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 210000003462 vein Anatomy 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/30134—Register stacks; shift registers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0875—Addressing 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1027—Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
- G06F12/1045—Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB] associated with a data cache
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30043—LOAD or STORE instructions; Clear instruction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3824—Operand accessing
- G06F9/383—Operand prefetching
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative 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 VariableLatency Stack 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)或缓存区块(cache blocks)中。高速缓存线为高速缓存数据,其可于高速缓冲存储器和系统存储器间传递的最小单元,例如高速缓存线可以是大小为64字节(bytes)。当存储器读取指令发生高速缓存未中命(cache miss)的情形时,整个与未命中地址(missing address)有关连的高速缓存线将被提取至高速缓冲存储器中,而非仅提取存储器读取指令所需的数据。随后,另一存储器读取指令所需的数据若在此相同的高速缓存线时,则此存储器读取指令可很快地被执行完成;因为,其数据可从高速缓冲存储器直接存取,而不需由系统存储器存取。
此外,当执行存储器写入指令,如执行储存指令或推入指令时,若存储器写入地址恰命中于高速缓冲存储器内,则数据将可立即地写入高速缓冲存储器的高速缓存线中,藉此让欲写入系统存储器的数据先被放置在高速缓存线中,即允许数据延迟写入系统存储器中。之后,高速缓存线存储器将此高速缓存线写入系统存储器中,以产生空间给新的高速缓存线。此种操作方式通常被视为是一回写操作。此外,当存储器写入地址未命中于高速缓冲存储器时,有些高速缓冲存储器亦将配置(allocate)一登入口(entry)于高速缓冲存储器上;亦即,高速缓冲存储器将在其一登入口执行一旧高速缓存线的回写操作,并将与系统存储器写入地址有关的新高速缓存线,加载之前旧的高速缓存线所占据的高速缓冲存储器登入口中。此操作一般被视为一写入配置操作。
从上述知,具高执行效率的高速缓冲存储器将可大幅改善微处理器的执行效能。影响高速缓冲存储器效率的两个主要因素分别为,高速缓冲存储器的命中率和高速缓冲存储器的存取时间。高速缓冲存储器的命中率指缓存命中次数与未中次数的总和中,命中次数所占的比例;而存取时间则指从高速缓冲存储器读出或写入指定数据所需花费的微处理器核心时钟周期数(the number of processor core clock cycles)。影响缓存命中率(cache hit rate)最主要的原因是高速缓冲存储器的容量大小,亦即指能储存于高速缓冲存储器中的数据字节数。高速缓冲存储器的容量越大,能储存的系统存储器的数据子集(subset)数也越多,因此,与指令地址具有关联性的高速缓存线,将更有可能存在于高速缓冲存储器中,根据此理由,高速缓冲存储器有需增加其容量大小的必要性。过去,由于微处理器所能释出供予高速缓冲存储器建置于中的物理空间有限,因此高速缓冲存储器的大小亦受到限制。然而,随着电子元件的几何大小逐渐地微小化,此项限制也跟着日渐严格。
此外,高速缓冲存储器的大小亦影响到传统的高速缓冲存储器的存取时间。不幸的是,愈大的高速缓冲存储器其存取时间将比体积较小的高速缓冲存储器来得慢。这是因为传统高速缓冲存储器为随机存取存储器,亦即当高速缓冲存储器容量变大的同时,亦需要花较多的时间去存取在高速缓冲存储器中的每一高速缓存线。数据在高速缓冲存储器中所可能存放的位置总数愈多,就愈需要复杂的电路及电路元件用以存放这些由存储器地址所指定的数据。所幸,随着电子元件的几何体积逐渐缩小化,相对地减少了高速缓冲存储器的存取时间,并且补偿了高速缓冲存储器因体积变大所带来的负面影响。
然而一直以来,微处理器的时钟频率(clock frequency)一向不断地被要求提高,换言之,微处理器的时钟周期时间必须减少,亦即暗示着存取高速缓冲存储器的周期总次数将变得更多。其结果造成在微处理器里,倾向采用体积较小的高速缓冲存储器,特别是Level-1(L1)型的高速缓冲存储器,例如所采用的高速缓冲存储器,已从中具有16KB的L1型高速缓冲存储器,减为只有8KB的L1型高速缓冲存储器。尽管高速缓冲存储器的容量的缩小会带来其相对应的问题,然而会采取此做法,并不是因为受限于微处理器所能容纳的空间不够,迫使高速缓冲存储器的体积必须缩小;而是因为微处理器的核心时钟周期时间日益趋短,以致强迫高速缓冲存储器的大小必须减小。
鉴于上述,为了进一步强化微处里器与高速缓冲存储器的使用效率,亟待必需增加大体积的高速缓冲存储器,或减少高速缓冲存储器的存取时间,亦或两者同时进行。
发明内容
本发明的目的是提出一可变延滞时间高速缓冲存储器(variablelatency cache memory),其包含复数个以后进先出(last-in-first-out,LIFO)的方式储存堆栈存储数据(stack memory data)的储存元件(storageelements)。另一方面,此高速缓冲存储器能区分,取出指令和下载指令相对应的所需数据。高速缓冲存储器推测取出数据将位于顶层高速缓存线,并于第一时钟周期数中,从顶层高速缓存线提供取出数据;而于第二时钟周期数中,从高速缓冲存储器的任一高速缓存线提供下载数据,其中,第一时钟周期数将少于第二时钟周期数。换言之,取出数据将比下载数据更快被提供,因为取出数据在执行一地址比较之前,即被提供,其中,此地址比较用以侦测此取出数据是否实际存在于此顶层高速缓存线中。反之,下载数据则是在地址比较执行完成后才被提出。
另一方面,高速缓冲存储器亦包含了大致与堆栈高速缓冲存储器平线动作的非堆栈高速缓冲存储器。非堆栈高速缓冲存储器设置做为一随机存取高速缓冲存储器,而非一后进先出(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堆栈高速缓冲存储器 126L1数据高速缓冲存储器
128微码存储器 132处理器总线
152堆栈指示寄存器 202MESI
204地址标签 206数据高速缓存线
302控制逻辑 304算术单元
306地址产生器 308TLB
312比较器 314比较器
316多工器 318多工器
322fp_offset 324回写缓冲器
326多工器 402多工器
404多工器 406多工器
408多工器 412多工器
502~524流程步骤方块 602~628流程步骤方块
702~708流程步骤方块 802~848流程步骤方块
902~928流程步骤方块 1400微处理器
1402L1数据高速缓冲存储器 1502控制逻辑
1504储存元阵列 1506列译码器
1508检验逻辑 1512多工器
1514堆栈最上层 1516堆栈fp_row 1516
1524线选取产生器 1526多工器
1528多工器 1532堆栈最上层
1534fp_row堆栈1534 1602~1624流程步骤方块
1702~1732流程步骤方块 1802~1808流程步骤方块
具体实施方式
一般而言,程序通常将系统存储器分离为两部分:一堆栈区和一非堆栈区,本发明即基于此事实而提出。非堆栈区通常亦被称为堆置(heap)区。堆栈(stack)和堆置(heap)主要的差异在于堆置是以随机存取的方式被存取;而堆栈一般则以后进先出(LIFO)的操作方式。两者之间另外的不同点为,对其进行(或执行)读取或写入指令的指示读取或写入地址的方式。一般而言,对堆置从事读取或写入的指令,通常会明确指定存储器地址。反之,对堆栈执行读取或写入的指令,则通常间接通过微处理器中的一特别寄存器以指示其存储器地址,其中此特别寄存器一般指堆栈指示寄存器。推入指令根据将被推入堆栈区的数据大小,以更新堆栈指示寄存器,然后将数据由微处理器的一寄存器储存到记录于更新后的堆栈指示寄存器的存储器地址。例如在x86的计算机内部结构中,推入指令(如PUSH、CALL(呼叫)或ENTER(输入)等指令)通过将被推入的数据大小,缩减堆栈指示寄存器(例如,若数据为双字语(dword)即减少4字节(byes)),然后储存数据到堆栈区中,更新后的堆栈指示寄存器所指示的记忆地址中。相反地,取出指令(pop instruction)在储存于堆栈指示寄存器的地址,读取数据,并下载数据至一微处理器的寄存器,然后根据从堆栈区取出(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等。此外,此指令集更包含一用以从存储器中下载数据及将数据存入存储器的指令,例如一x86MOV指令。然而,本发明并非仅限于x86计算机微处理器或x86的指令集。
微处理器100亦包含一寄存器档案(register file)112。寄存器档案112包含复数个用以储存微处理器100的操作数和状态信息的寄存器。在一实施例中,寄存器档案112包含:一般目的的寄存器(generalpurpose registers)、程序段地址寄存器(address segment registers)、索引寄存器(index registers)、状态和控制寄存器(status and control registers)、指令指示寄存器(instruction pointer register)和程序计数寄存器(programcounter register)。在一实施例中,寄存器档案112包含至少一x86微处理器中的使用者可见(user-visible)的寄存器集(register set)。此外,寄存器档案112包含一堆栈指示寄存器(stack pointer register)152用以储存系统存储器中堆栈数据的顶层地址。在一实施例中,堆栈指示寄存器152大致上与x86中的ESP寄存器相似。
微处理器100亦包含一指令高速缓冲存储器(instructioncache)102,用以快速存取指令字节(instruction bytes)的高速缓存线(cache lines)。在一实施例中,指令高速缓冲存储器102包含一level-1(L1)高速缓冲存储器(L1 cache)。指令高速缓冲存储器102存取从与微处理器100相连接的系统存储器(system memory)中读取出的指令,例如推入或取出指令。推入和取出指令则根据堆栈指示寄存器152中顶层(或称最上层)的堆栈地址(stack address),间接存取系统存储器中的一堆栈数据。
微处理器100亦包含一总线介面单元(bus interface unit)118,其连接于指令高速缓冲存储器102。总线介面单元118并连接一处理器总线(processor bus)132,其中处理器总线用以将微处理器100与系统存储器做连接。总线介面单元118将微处理器中100不同的功能单元(functionunits)与微处理器总线132连结。举例来说,总线介面单元118可从系统存储器中取出指令至指令高速缓冲存储器102。此外,总线介面单元118亦可在系统存储器中读出或写入数据,例如,在系统存储器中其最上层为被堆栈指示寄存器152所指定的堆栈数据。
如图1所示,微处理器100亦包含一与指令高速缓冲存储器102连结的指令提取器(instruction fetcher)104。指令提取器104将从指令高速缓冲存储器102中取出指令。指令提取器104将持续取出下一个由寄存器档案112的指令指示寄存器所指定的指令;除非遇到一程控改变事件(program control change event),例如一分支指令(branchinstruction),则此时指令提取器104开始在分支指令的目标地址(targetaddress)上抓取相关指令;或除非是在遇到一异常(exception)情况下,则指令提取器104将因应此一特殊异常其况,开始抓取异常处理程序(exception handler 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的其它配置单元包含用以执行微指令的精简指令集计算机核心(reduced instruction-setcomputer 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)和一储存单元(store unit)。下载单元执行由系统存储器下载数据至微处理器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高速缓冲存储器亦可作为一收容高速缓冲存储器(victimcache),用以接收从L1数据高速缓冲存储器126(包含非堆栈高速缓冲存储器122和堆栈高速缓冲存储器124)被送出的高速缓存线;另一方面,L1数据高速缓冲存储器126则可从L2高速缓冲存储器填充高速缓存线。
参考图2,用以说明根据本发明图1的堆栈高速缓冲存储器124的方块图。堆栈高速缓冲存储器124包含复数个储存元件(storageelements)所构成的一堆栈或后进先出(LIFO)存储器。因堆栈高速缓冲存储器124为一堆栈或LIFO存储器,故其不致与系统存储器中的堆栈混淆,其中,系统存储器中的堆栈的顶层被堆栈指示寄存器152内的相关值所指定。此外,堆栈高速缓冲存储器124用以缓存系统存储器的堆栈的数据。
图2的实施例中,包含16个储存元件(storage elements)或入口(entries),并以0到15标记的。最上层的入口标记为入口0,而最底层的入口则标记为入口15。然而,在本发明中所提出的堆栈高速缓冲存储器124中的入口总数量并不限制在堆栈高速缓冲存储器124中入口的数量。每一入口包含一储存空间分别提供数据高速缓存线(cacheline)206、高速缓存线206的地址标签(address tag)204和高速缓存线206的缓存状态(cache status)202容置于中。在一实施例中,缓存状态202包含的状态大致与熟知的MESI(Modified,Exclusive,Shared,Invalid)的缓存同调状态值(cache coherency state values)一致。在一实施例中,高速缓存线206包含大小为64字节的数据。在一实施例中,标签204包含此高速缓存线206的物理地址(physical address)。
在一实施例中,标签204包含高速缓存线206物理地址的最上层明显的位,用以指明高速缓存线206。在一实施例中,微处理器100包含一存储器分页系统(memory paging system)用以将虚拟存储器地址(virtual memory address)转换为物理存储器地址,且其标签204亦包含了高速缓存线206的虚拟地址。在一实施例中,虚拟地址包含一虚拟地址位的散列(hash),用以减少用来储存虚拟位置所需的空间总量。利用标签204的虚拟地址部分来执行从堆栈高速缓冲存储器124的推测下载(speculative load)动作将于底下详细说明。
如图2所示,堆栈高速缓冲存储器124通过信号sc_write_MESI 212接收新的缓存状态,并存入最上层入口的MESI区域202中;并通过信号sc_write_tag214接收新的标签,并将其存入最上层入口的标签区域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 ordouble-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的一堆栈指示寄存器加法指令,例如一x86ADD指令。在一实施例中,加法微指令(add macroinstruction)增加一立即值(immediate value)至堆栈指示寄存器152,例如一ADD ESP,imm指令。
堆栈高速缓冲存储器124亦包含一地址产生器(addressgenerator)306。地址产生器306从图1的寄存器档案112接收操作数,例如基础值(base values)、偏差值(offsets)和存储器描述值(memorydescriptor values),并根据该等接收到的值产生一虚拟地址(virtualaddress)334。虚拟地址334对系统存储器进行存取动作指令的虚拟存储器地址,例如推入、取出、下载或储存指令的虚拟存储器地址。以下载指令而言,虚拟地址334为下载数据的虚拟来源地址(virtual sourceaddress)。以储存指令而言,虚拟地址334为储存数据的虚拟目的地址(virtual destination address)。以取出指令而言,虚拟地址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中的其一信号的虚拟地址部分的值相符合。在一实施例中虚拟标签tag 204为一虚拟地址位的散列(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_val 394由图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提供数据给一推测下载(speculative load)。多工器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的指令指示寄存器中;若取出指令为一x86LEAVE指令,则取出数据将被下载至寄存器档案112的x86的EBP中;若取出指令为一x86POP指令,则取出数据将被下载至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的寄存器所获得。例如,若推入指令为一x86CALL指令,则堆入数据为由寄存器档案112的指令指示寄存器(instruction pointer register)所计算出的下一笔指令指示内容;若推入指令为一x86ENTER指令,则推入数据为寄存器档案112的x86EBP寄存器中的值;若推入指令为一x86PUSH指令,则推入数据为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)的函数之前,此呼叫函数(callingfunction)将执行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 decode operation),因此无形中将可节省一时钟周期(clock cycle)。
另外,在一实施例中,推测下载无形中节省一额外的时钟周期,其通过利用下载指令的虚拟地址334而非物理地址336,将其与堆栈标签比较看是否下载数据目前位于最上层的两个入口而达成。若虚拟地址符合最上方两入口其中之一,则表示下载数据目前将很有可能位于此入口,虽然因虚拟地址为一替换地址(aliasing address),而无法百分之百确定。在微处理器100的一实施例的推测下载操作中,堆栈高速缓冲存储器124之所以提供不正确的下载数据,其因为操作系统的任务切换(task switch)时,将可能更新存储器分页数据(paginginformation),因而使得虚拟地址无法匹配。在一实施例中,特别是使用堆栈地址区段寄存器(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_hit 389产生一真值,并将其提供至执行单元114的下载单元中。接着,流程来到方块814。
在方块814中,TLB 308产生下载指令的来源物理地址336。接着,流程来到方块816。
在方块816中,图3中两个比较器314将对产生于方块814的物理地址336与方块812中所提供的下载数据的实体标签sc_tag[1:0]204做一比较,以产生图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]204进行比较,以产生信号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 decodeof the index portion)动作,以选取一列(row)或线组(set of ways)。接着,流程来到方块836。
在方块836中,非堆栈高速缓冲存储器122将对产生于方块824的物理地址336的上层部分(或标签)和方块834中所选取的每一线组(set of ways)的物理地址标签进行比较。接着,流程来到决定方块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]204进行比较,以产生信号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的双字语偏移(dwordoffset),以被存入至方块912中所判断的堆栈高速缓冲存储器124内的一正确相符入口中。若有需要,最上层入口的MESI状态202将可经由信号sc_write_MESI 212进行更新,例如,更新一正确的Modified值。储存数据从储存指令所指定的寄存器或存储器的地址获得。例如,若储存指令x86MOV指令指定一目标寄存器做为储存数据的来源地址时,则表此指令的储存数据将位于寄存器档案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_data 398选取一fp_data数据。此外,堆栈高速缓冲存储器124将通过信号sc_hit 389,把取出指令的命中情形告知下载单元,亦即,堆栈高速缓冲存储器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可以比已知技术快上数个多重时钟周期(multiple clock 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_sel393从高速缓存线数据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 latencyvariation)依指令读取堆栈高速缓冲存储器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_val394、堆栈指示寄存器位[5:2]152、输出信号372和信号fp_offset396。上述的元件其功能与图3中所对应相似标号的元件功能相同,至于其它不同的处将于底下说明的。数据高速缓冲存储器1402亦包含一控制逻辑1502,其功能相似于图3的控制逻辑302。控制逻辑1502与控制逻辑302的功能相似且包含:接收信号push_instr 342、信号pop_instr 344和信号add_sp_instr 352;产生多工器选择信号368;以及当侦查到一不正确的快速取出操作时,控制逻辑1502将产生异常信号399。至于其它与图3控制逻辑302不同的处亦将于底下说明的。
数据高速缓冲存储器1402亦包,用以储存复数个高速缓存线(cache lines)的一储存元件阵列(a storage element array)1504、每一高速缓存线的地址标签(address tag)和每一高速缓存线的缓存状态(cachestatus),如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输出。在图15的实施例中,四个高速缓存线中每一高速缓存线包含了16个双字语,且其将伴随着其所对应配置的标签1574和MESI状态的正确位1576输出于信号1594。
数据高速缓冲存储器1402亦包含一与储存元阵列1504连结且具有4个输入口的多工器1528。多工器1528透过其4个输入口,分别接收储存元阵列1504的4个高速缓存线输出信号1594。多工器1528将依据一控制用输入信号1596选取其中一高速缓存线,并输出至信号1592。此被选取的高速缓存线信号1592提供至多工器318,然后再依据信号fp_offset 396提供一双字语至总线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_row1554将指明出储存元阵列1504中一存有最新推入指令所需数据的高速缓存线,详细情形将于之后配合图17描述。此外,通过此储存包含有最新推入指令所需数据线的操作,将使数据高速缓冲存储器1402得以执行一快速取出操作,详细情形亦将于之后说明的。堆栈fp_row 1516亦从控制逻辑1502接收一信号push_row1562。当控制逻辑1502确认信号push_row1562的真值后,堆栈fp_row1561将被向下推移一入口,亦即,底层入口将被推移出堆栈fp_row1516,而剩余的每一入口将立即接收其本身上一入口的值,且信号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为真值,则多工器1513将选取信号fp_row 1556做为输出,以供列信号1552并传送至列编译器1506;若信号fast_pop 1564非真,则多工器将选取索引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所提供的最新被推入的线值(way value);亦即,信号new_way 1582可指定出储存元阵列1504中信号new_row1554所指定的线中的线,其中信号new_row 1554所指定的线储存了一包含最新堆入指令数据的高速缓存线,详细情形将于之后配合图17说明。通过此储存一包含最新推入数据的线的动作,将使得数据高速缓冲存储器1402得以执行一如之后所述的快速取出操作。堆栈fp_way1534亦从控制逻辑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_way1534和堆栈fp_row1516的每一入口将包含一正确位,且信号fast_pop1564将伴随着上层入口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_offset396、标签信号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_way1584所指定的线的正确位1576进行确认,以显示快速取出操作中被存取的高速缓存线为一正确的高速缓存线。若高速缓存线为不正确或正确的高速缓存线没有被存取到,则检验逻辑1508将在信号fp_check1544产生一伪值(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中的一取出指令所指定的寄存器。例如,若取出指令为一x86RET指令,则取出数据将被下载至寄存器档案112的指令指示寄存器;若取出指令为一x86LEAVE指令,则取出数据将被下载至寄存器档案112的x86EBP中;若取出指令为一x86POP指令,则取出数据将被下载至取出指令中所指定的寄存器档案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_way 1534的最上层入口从堆栈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_row1516的最上层入口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_way1582的值推入堆栈fp_way 15334。接着,流程来到方块1724。
在方块1724中,数据高速缓冲存储器1402处理推入指令的方式如一正常推入指令命中于数据高速缓冲存储器1402的处理方式。亦即,在方块1722中,当堆栈fp_row 1516和堆栈fp_way 1534被更新后,数据高速缓冲存储器1402将根据传统习知关于数据高速缓冲存储器的操作方式处理推入指令。接着,流程来到方块1726。
在方块1726中,控制逻辑1502将决定索引1548所选取的储存元阵列1504中的列中的线,并将其以与错失推入地址336相关联的高速缓存线取代的,且此高速缓存线须立即被存取至数据高速缓冲存储器1402中。在一实施例中,控制逻辑1502将选取被选取列中最新被使用的线。且控制逻辑1502将信号new_way 1582提供替代线(replacementway)至堆栈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_way1582所提供的值推入堆栈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_row1516最上层入口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_way1534中取出。如同前面关于方块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 (20)
1.一种可变延滞时间高速缓冲存储器,其特征是,包含:
一第一输入,用以指明一指令要求的形式,以从高速缓冲存储器中读取一要求的来源数据,其中,该指令要求的形式为复数个预先判定的指令形式的其中之一;
复数个第一储存元件,其构成为一后进先出的堆栈存储器,用以高速缓存堆栈数据,所述的第一储存元件与该第一输入连结,用以当该第一输入指明出该复数个预先判定的指令形式中为一快速取出指令形式时,在一第一时钟周期数中,提供该堆栈数据;并当该第一输入指明该复数个预先判定的指令形式中为一推测下载指令形式时,在一第二时钟周期数中,提供该堆栈数据;并当该第一输入指明该复数个预先判定的指令形式中为一正常下载指令形式时,在一第三时钟周期数中,提供该堆栈数据,其中,该第一时钟周期数小于该第二时钟周期数,该第二时钟周期数小于该第三时钟周期数;以及
复数个第二储存元件,与该复数个第一储存元件相连结,用以高速缓存非堆栈数据。
2.如权利要求1所述的可变延滞时间高速缓冲存储器,其特征是,当该第一输入指定该复数个预先判定的指令形式中为该正常下载指令形式时,且该来源数据不存在于该复数个第一储存元件中,该复数个第二储存元件将于一第四时钟周期数中,提供该非堆栈数据,其中该第四时钟周期数大于该第三时钟周期数。
3.如权利要求1所述的可变延滞时间高速缓冲存储器,其特征是,包含:
至少一第一比较器,与该第一输入连结,用以对该来源数据的一地址和在该复数个第一储存元件的一第一子集所缓存的该堆栈数据中的一个或多个地址进行比较,其中,若根据比较结果该来源数据的该地址命中于该第一子集,则该高速缓冲存储器将于该第二时钟周期数中,从该第一子集提供该堆栈数据;
其中,该复数个第一储存元件中更具有一第二子集,其中该第一子集所高速缓存的堆栈数据较该第二子集中所高速缓存的堆栈数据更晚被推入。
4.如权利要求3所述的可变延滞时间高速缓冲存储器,其特征是,若经该比较,该来源数据的该地址未命中于该第一子集,且若该来源数据的该地址命中于该第二子集,则该高速缓冲存储器将于该第三时钟周期数中,从该第二子集提供该堆栈数据。
5.如权利要求3所述的可变延滞时间高速缓冲存储器,其特征是,所述的来源数据的该地址包含一虚拟地址,或是该推测下载指令或该正常下载指令的一来源地址。
6.如权利要求5所述的可变延滞时间高速缓冲存储器,其特征是,更包含:
一第二输入,与该复数个第一储存元件相连结,用以从该高速缓冲存储器所指定的该来源数据中指定一物理地址。
7.如权利要求6所述的可变延滞时间高速缓冲存储器,其特征是,更包含至少一第二比较器,与该第二输入连结,用以对该来源数据的物理地址和在该复数个第一储存元件的该第一子集中所缓存的该堆栈数据的一个或多个物理地址进行比较。
8.如权利要求7所述的可变延滞时间高速缓冲存储器,其特征是,更包含一输出,该输出与至少一第一比较器和第二比较器连结,用以当该高速缓冲存储器根据该比较,从该第一子集提供该堆栈数据,且该至少一第二比较器显示该来源数据的物理地址未与任何于该复数个第一储存元件的该第一子集中所缓存的该堆栈数据的该一个或多个物理地址相符时,指示一错误状况,其中该比较是对该虚拟地址和该复数个第一储存元件的该第一子集中所缓存的该堆栈数据的一个或多个地址进行比较。
9.如权利要求3所述的可变延滞时间高速缓冲存储器,其特征是,若该来源数据的地址非命中于该复数个第一储存元件,则该复数个第二储存元件将于一第四时钟期数提供该非堆栈数据。
10.如权利要求7所述的可变延滞时间高速缓冲存储器,其特征是,若根据该比较的结果该来源数据的地址未命中于该第一子集中该堆栈数据的一个或多个物理地址,则该高速缓冲存储器将根据该比较的结果,于该第三时钟周期数提供该来源数据。
11.如权利要求3所述的可变延滞时间高速缓冲存储器,其特征是,该第一子集包含下列其中之一:该复数个第一储存元件的最上层储存元件、该复数个第一储存元件的最上面两层储存元件和该复数个第一储存元件的最上面三层储存元件。
12.一种从一具有延滞时间特性的高速缓冲存储器提供数据的方法,其特征是,该方法包含:
储存复数个堆栈数据至高速缓冲存储器,其中该储存以后进先出的方式进行;
从所述高速缓冲存储器的一第一输入读取数据;
从所述高速缓冲存储器的一第二输入指定的一来源数据中指定一物理地址;
判断所述高速缓冲存储器的该堆栈数据所提出的请求是否相对应于一快速取出指令、一推测下载指令或一正常下载指令;
若该请求相对应于该快速取出指令,则于一第一时钟周期数中,提供该堆栈数据;
若该请求相对应于该推测下载指令,则于一第二时钟周期数中,提供该堆栈数据,及
若该请求相对应于该正常下载指令,则于一第三时钟周期数中,提供该堆栈数据,其中该第一时钟周期数小于该第二时钟周期数,该第二时钟周期数小于该第三时钟周期数。
13.如权利要求12所述的方法,其特征是,上述若该请求相对应于该快速取出指令,则于该第一时钟周期数中,提供该堆栈数据的步骤称为一推测操作,且其后将伴随一判断该堆栈数据的物理地址是否命中于该高速缓冲存储器的操作。
14.如权利要求12所述的方法,其特征是,所述推测下载指令或正常下载指令包含下列的至少一种:一明确指定一下载数据的来源地址的指令和一原有指定一下载数据的来源地址的指令。
15.如权利要求14所述的方法,其特征是,该快速取出指令将明确指定出与一堆栈指示值相关联的该下载数据的该来源地址。
16.如权利要求14所述的方法,其特征是,该方法更包含:
若该下载数据的一虚拟地址命中于该高速缓冲存储器,则于该第二时钟周期数从该高速缓冲存储器提供该下载数据;及
若该下载数据的该虚拟地址未命中于该高速缓冲存储器,且该下载数据的一物理地址命中于该高速缓冲存储器时,则于该第三时钟周期数从该高速缓冲存储器提供该下载数据。
17.如权利要求16所述的方法,其特征是,更包含:
判断该虚拟地址是否命中于该高速缓冲存储器的高速缓存线的最上层子集,其中该最上层子集将小于该高速缓冲存储器的所有高速缓存线;
其中所述的若该下载数据的一虚拟地址命中于该高速缓冲存储器,则于该第二时钟周期数从该高速缓冲存储器提供该下载数据的步骤,根据该判断而执行。
18.如权利要求17所述的方法,其特征是,该高速缓冲存储器的高速缓存线中的该最上层子集包含与最新被推入的堆栈数据相关的高速缓存线。
19.如权利要求16所述的方法,其特征是,所述的该下载数据的一虚拟地址命中于该高速缓冲存储器,则于该第二时钟周期数从该高速缓冲存储器提供该下载数据的步骤,为一推测操作,且其后将伴随一判断该下载数据的物理地址,是否命中于该高速缓冲存储器的操作。
20.如权利要求16所述的方法,其特征是,更包含若该虚拟地址和该物理地址皆未命中于该高速缓冲存储器时,于一第四时钟周期数从一非堆栈高速缓冲存储器中提供该下载数据,其中该第四时钟周期数大于该第三时钟周期数。
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 CN1632877A (zh) | 2005-06-29 |
CN1632877B true 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 (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106873725A (zh) * | 2015-12-11 | 2017-06-20 | 广达电脑股份有限公司 | 元件承载装置、转换板以及刷新快取存储器的方法 |
Families Citing this family (27)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100377115C (zh) * | 2005-11-11 | 2008-03-26 | 中国科学院计算技术研究所 | 适用于上下文切换的栈高速缓冲存储器及缓冲存储方法 |
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 | 英特尔公司 | 用于支持推测的访客返回地址栈仿真的方法和装置 |
CN104699627B (zh) * | 2013-12-06 | 2019-05-07 | 上海芯豪微电子有限公司 | 一种缓存系统和方法 |
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 |
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 |
EP3129886B1 (en) | 2014-12-14 | 2019-10-02 | VIA Alliance Semiconductor Co., Ltd. | Dynamic cache replacement way selection based on address tag bits |
WO2016097810A1 (en) | 2014-12-14 | 2016-06-23 | 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 mode |
GB2542831B (en) * | 2015-09-30 | 2018-05-30 | Imagination Tech Ltd | Fetch unit for predicting target for subroutine return instructions |
US20230101038A1 (en) * | 2021-09-29 | 2023-03-30 | Advanced Micro Devices, Inc. | Deterministic mixed latency cache |
CN114333930B (zh) * | 2021-12-23 | 2024-03-08 | 合肥兆芯电子有限公司 | 多通道存储器存储装置、控制电路单元及其数据读取方法 |
GB2622286A (en) * | 2022-09-02 | 2024-03-13 | Advanced Risc Mach Ltd | Synchronization of load/store operations |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3810117A (en) * | 1972-10-20 | 1974-05-07 | Ibm | Stack mechanism for a data processor |
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 |
US6038643A (en) * | 1996-01-24 | 2000-03-14 | Sun Microsystems, Inc. | Stack management unit and method for a processor having a stack |
US6425055B1 (en) * | 1999-02-24 | 2002-07-23 | Intel Corporation | Way-predicting cache memory |
Family Cites Families (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3401376A (en) * | 1965-11-26 | 1968-09-10 | Burroughs Corp | Central 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 | 김주용 | 이중 디렉토리 가상 캐쉬 및 그 제어 방법 |
DE69734399D1 (de) | 1996-01-24 | 2006-03-02 | Sun Microsystems Inc | Verfahren und vorrichtung zur stapel-cachespeicherung |
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 |
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 |
-
2004
- 2004-01-16 US US10/759,483 patent/US7191291B2/en active Active
- 2004-08-05 EP EP09159693.2A patent/EP2101267B1/en active Active
- 2004-08-05 EP EP04254724A patent/EP1555617B1/en active Active
- 2004-08-05 DE DE602004024024T patent/DE602004024024D1/de active Active
- 2004-08-06 TW TW093123711A patent/TWI294590B/zh active
-
2005
- 2005-01-10 CN CN200510003692.6A patent/CN1632877B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3810117A (en) * | 1972-10-20 | 1974-05-07 | Ibm | Stack mechanism for a data processor |
US6038643A (en) * | 1996-01-24 | 2000-03-14 | Sun Microsystems, Inc. | Stack management unit and method for a processor having a stack |
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 |
US6425055B1 (en) * | 1999-02-24 | 2002-07-23 | Intel Corporation | Way-predicting cache memory |
Non-Patent Citations (1)
Title |
---|
说明书第6栏56-60行,26-39行,第3栏45-46行,第4栏46-52行,第3栏18-21行,24-26行. |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106873725A (zh) * | 2015-12-11 | 2017-06-20 | 广达电脑股份有限公司 | 元件承载装置、转换板以及刷新快取存储器的方法 |
Also Published As
Publication number | Publication date |
---|---|
EP1555617A3 (en) | 2006-06-07 |
EP2101267B1 (en) | 2013-10-09 |
TW200525431A (en) | 2005-08-01 |
CN1632877A (zh) | 2005-06-29 |
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 |
EP1555617B1 (en) | 2009-11-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1632877B (zh) | 可变延滞时间高速缓冲存储器及提供数据的方法 | |
EP1150213B1 (en) | Data processing system and method | |
US9092343B2 (en) | Data cache virtual hint way prediction, and applications thereof | |
CN101449237B (zh) | 快速和廉价的存储-加载冲突调度和转送机制 | |
CN105183663B (zh) | 预取单元和数据预取方法 | |
KR100880686B1 (ko) | 2개 레벨의 분기 예측 캐시를 갖는 분기 예측 | |
CA1200318A (en) | Central processor | |
CN100390756C (zh) | 一种将储存数据重新导向的虚拟集合高速缓存 | |
US5930832A (en) | Apparatus to guarantee TLB inclusion for store operations | |
US20050268076A1 (en) | Variable group associativity branch target address cache delivering multiple target addresses per cache line | |
CN101013401A (zh) | 用于预取数据线的方法和处理器 | |
US7680985B2 (en) | Method and apparatus for accessing a split cache directory | |
CN101449238A (zh) | 本地和全局分支预测信息存储 | |
US5732243A (en) | Branch processing unit with target cache using low/high banking to support split prefetching | |
US5835949A (en) | Method of identifying and self-modifying code | |
JP2000029701A (ja) | 単一クロック・サイクルに非連続命令を取り出すための方法およびシステム。 | |
WO2008042297A2 (en) | Load/store unit for a processor, and applications thereof | |
US10067875B2 (en) | Processor with instruction cache that performs zero clock retires | |
CN109313554A (zh) | 用于在非均匀计算装置中进行调度的方法和设备 | |
JPH07152561A (ja) | ブランチ処理装置 | |
US5737749A (en) | Method and system for dynamically sharing cache capacity in a microprocessor | |
CN109196489A (zh) | 用于在非均匀计算装置中重排序的方法和设备 | |
US20030182539A1 (en) | Storing execution results of mispredicted paths in a superscalar computer processor | |
EP3321810B1 (en) | Processor with instruction cache that performs zero clock retires | |
Williams | An illustration of the benefits of the MIPS R12000 microprocessor and OCTANE system architecture |
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 |