CN1627252A - 微处理机与随机存取快取记忆体的快速弹出装置及其方法 - Google Patents
微处理机与随机存取快取记忆体的快速弹出装置及其方法 Download PDFInfo
- Publication number
- CN1627252A CN1627252A CN 200510000489 CN200510000489A CN1627252A CN 1627252 A CN1627252 A CN 1627252A CN 200510000489 CN200510000489 CN 200510000489 CN 200510000489 A CN200510000489 A CN 200510000489A CN 1627252 A CN1627252 A CN 1627252A
- Authority
- CN
- China
- Prior art keywords
- instruction
- data
- storehouse
- random access
- cache memory
- 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
Links
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
Abstract
本发明是关于一种微处理机与随机存取快取记忆体的快速弹出装置及其方法,该随机存取快取记忆体的快速弹出装置包括一堆栈以接收存放于快取记忆体的推入(push)指令数据的列与栏。在执行弹出(pop)指令时,此装置使用堆栈最顶端的列与栏数值存取快取记忆体。在一实施例中,会记录顶端的列与栏数值所指定的目前快取线的最近推入数据的位移值(offset)。此位移值在每次执行推入或弹出指令时都会更新。如果弹出指令造成此位移值溢位(overflow),堆栈最顶端的记录单位就会弹出。如果推入指令造成此位移值欠位(underflow),列数值与栏数值会被推入堆栈。上述的列数值、栏数值、与位移值稍后会与真实的弹出位址作比较,以决定猜测提供的数据正确与否。
Description
技术领域
本发明涉及一种微处理机的快取记忆体,特别是涉及一种可分辨堆栈式与非堆栈式记忆体存取的快取记忆体的微处理机与随机存取快取记忆体的快速弹出装置及其方法。
背景技术
微处理机是执行电脑程序(程序即为程式,以下均称为程序)指令的数位装置。典型的电脑系统有一个微处理机,连接到系统记忆体(记忆体即为内存、存储器,以下均称为记忆体),而系统记忆体能储存程序指令以及程序指令要处理的数据(数据即为资料,以下均称为数据)。这种系统在执行时会遇到的一种瓶颈,从系统记忆体读取数据到微处理机,或从微处理机写入数据到系统记忆体所需花费的时间,通常会比微处理机执行处理这些数据的指令所需花费的时间更多。这两种时间通常有十倍,甚至百倍的差距。因此,当在等待记忆体要做读或写的同时,微处理机可能会闲置着。
不过,微处理机的设计者从很久以前就知道,程序都倾向于在一段长时间内只取用一小部分的数据,例如常用的程序变数。这一类程序就是有良好的时间区域性(temporal locality),而这种特性的倾向称为参考区域性原则(locality of reference principle)。为了利用这个原则,现代的微处理机通常有至少一个快取记忆体。快取记忆体,或简称为快取,是在电路上靠近微处理机核心的一小块记忆体,用来暂时储存一小部份数据,而其他数据还是存在容量较大,离微处理机也较远的系统记忆体。快取记忆体是用内含的储存单位(storage element)来储存数据,稍后取出数据时,会比从遥远的系统记忆体取出数据的速度还要快。
当微处理机执行读取记忆体的指令,例如载入(load)指令或弹出(pop)指令时,微处理机会先检查快取记忆体有没有现成的数据,也就是说,读取的位址(位址即为地址,以下均称为位址)有没有“击中”(hit)快取记忆体。如果没有,也就是说,读取的位址“错过”(miss)了快取记忆体,微处理机除了将数据载入微处理机当中受指定的暂存器(暂存器即为缓存器,以下均称为暂存器)之外,还会把数据也存入快取记忆体。现在,数据已经存在于快取记忆体,下一次遇到读取同一笔数据的指令时,就可以从快取记忆体将数据载入暂存器,而不必从系统记忆体读取。由于数据已经存在于快取记忆体,上述的记忆体读取指令几乎可以立即完成。
快取记忆体是以快取线(cache line)或快取区块(cache block)储存数据。快取线是快取记忆体与系统记忆体之间传输数据的最小单位。举例来说,快取线的大小可以是64位元组(byte,位元组即为位组,以下均称为位元组)。当一个记忆体读取指令错过了快取记忆体,读取位址所在的一整个快取线都会被载入快取记忆体,而不仅是载入读取指令所要求的数据。于是,稍后读取同一个快取线数据的读取指令可以很快就执行完毕,因为数据就在快取记忆体中,而不用读取系统记忆体。
此外,当执行记忆体写入指令,例如存放(store)指令或推入(push)指令时,如果写入位址击中快取记忆体,数据就可以直接写入快取线,藉以延缓将数据写入系统记忆体。稍后,快取记忆体会将快取线写入系统记忆体,通常是为了让出空间给新的快取线。上述的程序通常称为写回程序(writeback operation)。除此之外,有些快取记忆体会在记忆体写入位址错过快取记忆体之后更新记录单位(entry)。也就是说,快取记忆体会先写回快取记忆体的一个记录单位当中的一个旧的快取线,然后将写入位址所在的快取线,从系统记忆体载入之前旧的快取线所占据的快取记忆体记录单位当中。上述的程序通常称为写入配置程序(write allocateoperation)。
高效率的快取记忆体可以大幅增进微处理机的效能。影响快取记忆体效率的两个主要因素是快取击中率(cache hit rate)以及快取存取时间(cache access time)。快取记忆体的击中率是快取击中次数除以击中次数与错过次数的总和所得的比率。而存取时间是从快取记忆体读取指定数据,或写入指定数据到快取记忆体,所需要的微处理机核心的时脉周期(clockcycle)数。
影响快取击中率的最大因素是快取记忆体的大小,也就是说,快取记忆体可储存的数据位元(位元即为位,以下均称为位元)数。快取记忆体越大,可储存的系统记忆体数据的子集合就越大,数据所在的快取线就越容易存在于快取记忆体。因此,快取记忆体总是有变大的趋势。传统上,快取记忆体的大小通常受限于微处理机芯片的空间,能分派给快取记忆体的空间有限。但随着电路元件越做越小,这项限制也逐渐消失。
然而,快取记忆体大小也会影响传统快取记忆体的存取时间。不幸的是,快取记忆体越大,通常存取时间也越长。这是因为传统的快取记忆体是随机存取记忆体(random access memory),也就是说,存取快取记忆体之内的任何一个快取线,所需的时间都相同。快取记忆体内可容纳数据的位置越多,电路就会越复杂,需要花费更多的时间才能找到记忆体位址所指定的数据。所幸,电路元件的持续缩小,也缩短了快取存取时间,有助于弥补加大快取记忆体的负面影响。
然而,随着加快微处理机时脉频率(clock frequency)的需求,这样时脉周期会随之缩短,也就需要更多的时脉周期来存取快取记忆体。因此现在有一个趋势是缩小微处理机内部的快取记忆体,特别是第一级(level-1,简称为L1)快取记忆体。举例而言,Pentium 4的第一级快取记忆体只有8KB,相比之下,Pentium III的第一级快取记忆体有16KB。如此降低快取记忆体容量,并不是因为芯片空间的需求,而是因为更短的微处理机核心时脉周期,强迫降低快取记忆体容量,尽管缩小快取记忆体会降低效能。
因此,我们需要一种方法,来增加快取记忆体的有效容量,或缩短快取记忆体的存取时间,或能同时达成上述两个目标。
由此可见,上述现有的微处理机与随机存取快取记忆体在结构、方法与使用上,显然仍存在有不便与缺陷,而亟待加以进一步改进。为了解决微处理机与随机存取快取记忆体存在的问题,相关厂商莫不费尽心思来谋求解决之道,但长久以来一直未见适用的设计被发展完成,而一般产品又没有适切的结构能够解决上述问题,此显然是相关业者急欲解决的问题。
有鉴于上述现有的微处理机与随机存取快取记忆体存在的缺陷,本发明人基于从事此类产品设计制造多年丰富的实务经验及专业知识,并配合学理的运用,积极加以研究创新,以期创设一种新的微处理机与随机存取快取记忆体的快速弹出装置及其方法,能够改进一般现有的微处理机与随机存取快取记忆体,使其更具有实用性。经过不断的研究、设计,并经反复试作样品及改进后,终于创设出确具实用价值的本发明。
发明内容
本发明的目的在于,克服现有的微处理机与随机存取快取记忆体存在的缺陷,而提供一种新的微处理机与随机存取快取记忆体的快速弹出装置及其方法,所要解决的技术问题是使其会区分推入至与弹出于堆栈记忆体的数据,以及推入至与弹出于非堆栈记忆体的数据,从而更加适于实用。
本发明的目的及解决其技术问题是采用以下技术方案来实现的。依据本发明提出的一种随机存取快取记忆体的快速弹出装置,其包括:一后进先出记忆体,储存复数个列数值,该后进先出记忆体包括储存一最新列数值的一最顶端记录单位;以及一多工(多工即为多任务,以下均称为多工)器,包括:一第一输入端,自该最顶端记录单位接收该最新列数值;一第二输入端,接收存取该随机存取快取记忆体的一指令的一记忆体位址的一列选取部份;一输出端,提供一数值以选取该随机存取快取记忆体的其中一列;以及一选取输入端,指定该指令的种类,若该选取输入端指定的种类为弹出指令,则该多工器选取该第一输入端以提供于该输出端。
本发明的目的及解决其技术问题还可采用以下技术措施进一步实现。
前述的随机存取快取记忆体的快速弹出装置,其中若该选取输入端指定的种类为载入指令,则该多工器选取该第二输入端以提供于该输出端;若该选取输入端指定的种类并非为弹出指令,则该多工器亦选取该第二输入端以提供于该输出端。
前述的随机存取快取记忆体的快速弹出装置,其中存放于该后进先出记忆体的每一个该些列数值各包括一推入指令的目标位址的一部分。
前述的随机存取快取记忆体的快速弹出装置,更包括下列可能变化的至少一种:该推入指令的目标位址隐含于该推入指令,作为一堆栈指标暂存器的内容值的一相对位址形式;以及该最新列数值包括该后进先出记忆体中的一最新推入指令的目标位址的一部分。
前述的随机存取快取记忆体的快速弹出装置,其中所述的记忆体位址包括存取该随机存取快取记忆体的一载入指令的一来源位址。
前述的随机存取快取记忆体的快速弹出装置,其中所述的更包括:一储存阵列,接收该多工器的输出,包括复数个列,其中每一个列各储存至少一个数据快取线;其中该多工器的输出数值指定该些列其中之一。
前述的随机存取快取记忆体的快速弹出装置,其中所述的多工器的输出数值所指定的该列所储存的该些数据快取线其中的至少一包括一最新推入指令的目标数据,该最新推入指令为最近执行且数据尚未从一堆栈记忆体弹出的一推入指令,且该堆栈记忆体是耦接于包括该随机存取快取记忆体的一微处理机。
前述的随机存取快取记忆体的快速弹出装置,其中所述的随机存取快取记忆体在决定该弹出指令的一来源位址是否击中该随机存取快取记忆体之前,会输出该多工器的输出数值所指定的该列所储存的该些数据快取线的其中至少之一。
前述的随机存取快取记忆体的快速弹出装置,更包括:一第二后进先出记忆体,储存多数个栏数值,该第二后进先出记忆体包括储存一最新栏数值的一最顶端记录单位;以及一第二多工器,包括:一第一输入端,自该第二后进先出记忆体的该最顶端记录单位接收该最新栏数值;一第二输入端,接收一栏选取数值;一输出端,提供一数值以选取该随机存取快取记忆体的一栏;以及一选取输入端,指定存取该随机存取快取记忆体的该指令的种类,若该选取输入端指定的种类为弹出指令,则该第二多工器选取该第一输入端以提供于该输出端。
前述的随机存取快取记忆体的快速弹出装置,其中若该第二多工器的选取输入端指定的种类为载入指令,则该第二多工器选取该第二输入端以提供于该输出端,若该第二多工器的选取输入端指定的种类并非为弹出指令,则该第二多工器亦选取该第二输入端以提供于该输出端。
前述的随机存取快取记忆体的快速弹出装置,更包括下列可能变化的至少一种:该第二后进先出记忆体所储存的每一个该些栏数值各指定该随机存取快取记忆体当中,储存推入指令目标数据的一个栏;以及该第一与该第二多工器的输出数值所分别选取的该列与该栏,是指定该随机存取快取记忆体所储存的一快取线以供给该指令,其中该快取线含有该指令的来源数据。
前述的随机存取快取记忆体的快速弹出装置,更包括:一位移值,指定该随机存取快取记忆体当中,该多工器的输出数值所指定的该列的一快取线当中的一数据位置。
前述的随机存取快取记忆体的快速弹出装置,更包括下列可能变化的至少一种:该位移值会回应于一弹出指令而递增;以及该位移值会回应于一推入指令而递减。
前述的随机存取快取记忆体的快速弹出装置,其中若该位移值的递增造成该位移值溢位,则该随机存取快取记忆体从该后进先出记忆体弹出该最新列数值。
前述的随机存取快取记忆体的快速弹出装置,更包括:一比较逻辑电路,耦接至该最顶端记录单位以接收该最新列数值,并比较该最新列数值与该记忆体位址的一部分,其中该记忆体位址包括该弹出指令的一来源数据位址;以及一例外事件输出端,耦接至该比较逻辑电路,在该最新列数值不符合该记忆体位址的该部分时,指示一例外事件状况。
本发明目的及解决其技术问题还采用以下的技术方案来实现。依据本发明提出的一种随机存取快取记忆体的快速弹出方法,其包括以下步骤:存放一推入指令的数据至该随机存取快取记忆体当中,一列数值所指定的一列;在该存放之后,推入该列数值至一后进先出记忆体的一最顶端记录单位;以及在该推入之后,接收一请求以读取该随机存取快取记忆体,其中该请求指定一请求种类。
本发明的目的及解决其技术问题还可采用以下技术措施进一步实现。
前述的随机存取快取记忆体的快速弹出方法,其中存放该推入指令的数据的步骤更包括:将该推入指令的数据存放至该随机存取快取记忆体的该列的其中一栏,其中该栏是由一栏数值所指定。
前述的随机存取快取记忆体的快速弹出方法,更包括以下步骤:在存放该推入指令的数据至该栏之后,将该栏数值推入一第二后进先出记忆体的一最顶端记录单位;其中该第一与该第二后进先出记忆体为同一个后进先出记忆体。
前述的随机存取快取记忆体的快速弹出方法,更包括以下步骤的至少一个:(a)决定读取该随机存取快取记忆体的步骤所使用的该栏数值,是否正确指定该随机存取快取记忆体当中,储存该弹出指令所指定的数据的一栏;(b)在存放的步骤之后递减一位移值,其中该位移值指定该随机存取快取记忆体的一快取线其中的一数据位置,其中该快取线位于该随机存取快取记忆体当中,该列数值所指定的该列;以及(c)决定用于读取步骤的该列数值,是否正确指定该随机存取快取记忆体中,储存该弹出指令所指定数据的一列。
前述的随机存取快取记忆体的快速弹出方法,更包括以下可能变化的至少一种:步骤(a)更包括:比较该弹出指令的一来源数据位址的一部分与该随机存取快取记忆体提供的一标签数值,其中该标签数值是根据该栏数值选取;步骤(b)更包括:若该请求种类为弹出指令,则根据该位移值读取该随机存取快取记忆体;步骤(c)更包括:若用于读取步骤的该列数值,未能正确指定该随机存取快取记忆体当中,储存该弹出指令所指定的数据的该列,则提供正确数据给该弹出指令;以及步骤(c)更包括:若用于读取步骤的该列数值,未能正确指定该随机存取快取记忆体当中,储存该弹出指令所指定的数据的该列,则产生一例外事件状况。
前述的随机存取快取记忆体的快速弹出方法,其中步骤(c)更包括:比较该弹出指令的一来源数据位址的一部分与该列数值。
前述的随机存取快取记忆体的快速弹出方法,更包括以下步骤:若读取的步骤包括自该列数值指定的一快取线当中,读取处于一位移值的位置的数据,而且该位移值指定该快取线的最后数据,则自该后进先出记忆体的该最顶端记录单位弹出该列数值。
前述的随机存取快取记忆体的快速弹出方法,其中推入的步骤只在该推入指令与上一个推入指令的数据位于不同快取线时执行。
本发明的目的及解决其技术问题还采用以下的技术方案来实现。依据本发明提出的一种内含于一传输媒体的电脑数据讯号,其包括:一电脑可读取程序码,提供一随机存取快取记忆体的一快速弹出装置,该电脑可读取程序码包括:一第一程序码,提供一后进先出记忆体,以储存多数个列数值,该后进先出记忆体包括储存一最新列数值的一最顶端记录单位;以及一第二程序码,提供一多工器,包括:一第一输入端,自该最顶端记录单位接收该最新列数值;一第二输入端,接收存取该随机存取快取记忆体的一指令的一记忆体位址的一列选取部份;一输出端,提供一数值以选取该随机存取快取记忆体的其中一列;以及一选取输入端,指定该指令的种类,若该选取输入端指定的种类为弹出指令,则该多工器选取该第一输入端以提供于该输出端。
本发明与现有技术相比具有明显的优点和有益效果。由以上技术方案可知,为了达到前述发明目的,本发明的主要技术内容如下:
本发明提供一种随机存取快取记忆体(random access cache memory)的快速弹出装置与方法。此装置包括一后进先出记忆体,或堆栈记忆体,以储存列数值。当推入指令的数据存放于快取记忆体时,存放推入数据列的列数值会被选择性地推入至后进先出记忆体的最顶端。当推入数据位于快取记忆体内新配置的快取线时,列数值才会被推入;否则,列数值不会被推入后进先出记忆体。此装置是利用弹出指令通常都与前一个推入指令相关,以进行猜测弹出程序。假设推入与弹出指令有关联,为了回应于弹出指令,此装置会立刻从后进先出记忆体最顶端记录单位的列数值所指定的快取线猜测提供数据,而不等待弹出来源位址的计算结果,也不等待来源位址是否击中快取记忆体的决定结果。此装置稍后会计算弹出来源位址,并比较它的索引部分与后进先出记忆体最顶端记录单位的列数值,以决定猜测提供给弹出指令的数据正确与否。如果不正确,会有修正动作以提供正确数据。如果弹出指令会让下一个弹出指令取用别的快取线,也就是说,如果弹出指令正在弹出列数值所指定的快取线的最后数据,此装置会将上述的列数值弹出后进先出记忆体。
在一实施例中,上述的快取记忆体是一个集合关联式快取记忆体(setassociative cache)。在本实施例中,此装置包括一个第二后进先出记忆体,以储存栏数值。在推入程序中,在快取记忆体当中储存推入数据的栏,也会根据与列数值相同的条件,选择性地被推入第二后进先出记忆体。在弹出程序中,此装置会立刻从后进先出记忆体最顶端记录单位的列数值,以及第二后进先出记忆体最顶端记录单位的栏数值所共同指定的快取线猜测提供数据,而不等待弹出来源位址的计算结果,也不等待来源位址是否击中快取记忆体的决定结果。在一实施例中,第一与第二后进先出记忆体是同一个后进先出记忆体,其中列数值与栏数值是成对储存。
在一实施例中,此装置会记录后进先出记忆体最顶端记录单位的列数值与栏数值所指定的快取线当中,最近被推入的数据位移值。此位移值在每次执行弹出或推入指令时都会更新。如果弹出指令使得此位移值指向下一个快取线,后进先出记忆体就会被弹出。反之,如果推入指令使得位移值指向上一个快取线,推入的快取线的列与栏会被推入后进先出记忆体。此外,如果有直接修改堆栈指标的指令,此位移值也会跟着修改,例如将一数值加上堆栈指标暂存器的指令。如果上述的修改造成此位移值指向下一个快取线,后进先出记忆体就会跟着弹出。
快速弹出程序提供弹出数据,可以比没有上述装置的快取记忆体快上几个时脉周期。更明确的说,猜测提供弹出数据的时间,并不包括计算弹出来源位址与转译实体来源位址所需的时间。此外,猜测提供弹出数据所需的时间,也不包括标签比较所需的时间。因此,在至少一个实施例中,提供弹出数据比传统快取记忆体快上三个时脉周期。
经由上述可知,本发明是关于一种微处理机与随机存取快取记忆体的快速弹出装置及其方法,该随机存取快取记忆体的快速弹出装置包括一堆栈以接收存放于快取记忆体的推入(push)指令数据的列与栏。在执行弹出(pop)指令时,此装置使用堆栈最顶端的列与栏数值存取快取记忆体。在一实施例中,会记录顶端的列与栏数值所指定的目前快取线的最近推入数据的位移值(offset)。此位移值在每次执行推入或弹出指令时都会更新。如果弹出指令造成此位移值溢位(overflow),堆栈最顶端的记录单位就会弹出。如果推入指令造成此位移值欠位(underflow),列数值与栏数值会被推入堆栈。上述的列数值、栏数值、与位移值稍后会与真实的弹出位址作比较,以决定猜测提供的数据正确与否。
综上所述,本发明特殊的微处理机与随机存取快取记忆体的快速弹出装置及其方法,此装置会区分推入至与弹出于堆栈记忆体的数据,以及推入至与弹出于非堆栈记忆体的数据。其具有上述诸多的优点及实用价值,并在同类产品及方法中未见有类似的结构设计及方法公开发表或使用而确属创新,其不论在产品结构、方法或功能上皆有较大的改进,在技术上有较大的进步,并产生了好用及实用的效果,且较现有的微处理机与随机存取快取记忆体具有增进的多项功效,从而更加适于实用,而具有产业的广泛利用价值,诚为一新颖、进步、实用的新设计。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其他目的、特征和优点能够更明显易懂,以下特举较佳实施例,并配合附图,详细说明如下。
附图说明
图1为根据本发明的管线式微处理机的方块图。
图2为根据本发明,绘示图1的堆栈快取的方块图。
图3为根据本发明,绘示图1的堆栈快取的额外元件的方块图。
图4为根据本发明,绘示图1的第一级数据快取的多工选取逻辑电路的方块图。
图5为根据本发明,绘示从图1的堆栈快取进行快速弹出程序的流程图。
图6为根据本发明,进行推入程序至图1的堆栈快取的流程图。
图7为根据本发明,绘示图1微处理机执行堆栈指标加法指令的流程图。
图8为根据本发明的,绘示从图1堆栈快取进行载入程序的流程图。
图9为根据本发明的,进行存放程序至图1的第一级数据快取的流程图。
图10为根据本发明,从图1的堆栈快取进行图5的快速弹出程序的时序图。
图11为根据本发明,从堆栈快取进行图8的猜测载入程序的时序图。
图12为根据本发明,从堆栈快取进行图8的正常载入,即非猜测载入程序的时序图。
图13为根据本发明,从非堆栈快取进行图8的载入程序的时序图。
图14为根据本发明的管线式微处理机的方块图。
图15为根据本发明,绘示图14的第一级数据快取的方块图。
图16为根据本发明,从图15的数据快取进行快速弹出程序的流程图。
图17为根据本发明,进行推入程序至图15的数据快取的流程图。
图18为根据本发明,绘示图14的微处理机执行堆栈指标加法指令的流程图。
图19为根据本发明,从图15的数据快取进行图16的快速弹出程序的时序图。
0~3:储存阵列的栏编号 1~6:时脉周期
100:管线式微处理机 102:指令快取
104:指令抓取器 106:指令转译器
108:指令排程器 112:暂存器组
114:执行单元 116:写回单元
118:总线接口单元 122:非堆栈快取
124:堆栈快取 126:第一级数据快取
128:微程序码记忆体 132:微处理机总线
134、136、138、142:数据讯号 152:堆栈指标暂存器
202:快取状态 204:位址标签
206:快取线数据 212~216、222~226:数据讯号
232、234:数据讯号 302:控制逻辑电路
304:算术单元 306:位址产生器
308:转译暂存区 312、314:比较器
316、318:多工器 322:fp_offset暂存器
324:写回线缓冲区 326:多工器
328:数据讯号 332:运算元
334:虚拟位址 336:实体位址
338~372:数据讯号 382:加法讯号
384:递减讯号 386:递增讯号
388:欠位讯号 389~391:数据讯号
392:溢位讯号 393~398:数据讯号
399:例外事件讯号 402~412:多工器
422~432:数据讯号 502:解码并发出弹出指令
504:猜测提供弹出数据 506:递增fp_offset
508:溢位? 512:堆栈快取弹出
514:计算虚拟位址 516:自转译暂存区查询
518:比较实体位址与堆栈快取最顶端的记录单位的实体位址标签
522:击中? 524:产生例外事件以修正错误
602:解码并发出推入指令 604:递减fp_offset
606:计算虚拟位址 608:自转译暂存区查询
612:比较实体位址与堆栈快取最顶端的记录单位的实体位址标签
614:击中?
616:存放数据于堆栈快取最顶端的记录单位
618:堆栈快取最底下的记录单位为有效?
622:排程写回堆栈快取最底下的记录单位
624:将新的数据、位址标签与状态推入堆栈快取顶端
626:配置装填暂存区
628:将接收到的快取线并入堆栈快取的记录单位
702:解码并发出堆栈指标加法指令
704:fp_offset=fp_offset+value
706:溢位?
708:数据快取弹出,并排程写回弹出的有效快取线
802:解码并发出载入指令
804:计算虚拟位址
806:比较虚拟位址与堆栈快取最顶端的两个虚拟位址标签
808:击中?
812:从有效且符合的堆栈快取记录单位猜测提供数据
814:自转译暂存区查询
816:比较实体位址与有效且符合的堆栈快取记录单位的实体位址标签
818:击中?
822:产生例外事件以修正错误
824:自转译暂存区查询
826:比较实体位址与所有堆栈快取记录单位的实体位址标签
828:击中?
832:从有效且符合的堆栈快取记录单位提供数据
834:在非堆栈快取进行列解码以选取集合
836:比较实体位址与受选取的集合当中每一栏的实体位址标签
838:击中?
842:从有效且符合的非堆栈快取记录单位提供数据
844:配置记录单位
846:将错过的快取线载入配置的记录单位
848:从非堆栈快取提供数据
902:解码并发出存放指令
904:计算虚拟位址
906:自转译暂存区查询
908:比较实体位址与所有堆栈快取记录单位的实体位址标签
912:击中?
914:存放数据至有效且符合的堆栈快取记录单位
916:比较实体位址与非堆栈快取当中受选取的集合的每一栏的实体位址标签
918:击中?
922:存放数据至有效且符合的非堆栈快取记录单位
924:于非堆栈快取配置记录单位
926:将错过的快取线载入配置于非堆栈快取的记录单位
928:存放数据于非堆栈快取 1400:管线式微处理机
1402:第一级数据快取 1502:控制逻辑电路
1504:储存阵列 1506:列解码器
1508:检查逻辑电路 1512:多工器
1514:fp_row堆栈顶端 1516:fp_row堆栈
1524:栏选取产生器 1526、1528:多工器
1532:fp_way堆栈顶端 1534:fp_way堆栈
1542:读取讯号[N-1:0] 1544:数据讯号
1546:标签 1548:索引
1552:列讯号 1554~1558:数据讯号
1562~1564、1572:数据讯号 1574:位址标签
1576:有效位元 1578、1582~1586:数据讯号
1588、1592~1596:数据讯号 1602:解码并发出弹出指令
1604:猜测提供弹出数据 1606:递增fp_offset
1608:溢位?
1612:fp_row堆栈与fp_way堆栈弹出
1614:计算虚拟位址 1616:自转译暂存区查询
1618:比较实体位址与实体位址标签
1622:击中? 1624:产生例外事件以修正错误
1702:解码并发出推入指令 1704:递减fp_offset
1706:欠位? 1708:击中?
1712:视为击中的一般推入指令处理
1714:产生例外事件以更新fp_row堆栈与fp_way堆栈
1716:击中? 1718:决定击中的列与栏
1722:将击中的列推入fp_row堆栈,将击中的栏推入fp_way堆栈
1724:视为击中的一般推入指令处理
1726:在受选取的列当中决定取代的栏
1728:将取代的列推入fp_row堆栈,将取代的栏推入fp_way堆栈
1732:视为错过的一般推入指令处理
1802:解码并发出堆栈指标加法指令
1804:fp_offset=fp_offset+value
1806:溢位?
1808:fp_row堆栈与fp_way堆栈弹出
具体实施方式
为更进一步阐述本发明为达成预定发明目的所采取的技术手段及功效,以下结合附图及较佳实施例,对依据本发明提出的微处理机与随机存取快取记忆体的快速弹出装置及其方法其具体实施方式、结构、方法、步骤、特征及其功效,详细说明如后。
本发明是利用,程序通常会将系统记忆体分为两个区域,也就是堆栈区(stack region)和非堆栈区(non-stack region)。非堆栈区通常也称为堆积(heap)。堆栈与堆积的主要差别是,堆积可以随机存取,而堆栈通常是以后进先出(last-in-first-out,缩写为LIFO)的方式存取。堆栈与堆积的另一个差别,是读写指令的位址表达方式。读取或写入堆积的指令,通常是直接指定记忆体位址。而读取或写入堆栈的指令,通常是用微处理机的一个特殊暂存器间接指定记忆体位址,这个暂存器通常称为堆栈指标暂存器(stack pointer register)。推入指令(push)会以要推入堆栈的数据大小更新堆栈指标暂存器,然后将数据从微处理机的一个暂存器,存放到已更新的堆栈指标暂存器所储存的记忆体位址。举例而言,在x86架构中,推入指令(例如PUSH、CALL、或ENTER指令)会以要推入的数据大小,递减堆栈指标暂存器(例如,假如数据是双字组(dword,或double word),大小就是4个位元组(byte)),然后将数据存放在堆栈中,已更新的堆栈指标暂存器所指定的位址。反之,弹出指令(pop)会从堆栈指标暂存器存放的位址读取数据,将数据载入微处理机的一个暂存器,然后以弹出堆栈的数据大小,更新堆栈指标暂存器。举例而言,在x86架构中,弹出指令(例如POP、RET、或LEAVE指令)会以弹出的数据大小,递增堆栈指标暂存器。因此,传统上,根据后进先出的特性,堆栈都是随着数据推入而往上成长(也就是说,记忆体位址会逐渐递减),也随着数据弹出而向下减缩(也就是说,记忆体位址会逐渐递增)。因此,堆栈指标暂存器所存放的数值称为堆栈的顶端(top)。
堆栈是配置记忆体空间的传统机制。在一般程序中,堆栈的主要用途之一,是推入副程序(subroutine)的参数(parameters)与上层呼叫程序的返回位址。被呼叫的副程序会将返回位址弹入微处理机的程序计数器(program counter),以返回呼叫程序,而呼叫程序会弹出参数,将堆栈恢复原状。这个概念有个极佳的特色是可用于递回副程序呼叫(nestedsubroutine call)。
此处描述的快速弹出程序,是利用推入与弹出指令之间通常有一对一的关系。也就是说,每个弹出指令所弹出的数据,通常都是由前面一个对应的推入指令推入堆栈。
在本发明说明书中中,弹出指令是将数据从记忆体移入微处理机的指令,例如移入微处理机的暂存器组(register file)当中的一个暂存器,而数据所在的记忆体位址是间接指定,而非由指令直接指定。更详细的说,弹出数据的记忆体位址是根据在堆栈指标暂存器所储存的数值。在x86架构中,弹出指令的范例是POP、RET、以及LEAVE指令,它们的来源运算元(sourceoperand)是根据在堆栈指标暂存器的内容数值的相对位址,而它们的目标运算元(destination operand)则指定微处理机当中的一个暂存器。
在本发明说明书中,载入指令(load)是将数据从记忆体移入微处理机的非弹出指令。也就是说,载入指令会直接指定目标数据所在的记忆体位址,至少也会直接指定一个或一组指定目标数据来源的记忆体位址的暂存器。在x86架构中的载入指令范例是MOV指令,它的来源运算元指定一个记忆体位置,而它的目标运算元则指定微处理机暂存器组的一个暂存器。
在本发明的说明书中,推入指令是将数据从微处理机移至记忆体的指令,其中的记忆体位置是间接指定,而不是在指令中直接指定。更明确的说,推入数据的记忆体位址是根据在微处理机的堆栈指标暂存器中所存放的数值。在x86架构中,推入指令的范例为PUSH、CALL、以及ENTER指令,它们的目标运算元是根据在堆栈指标暂存器的内容数值的相对位址,而它们的来源运算元则指定微处理机暂存器组的一个暂存器。
在本发明说明书中,存放指令(store)是将数据从微处理机移入记忆体的非推入指令。也就是说,存放指令会直接指定数据要存放的记忆体位址,至少也会直接指定一个或一组指定数据要存放的记忆体位址的暂存器。在x86架构中的存放指令范例是MOV指令,它的目标运算元指定一个记忆体位置,而它的来源运算元则指定微处理机暂存器组的一个暂存器。
请参阅图1所示,图1是根据本发明的管线(pipeline)式微处理机100的方块图。在一实施例中,微处理机100包括一个微处理机,其指令集(instruction set)大体上遵循x86架构的指令集。更明确的说,它的指令集至少包括x86的POP、PUSH、CALL、RET、ENTER、以及LEAVE指令。此外,它的指令集也包括从记忆体载入数据,以及存放数据到记忆体的指令,例如x86的MOV指令。不过,本发明并不局限于采用x86架构的微处理机,亦不局限于x86指令集。
微处理机100包括暂存器组112。暂存器组112包括多数个暂存器,用以储存微处理机100的运算元(operand)与状态资讯。在一实施例中,暂存器组112包括一般用途暂存器(general purpose registers)、位址区段暂存器(address segment registers)、索引暂存器(index registers)、状态与控制暂存器(status and control registers)、以及指令指标暂存器(instruction pointer register),或称为程序计数暂存器(programcounter register)。在一实施例中,暂存器组112至少包括一个使用者可见的,x86架构微处理机的暂存器集合。更明确的说,暂存器组112包括储存堆栈顶端位址的堆栈指标暂存器152。在一实施例中,堆栈指标暂存器152很类似x86的ESP暂存器。
微处理机100包括指令快取(instruction cache)102,用以储存指令码的快取线(cache line)。在一实施例中,指令快取102包括一个第一级(level-1,简称为L1)快取记忆体。指令快取102储存从耦接于微处理机100的系统记忆体抓取的指令,例如推入与弹出指令。这些推入与弹出指令根据存放在堆栈指标暂存器152的堆栈顶端位址,间接存取系统记忆体内的堆栈。
微处理机100也包括耦接于指令快取102的总线接口单元(businterface unit)118。总线接口单元118耦接于微处理机总线(processorbus)132,经由微处理机总线(processor bus)132将微处理机100连接至系统记忆体。总线接口单元118是微处理机100之内的各种元件与微处理机总线132的接口。举例而言,总线接口单元118从系统记忆体抓取指令到指令快取102。此外,总线接口单元118会在系统记忆体读取或写入数据,例如位于系统记忆体中,由堆栈指标暂存器152指示顶端位址的堆栈。
微处理机100也包括耦接于指令快取102的指令抓取器(instructionfetcher)104。指令抓取器104从指令快取102抓取指令。指令抓取器104循序抓取暂存器组112当中的指令指标暂存器(instruction pointerregister)所指定的下一个指令,除非遇到变更程序流程的事件,例如分支指令(branch instruction),此时指令抓取器104会开始抓取位于分支指令的目标位址的指令,或例外事件(exception),此时指令抓取器104会开始抓取对应的例外事件处理程序(exception handler routine)的指令。
微处理机100也包括耦接于指令抓取器104的微程序码记忆体(microcode memory)128。微程序码记忆体128存放指令抓取器104要抓取的指令。更明确的说,微程序码记忆体128包括例外事件处理程序的指令,以处理微处理机100产生的各种例外事件。在一实施例中,微处理机100会在侦测到弹出或推入数据的猜测错误时,产生一个例外事件,以修正微处理机100的堆栈存取状态,细节后述。
微处理机100也包括耦接于指令抓取器104的指令转译器(instruction translator)106。指令转译器106从指令抓取器104接收指令,例如推入与弹出指令,将指令解码,然后转译为微处理机100的管线的其他部分所执行的微程序码(microinstructions)。在一实施例中,微处理机100的管线的其他部分包括一个执行微程序码的精简指令集电脑(reduced instruction set computer,缩写为RISC)核心。在另一实施例中,指令转译器106会为每个指令产生一个标示(indicator),以指出微程序码所据以转译的指令,是属于推入、弹出、载入、或存放,亦称为巨集程序码(macroinstruction)。微处理机100也包括耦接于指令转译器106的指令排程器108。指令排程器108从指令转译器106接收已转译的微程序码,并且发出微程序码134给执行微程序码的执行单元(execution units)114。
执行单元114自指令排程器108接收微程序码134,并且自暂存器组112接收运算元142,例如推入指令的数据或堆栈指标暂存器152的内容数值,并执行微程序码134。在一实施例中,执行单元114包括一个整数单元(integer unit)、一个浮点单元(floating point unit)、一个多媒体延伸单元(MMX unit)、一个串流单指令多数据延伸单元(SSE unit)、一个分支单元(branch unit)、一个载入单元(load unit)、以及一个存放单元(storeunit)。载入单元执行是将数据从系统记忆体载入微处理机100的指令,包括弹出指令。存放单元执行存放指令,也就是将数据从微处理机100存放至系统记忆体的指令,包括推入指令。
微处理机100也包括耦接于执行单元114的写回单元(write-backstage)116。写回单元116接收执行单元114执行指令的结果,并且将结果,例如弹出指令的数据,写回暂存器组112。
微处理机100也包括数据快取(data cache)126,数据快取126通过总线136耦接于总线接口单元118,并且通过总线138耦接于执行单元114。在一实施例中,数据快取126是第一级的数据快取记忆体。数据快取126包括堆栈快取(stack cache)124与非堆栈快取(non-stack cache)122。总线接口单元118将数据从系统记忆体抓取至数据快取126,并且从数据快取126写入系统记忆体。详细的说,总线接口单元118会从堆栈快取124与非堆栈快取122将快取线写回系统记忆体,并且从系统记忆体读取快取线,以写入堆栈快取124与非堆栈快取122所配置的记录单位(allocated entry)。更明确的说,总线接口单元118会在系统记忆体的堆栈与堆栈快取124之间,传送推入与弹出指令所指定的数据。
在一实施例中,非堆栈快取122大体上包括一个传统的第一级数据快取记忆体,其设计目标是面对随机分布的系统记忆体位址时,可有均一的存取时间(access time)。在一实施例中,非堆栈快取122包括一个四栏集合关联式快取记忆体(4-way set associative cache)。不过,存放单元会区分推入与非推入的指令数据,以决定要将数据存放在堆栈快取124或非堆栈快取122。存放单元会将推入指令的数据存放在堆栈快取124,而不是非堆栈快取122,且将非推入指令的数据,如存放指令数据,存放在非堆栈快取122。如此一来,非堆栈快取122就与传统的快取记忆体不同。堆栈快取124在稍后会配合图2进一步解说。
在一实施例中,微处理机100也包括一个第二级(level-2,简称为L2)快取记忆体,以支援第一级指令快取102以及第一级数据快取126。明确的说,这个第二级快取是存放从第一级数据快取126(包括非堆栈快取122与堆栈快取124)移出的快取线,而第一级数据快取126会从第二级快取记忆体抓取快取线。
请参阅图2所示,图2是根据于本发明的堆栈快取124。堆栈快取124包括多数个构成一个堆栈,或称为后进先出记忆体(LIFO memory)的储存单位(storage elements)。虽然堆栈快取124本身是堆栈,但与系统记忆体之内的堆栈并不相同。后者是由堆栈指标暂存器152的内容数值指定顶端位置。而堆栈快取124是储存来自系统记忆体的堆栈的数据。
图2的实施例包括16个储存单位,或称为记录单位(entry),分别标示为0到15。最顶端的记录单位称为记录单位0,而最底端的称为记录单位15。不过,本发明在堆栈快取124当中,并不局限于特定数量的记录单位。每一个记录单位都有空间以容纳快取线206的数据、快取线206的位址标签(address tag)204、以及快取线206的快取状态(cache status)202。在一实施例中,快取状态202大体遵循广为人知的四种表示快取一致性(coherency)的状态,也就是已修改(Modified)、独有(Exclusive)、共享(Shared)、以及无效(Invalid),合称为MESI。在一实施例中,一个快取线206包括64位元组的数据。在另一实施例中,位址标签204包括快取线206的实体位址(physical address)。
在一实施例中,位址标签204包括快取线206的实体位址的高段位元(upper significant bits),用来唯一辨识快取线206。在一实施例中,微处理机100包括一个记忆体分页系统(memory paging system),负责将虚拟记忆体位址(virtual memory addresses)转译为实体记忆体位址,而且位址标签204也包括快取线206的虚拟位址。在一实施例中,这个虚拟位址其实是虚拟位址位元的杂凑(hash)结果,以降低所需的储存空间。以下会详细说明如何利用位址标签204的虚拟位址部分,在堆栈快取124做猜测载入(speculative loads)。
堆栈快取124接收新的快取状态,以通过sc_write_MESI讯号212放入最顶端的记录单位的快取状态202栏位。堆栈快取124接收新的位址标签,以通过sc_write_tag讯号214放入最顶端的记录单位的位址标签204栏位。堆栈快取124接收新的快取线,以通过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最顶端的记录单位。在一实施例中,快取线206的每一个双字组可以通过sc_write_data讯号216个别写入。在另一实施例中,一个双字组包括四个位元组。本发明也包括其他实施例,其中堆栈快取124之中的快取线206的每个字组(word,即2个位元组)或每个位元组,都可以通过sc_write_data讯号216个别写入。
堆栈快取124以sc_MESI[15:0]讯号222提供十六个记录单位的MESI状态202。堆栈快取124以sc_tag[15:0]讯号224提供十六个记录单位的位址标签204。堆栈快取124以sc_data[15:0]讯号226提供十六个记录单位的快取线数据206。最顶端的记录单位的快取线206是以sc_data[0]讯号提供,第二个记录单位的快取线206是以sc_data[1]讯号提供,依此类推,最底下的记录单位的快取线206是以sc_data[15]讯号提供。位址标签204与MESI状态202也是以相同方式提供。堆栈快取124也接收来自图3的控制逻辑电路302的pop_sc讯号234。当控制逻辑电路302设定pop_sc讯号234为真值时,堆栈快取124会往上平移一个记录单位,也就是说,最上方的记录单位会移出堆栈快取124,而其余每个记录单位会接收下一个记录单位的内容。在一实施例中,当一个记录单位弹出堆栈快取124时,也就是当pop_sc讯号234为真值时,堆栈快取124最底下的记录单位的MESI状态202会更新为无效。刚开始堆栈快取124的所有记录单位的MESI状态202都是无效。
请参阅图3所示,图3是根据本发明的图1当中的堆栈快取124的附加元件的方块图。堆栈快取124包括控制逻辑电路302。
控制逻辑电路302接收来自图1执行单元114的存放单元的push_instr讯号342。当push_instr讯号342为真值时,表示存放单元正请求将数据存入图1的数据快取126,以回应来自图1的指令排程器108的推入指令。
控制逻辑电路302也接收来自执行单元114的载入单元的pop_instr讯号344。当pop_instr讯号344为真值时,表示载入单元正请求从数据快取126载入数据,以回应接收自指令排程器108的弹出指令。
控制逻辑电路302也接收来自执行单元114的载入单元的load_instr讯号346。当load_instr讯号346为真值时,表示载入单元正请求从数据快取126载入数据,以回应接收自指令排程器108的载入指令。
控制逻辑电路302也接收来自执行单元114的存放单元的store_instr讯号348。当store_instr讯号348为真值时,表示存放单元正请求存放数据到数据快取126,以回应接收自指令排程器108的存放指令。
控制逻辑电路302也接收来自执行单元114的整数单元的add_sp_instr讯号352。当Add_sp_instr讯号352为真值时,表示整数单元正通知数据快取126有来自指令排程器108的堆栈指标加法指令(add tothe stack pointer instruction),例如x86的ADD指令。在一实施例中,这种指令是将常数加到堆栈指标暂存器,就像ADD ESP,imm指令。
堆栈快取124也包括位址产生器(address generator)306。位址产生器306接收来自图1的暂存器组122的运算元,例如基准值(base values)、位移值(offsets)、以及记忆体描述值(memory descriptor values),并根据接收的数值产生虚拟位址334。虚拟位址334是存取记忆体指令的虚拟记忆体位址,例如推入、弹出、载入、或存放指令。以载入指令来说,虚拟位址334是数据来源的虚拟位址。以存放指令来说,虚拟位址334是数据目的地的虚拟位址。以弹出指令来说,虚拟位址334是弹出数据来源的虚拟位址。以推入指令来说,虚拟位址334是推入数据的目的地的虚拟位址。在一实施例中,载入与存放单元都包括位址产生器306。
堆栈快取124也包括耦接于位址产生器306的转译暂存区(translation lookaside buffer,简称为TLB)308。转译暂存区308储存分页表(page table)的资讯,以将虚拟位址334转译为实体位址336。在一实施例中,转译暂存区308只转译实体位址336的高位部分,而低位部份就是虚拟位址334的对应低位部分。在另一实施例中,一个页至少有4KB,因此实体位址336的最低12个位元不会经过转译。
堆栈快取124也包括两个耦接于位址产生器306的比较器(comparator)312。每个比较器312各自接收虚拟位址334。比较器312的其中之一接收图2的sc_tag[0]讯号224的虚拟位址部分,而另一个比较器312接收sc_tag[1]讯号224的虚拟位址部分。也就是说,两个比较器312各自接收图2当中堆栈快取124的最顶端两个记录单位的位址标签204的虚拟位址部分,并各自比较对应的虚拟sc_tag讯号224与虚拟位址334。如果虚拟sc_tag[0]讯号224等于虚拟位址334,第一个比较器312会在VA_match[0]讯号362产生真值,而VA_match[0]讯号362会提供到控制逻辑电路302。同理,如果虚拟sc_tag[1]讯号224等于虚拟位址334,第二个比较器312会在VA_match[1]讯号362产生真值,而VA_match[1]讯号362也会提供到控制逻辑电路302。控制逻辑电路302也接收图2当中来自堆栈快取124的sc_MESI[15:0]讯号222。控制逻辑电路302会使用VA_match[1:0]讯号362与sc_MESI[1:0]讯号222以决定虚拟位址334是否击中堆栈快取124最上端的两个记录单位其中之一,以从堆栈快取124进行猜测载入,以下会有详细说明。也就是说,控制逻辑电路302使用VA_match[1:0]讯号362与sc_MESI[1:0]讯号222来决定虚拟位址334是否等于虚拟sc_tag[1:0]讯号224的其中任何一个有效(valid)的虚拟位址部分。在一实施例中,虚拟位址标签204是虚拟位址位元的杂凑结果,虚拟位址334是在供给比较器312之前就经过杂凑。
要注意的是,虽然图3的一个实施例中,会检查堆栈快取124的最顶端两个记录单位,以决定是否要进行猜测载入,本发明也包括检查两个以上顶端记录单位的其他实施例,而且在另一个实施例中,只检查最顶端的一个记录单位。检查的数据项越多,侦测到可进行快速载入的机会也越大。因此,快取线越大,需要检查的记录单位就越少。图3的实施例是检查128个位元组。
堆栈快取124也包括耦接于转译暂存区308的十六个比较器314。这些比较器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]讯号364 224和实体位址336相同,第二个比较器314就会在PA_match[1]讯号364产生真值,PA_match[1]讯号364也会提供到控制逻辑电路302;依此类推,直到第十六个比较器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也产生sc_hit讯号389,sc_hit讯号389会提供到执行单元114的载入与存放单元,以指出弹出、推入、载入、或存放指令所涉及的快取线至少在猜测上存在于堆栈快取124。就弹出指令来说,控制逻辑电路302在sc_hit讯号389猜测产生真值,以在确认弹出的来源位址击中堆栈快取124之前,回应pop_instr讯号344的真值,细节会在后面配合图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其中一个有效的实体位址标签时,非猜测地在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时,non-sc_hit讯号366为真值。控制逻辑电路302也产生图2的push_sc讯号232和pop_sc讯号234。
堆栈快取124也包括耦接于控制逻辑电路302的fp_offset暂存器322,以储存一个称为fp_offset的数值。暂存器322以fp_offset讯号396输出其数值,然后提供给控制逻辑电路302。fp_offset暂存器322的数值是用来从堆栈快取124进行快速弹出程序,细节后述。从后面的图式,尤其是图5至图7的流程图可知,fp_offset暂存器322指定存放在堆栈快取124最顶端的记录单位的快取线当中的,最近的推入指令的数据位置。也就是说,fp_offset暂存器322指定一个推入指令的数据位置,而且这个数据尚未被弹出主记忆体之内的堆栈。在一实施例中,fp_offset暂存器322包括一个四位元数值,以指定堆栈快取124最顶端的记录单位所储存的快取线206其中的十六个双字组其中之一的位移值。控制逻辑电路302监视弹出、推入、与堆栈指标加法指令(add to stack pointer instructions),以预期堆栈指标暂存器152的改变,并且使fp_offset暂存器322的数值与堆栈指标暂存器152的位元[5:2]保持一致。在一实施例中,控制逻辑电路302会在执行单元114的载入、存放、或整数单元分别指出有弹出、推入、或堆栈指标加法指令时,更新fp_offset暂存器322。在另一实施例中,控制逻辑电路302更新fp_offset暂存器322时,不会等待写回单元116更新堆栈指标暂存器152。如此,在推入指令、堆栈指标加法指令、或其他弹出指令之后的弹出指令可利用堆栈指标暂存器152的预期值,而不用等待写回单元116更新堆栈指标暂存器152之后,才取得堆栈指标暂存器152的位元[5:2]。
堆栈快取124也包括耦接于fp_offset暂存器322,有十六个输入端的多工器(multiplexer)318。在一实施例中,多工器318的十六个输入端各自接收sc_data[0]讯号226的十六个双字组其中之一。多工器318接收fp_offset讯号396做为选择输入,以选取sc_data[0]讯号的十六个双字组其中之一,在fp_data讯号398输出,并且在快速弹出程序中供应给弹出指令,细节后述。
堆栈快取124也包括耦接于控制逻辑电路302的算术单元(arithmeticunit)304。算术单元304接收fp_offset讯号396。
算术单元304也自控制逻辑电路302接收递减讯号(decrement signal)384。如果控制逻辑电路302在递减讯号384产生真值,算术单元304会递减从fp_offset讯号396接收的数值,将结果提供给输出端372。如果递减程序造成欠位(underflow),算术单元304会在欠位讯号388产生真值,将它提供给控制逻辑电路302。
算术单元304也自控制逻辑电路302接收递增讯号(increment signal)386。如果控制逻辑电路302在递增讯号386产生真值,算术单元304会递增从fp_offset讯号396接收的数值,将结果提供给输出端372。如果递增程序造成溢位(overflow),算术单元304会在溢位讯号392产生真值,将它提供给控制逻辑电路302。
算术单元304也自控制逻辑电路302接收加法讯号(add signal)382。如果控制逻辑电路302在加法讯号382产生真值,算术单元304会将接收自fp_offset讯号396的数值,加上接收自add_sp_val讯号394的数值,将结果提供给输出端372。如果相加造成溢位,算术单元304会在溢位讯号392产生真值。在一实施例中,add_sp_val讯号394是由图1的执行单元114的整数单元提供。add_sp_val讯号394的数值就是将一数值加上堆栈指标暂存器152的指令所指定的数值。
堆栈快取124也包括一个耦接于fp_offset暂存器322的两输入端的多工器316。多工器316的输出端耦接至fp_offset暂存器322的输入端。多工器316以一个输入端接收算术单元304的输出372,以另一个输入端接收堆栈指标暂存器152的输出的位元[5:2]。多工器316自控制逻辑电路302接收控制讯号368,做为选择输入,以选取两个输入的其中之一,输出至fp_offset暂存器322。
堆栈快取124也包括一个耦接于控制逻辑电路302,有十六个输入端的多工器326。多工器326的每个输入端各自接收堆栈快取124提供在sc_data[15:0]讯号226的十六个快取线206其中之一。多工器326根据控制逻辑电路302产生的writeback_mux_sel讯号328,在十六个sc_data[15:0]讯号226当中选取其一。多工器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或某个第二级快取记忆体,细节后述。
控制逻辑电路302也会在例外事件讯号399产生真值,以表示有例外事件发生,使微处理机转而执行微程序码记忆体128之内的例外事件处理程序,细节后述。
控制逻辑电路302也产生spec_sc_load_mux_sel讯号391、normal_sc_load_mux_sel讯电路号393、以及L1_mux_sel讯号395,后面都会配合图4解说。
请参阅图4所示,图4是一个方块图,绘示根据于本发明的,图1的第一级数据快取126的多工逻辑电路(muxing logic)。数据快取126包括四个输入端的多工器402,其输出提供给图1的总线138。更明确的说,多工器402在输出端138提供弹出与载入数据给图1的执行单元114的载入单元。
多工器402的第一输入端自图1的非堆栈快取122接收输出数据432,以提供数据给发自非堆栈快取122的载入程序。多工器402的第二输入端接收一个有十六个输入端的多工器404的输出424,以提供数据给自堆栈快取124的猜测载入程序。多工器402的第三输入端接收另一个有十六个输入端的多工器406的输出426,以提供数据给发自堆栈快取124的正常(或称为非猜测)载入程序。多工器402的第四输入端接收图3的fp_data讯号398,以提供数据给快速弹出程序。
多工器404接收一个双输入多工器412输出的快取线422的十六个双字组。多工器404根据图3的实体位址336的位元[5:2]选取快取线422的十六个双字组其中之一。
多工器406接收一个有十六个输入端的多工器408输出的快取线428的十六个双字组。多工器406根据实体位址336的位元[5:2]选取快取线428的十六个双字组其中之一。
多工器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,各自接收堆栈快取124的十六个记录单位的快取线。多工器408根据图3的normal_sc_load_mux_sel讯号393选取sc_data[15:0]讯号226的十六个快取线其中之一做为输出的讯号428,而normal_sc_load_mux_sel讯号393是控制逻辑电路302根据load_instr讯号346、PA_match[15:0]讯号364、以及sc_MESI[15:0]讯号222的数值产生,细节后述。
图5是根据本发明的,发自于图1当中的堆栈快取124的快速弹出程序流程图。流程从步骤502开始。
在步骤502,图1的指令转译器106会将弹出指令解码,图1的指令排程器108会将弹出指令发给图1执行单元114的载入单元。接下来,载入单元会在图3的pop_instr讯号344产生真值。流程进行至步骤504。
在步骤504,多工器318从堆栈快取124最顶端的记录单位的快取线sc_data[0]226选取适当的双字组,以根据图3fp_offset暂存器322的内容数值提供fp_data讯号398。为回应pop_instr讯号344的真值,图3的控制逻辑电路302会在L1_mux_sel讯号395输出一数值,促使图4的多工器402选取图3的fp_data讯号398为输入,然后经由总线138提供给执行单元114的载入单元,以供给上述的弹出指令,然后写回单元116会将fp_data讯号398载入至弹出指令所指定的,图1的暂存器组112的其中一个暂存器。例如说,如果弹出指令是x86的RET指令,弹出数据会载入暂存器组112的指令指标暂存器。另举一例,如果弹出指令是x86的LEAVE指令,则弹出数据会载入暂存器组112的EBP暂存器。再举一例,如果弹出指令是x86的POP指令,则弹出数据会载入暂存器组112当中,POP指令所指定的暂存器。由图5可知,数据是猜测性地供给载入单元。说猜测是因为还不确定稍后在步骤516在实体位址336产生的,弹出指令的来源位址,会与堆栈快取124的最顶端记录单位所提供给载入单元的弹出数据的位址相同。另外为了回应pop_instr讯号344的真值,控制逻辑电路302会在图3的sc_hit讯号389产生真值,sc_hit讯号389提供到执行单元114的载入单元。流程接着进行到步骤506。
在步骤506,控制逻辑电路302会在递增讯号386产生真值,使得算术单元304递增fp_offset讯号396并且于输出端372提供递增的结果,然后控制逻辑电路302会通过控制讯号368使多工器316选取这个递增结果,以载入至图3的fp_offset暂存器322。
接下来,在步骤508,控制逻辑电路302会检查溢位讯号392以决定步骤506的递增程序是否造成fp_offset暂存器322溢位。也就是说,控制逻辑电路302会决定弹出指令是否会造成堆栈指标暂存器152指向下一个快取线。如果是,流程会进入步骤512,否则进入步骤514。
在步骤512控制逻辑电路302会在pop_sc讯号234产生真值,以弹出堆栈快取124最顶端的记录单位。弹出最顶端的记录单位,是为了使堆栈快取124与系统记忆体的快取一致,因为目前的弹出指令正在将最顶端记录单位所储存的快取线的最后一个双字组弹出系统记忆体堆栈。在一实施例中,步骤512是在步骤518之后进行,正如后述,如此可比较实体位址336与步骤504当中提供数据的记录单位的sc_tag[0]讯号224数值。在一实施例中,步骤504使用的sc_tag[0]讯号224数值会储存下来,留待后面的步骤518使用。虽然在一实施例中,fp_offset暂存器322是一个双字组的位移值,以因应双字组的推入与弹出指令,本发明也包括其他实施例,其中的推入与弹出数据大小各有不同,例如单字组(word)、位元组(byte)、或四字组(quadword)。
接下来,在步骤514,位址产生器306会计算弹出指令的来源虚拟位址334。
接下来,在步骤516,转译暂存区308会产生弹出指令的来源实体位址336。
接下来,在步骤518,图3的比较器314的其中之一会比较在步骤516产生的实体位址336,以及图2的实体sc_tag[0]讯号224,以产生图3的PA_match[0]讯号364。
接下来,在决策步骤522,控制逻辑电路302会检查sc_MESI[0]讯号222与PA_match[0]讯号364,以决定堆栈快取124的最顶端记录单位是否有效,以及弹出指令的来源实体位址336是否等于堆栈快取124的最顶端记录单位的实体位址标签204,也就是说,实体位址336是否击中堆栈快取124的最顶端记录单位。在一实施例中,实体位址336的位元[5:2]也会与fp_offset讯号396的数值比较,后者是用于选取fp_data讯号398提供的双字组,以验证这个双字组是否正确。如果弹出指令的来源实体位址336击中堆栈快取124的最顶端记录单位,流程至此结束,也就是说,猜测快速弹出程序提供了正确的弹出数据。否则流程会进入步骤524。
在步骤524,控制逻辑电路302会在例外事件讯号399产生真值,使微处理机100执行例外事件处理程序,以处理猜测快速弹出程序提供错误数据的状况。在一实施例中,例外事件处理程序会清空堆栈快取124,并载入堆栈指标暂存器152的位元[5:2]的目前值至fp_offset暂存器322。例外事件处理程序会使弹出指令收到正确数据。在一实施例中,上述的清空也包括将堆栈快取124其中的有效快取线写回系统记忆体或一个第二级快取。流程在步骤524结束。
到目前可知,也会在后面配合图10详细说明,图5的快速弹出程序可以使弹出指令收到弹出数据,比不会分辨弹出与载入指令的传统快取记忆体,快上几个时脉周期。
图6是根据本发明的,推入图1当中的堆栈快取124的推入程序流程图。流程从步骤602开始。
在步骤602,图1的指令转译器106会将推入指令解码,然后指令排程器108会发出推入指令至执行单元114的存放单元。然后存放单元会在图3的push_instr讯号342产生真值。
接下来,在步骤604,控制逻辑电路302会在递减讯号384产生真值,使得算术单元304递减fp_offset讯号396,并于输出端372输出递减结果,控制逻辑电路302会利用控制讯号368使多工器316选取递减结果,以将它载入图3的fp_offset暂存器322。此外,为了回应push_instr讯号342的真值,控制逻辑电路302会在sc_hit讯号389产生真值,以供给执行单元114的存放单元。
接下来,在步骤606,位址产生器306会计算推入指令的目标虚拟位址334。
接下来,在步骤608,转译暂存区308会产生推入指令的目标实体位址336。
接下来,在步骤612,图3的比较器314的其中之一会比较在步骤516产生的实体位址336,以及图2的实体sc_tag[0]讯号224,以产生图3的PA_match[0]讯号364。
接下来,在步骤614,控制逻辑电路302会检查sc_MESI[0]讯号222与PA_match[0]讯号364,以决定堆栈快取124的最顶端记录单位是否有效,并决定推入指令的目标实体位址336是否等于堆栈快取124的最顶端记录单位的实体位址标签204,也就是说,实体位址336是否击中堆栈快取124的最顶端记录单位。如果是,流程会进入步骤616,否则会进入步骤618。在一实施例中,如果实体位址336击中的记录单位不在堆栈快取124的最顶端,堆栈快取124会在其中的有效记录单位写回系统记忆体之后清空。然后流程进入步骤616。
在步骤616,推入数据会经由sc_write_data讯号216存入堆栈快取124的最顶端记录单位,存入实体位址336的位址位元[5:2]所指定的快取线206的双字组位移值。如有必要,最顶端记录单位的MESI状态202会经由sc_write_MESI讯号212更新,例如更新为已修改状态。推入数据是来自暂存器组112当中,推入指令所指定的暂存器。例如说,如果推入指令是x86的CALL指令,推入数据就是计算自暂存器组112的指令指标暂存器的下一个执行的指令指标。另举一例,如果推入指令是x86的ENTER指令,推入数据就是x86的暂存器组112的EBP暂存器的内容数值。再举一例,如果推入指令是x86的PUSH指令,推入数据就是暂存器组112当中,PUSH指令所指定的暂存器。流程在步骤616结束。
在决策步骤618,因为推入数据的目标位址336错过堆栈快取124,堆栈快取124必须在最顶端配置一个新的记录单位,以储存推入目标位址336所在的快取线。为此堆栈快取124会往下平移一个记录单位,最底下的记录单位会移出堆栈快取124。因此,控制逻辑电路302会检查sc_MESI[15]222以决定堆栈快取124最底下的记录单位是否有效。如果有效,流程会进入步骤622,否则会进入步骤624。
在步骤622,控制逻辑电路302会给堆栈快取124的最底下的记录单位的写回做排程,方法是在writeback_mux_select讯号328产生真值,使多工器326选取sc_data[15]讯号226,也就是堆栈快取124的最底下的记录单位的快取线,以供给写回线缓冲区324,然后在writeback_request讯号338产生真值,以请求图1的总线接口单元118将上述的快取线写回第二级快取或系统记忆体。
接下来,在步骤624,控制逻辑电路302会设立push_sc讯号232,使堆栈快取124向下平移一个记录单位,以分别通过sc_write_data讯号216、sc_write_tag讯号214、以及sc_write_MESI讯号212存放推入数据和它的位址标签与MESI状态。
接下来,在步骤626,控制逻辑电路302会配置一个装填暂存区,使堆栈快取124准备容纳推入指令的目标位址336所在的快取线,并且将这个快取线存入堆栈快取124。在一实施例中,步骤626也包括探视非堆栈快取122以及第二级快取,如果上述的快取线存在于上述的两个快取其中之一,就从它们取得上述的快取线。
接下来,在步骤628,步骤626配置的装填暂存区会接收这个快取线,而且这个快取线的数据会与在步骤624存入堆栈快取124的最顶端记录单位的推入数据相结合。流程在步骤628结束。
现在请参阅图7所示,图7是根据本发明的图1的微处理机100处理堆栈指标加法指令的程序流程图。如上所述,快速弹出程序是利用大部分行为良好的程序的推入与弹出指令都是一一对应。也就是说,每个推入指令都有对应的弹出指令跟随着。不过,这个规则至少有一个例外,就是在传递副程序所需的参数(parameter)时,下面以x86指令说明。
举例来说,C语言的函式(function)参数是利用系统记忆体的堆栈传递。为此会执行一连串PUSH指令将参数推入堆栈,每个指令推入一项参数。举例来说,在呼叫一个接收五个四位元组参数的函式之前,负责呼叫的函式会执行五次PUSH指令,将五个参数推入堆栈。然后呼叫的函式执行CALL指令,将返回位址推入堆栈,并且将控制权交给副程序。副程序的最后一个指令是RET,它会从堆栈弹出返回位址。然后呼叫的程序必须恢复参数所占据的堆栈空间,一种方法是连续执行五次POP指令,使堆栈指标回到推入参数之前的数值。然而,由于呼叫的函式并不需要这些参数,大部分的编译程序(compiler)都是直接用ADD指令,将参数占据的空间大小加回堆栈指标。如此编译程序就只产生一个ADD指令,而不是五个POP指令,这样程序执行会比较快,程序码也会比较小。在上面的范例中,呼叫的程序会给堆栈指标加上20。这是最常见的,推入与弹出指令不一致的状况。所以在一实施例中,本发明的快速弹出装置会找出给堆栈指标加上数值的指令,并且据以调整fp_offset 322的数值。这个流程是从图7的步骤702开始。
在步骤702,图1的指令转译器106将一个目标为堆栈指标暂存器152的加法指令解码,指令排程器108会将加法指令发给执行单元114的整数单元。接着整数单元会在图3的add_sp_instr讯号352产生真值。
接下来,在步骤704,控制逻辑电路302会在加法讯号382产生真值,使算数单元304将add_sp_val讯号394加上fp_offset讯号396,并且在输出端372提供结果,控制逻辑电路302会通过控制讯号368使多工器316选取这个结果,以载入至图3的fp_offset暂存器322。
接下来,在决策步骤706,控制逻辑电路302会检查溢位讯号392以决定步骤704的加法程序是否造成fp_offset暂存器322溢位。也就是说,控制逻辑电路302会决定上述的加法指令是否会使堆栈指标暂存器152指向另一个快取线。在步骤706,溢位是指加法造成堆栈指标暂存器152不再指向堆栈快取124最顶端的储存单元的快取线。更明确的说,如果加法造成溢位,堆栈指标暂存器152通常指向记忆体位址邻接于且大于堆栈快取124最顶端的储存单元的快取线的位址的快取线。因此,堆栈快取124必须做弹出动作,使正确的快取线处于顶端的记录单位。在一实施例中,控制逻辑电路302会发出使堆栈指标暂存器152溢位超过一条快取线的加法指令。在此实施例中,在接下来的步骤708,堆栈快取124必须弹出的记录单位数量N是以下列方式计算,假设快取线的大小为64位元组:
N=(fp_offset+add_sp_val)/64
因此,假如N大于1,表示有溢位发生,此时流程会进入步骤708,否则流程结束。
在步骤708,控制逻辑电路302会在pop_sc讯号234产生真值,以弹出堆栈快取124最顶端的记录单位。不过在这之前,控制逻辑电路302会决定最顶端的记录单位的快取线是否有效,如果有效,就会将有效快取线写回系统记忆体或第二级快取的动作加入排程,就像图6的步骤622写回最底下的记录单位一般。如步骤706所述,在一实施例中,N的数值是由计算而来,堆栈快取124会弹出N个记录单位,而且其中状态为有效的都会写回。流程在步骤708结束。
现在请参阅图8所示,图8是根据本发明的,从图1的堆栈快取124进行载入程序的流程图。图8包括图8A、8B、与8C。简单的说,图8A是堆栈快取124的猜测载入程序;图8B是堆栈快取124的正常载入程序;图8C则是从非堆栈快取122的载入程序。流程从步骤802开始。
在一般程序中,系统记忆体堆栈有另一个主要用途,就是配置副程序的区域变数(local variables)所需的空间。副程序配置空间的方法,是将堆栈指标减去区域变数所需的空间数量。然后区域变数会被载入指令取用,其中载入指令的目标位址是根据堆栈指标计算出的相对位址。因此载入的数据很可能与最近推入的数据在同一个快取线。此外,副程序很可能执行载入指令,以取用呼叫程序为它推入堆栈的参数。被推入的参数很有可能跨越两个快取线,也就是说,其中一个推入指令会使堆栈指标指向下一个快取线,就如图6的步骤618到628所述。于是,某些参数会在堆栈快取124的顶端的第二个记录单位的快取线,而非最顶端的记录单位,或甚至位在顶端的第三个记录单位,诸如此类。因此,在一实施例中,发自堆栈快取124的猜测载入程序会利用这一点,检查堆栈快取124,看载入数据是否存在于最顶端的两个记录单位。借着直接检查最顶端的两个记录单位,可避免传统快取记忆体的列解码程序(row decode operation),可以省下一个时脉周期。
此外,在一实施例中,猜测载入可以再省下一个时脉周期,方法是用载入指令的虚拟位址334,而非实体位址336,以比较位址标签,看载入数据是否存在于最顶端的两个记录单位。如果虚拟位址符合最顶端的两个记录单位其中之一,载入数据就很可能在刚才击中的记录单位,虽然因为可能是虚拟重址(virtual aliasing)而不确定。在微处理机100的一实施例中,堆栈快取124会在猜测载入时提供错误数据,是因为作业系统切换工作(task),因而更新记忆体分页资讯(paging information),造成假的虚拟位址符合。在一实施例中,特别是在使用堆栈位址区段暂存器(stackaddress segment register),例如x86架构的SS暂存器,的微处理机100,堆栈快取124在猜测载入时提供错误数据,是因为堆栈区段暂存器受到更新,影响到有效位址计算,而可能造成假的虚拟位址符合。
虽然图8叙述一个实施例,其中堆栈快取124最顶端的两个记录单位会做为猜测载入的候选者而受检查,猜测载入程序并不限于检查特定数量的最顶端的记录单位,本发明也包括其他实施例,其中猜测载入会检查各个不同数量的最顶端记录单位。
在步骤802,图1的指令转译器106会将一个载入指令解码,指令排程器108会将载入指令发给执行单元114的载入单元。接着载入单元会在图3的load_instr讯号346产生真值。
接下来,在步骤804,位址产生器306会计算载入指令的来源虚拟位址334。
接下来,在步骤806,图3的两个比较器312会比较步骤804产生的虚拟位址336与图2的虚拟sc_tag[1:0]讯号224,以产生图3的VA_match[1:0]讯号362。
接下来,在决策步骤808,控制逻辑电路302会检查sc_MESI[1:0]讯号222与VA_match[1:0]讯号362以决定堆栈快取124的最顶端的两个记录单位的任何一个是否有效,以及载入指令的来源虚拟位址334是否符合堆栈快取124的最顶端的两个记录单位的位址标签204的虚拟部分,也就是说,虚拟位址334是否击中堆栈快取124的最顶端的两个记录单位。如果是,流程会进入步骤812,否则进入图8B的步骤824。
在步骤812,为了回应load_instr讯号346的真值,控制逻辑电路302会在spec_sc_load_mux_sel讯号391产生一个数值,使多工器412选取在决策步骤808决定的,有符合载入指令的来源虚拟位址334的有效位址标签204的,堆栈快取124的两个快取线(也就是sc_data[1:0]讯号226)的其中之一,以提供给图4的讯号422。此外,多工器404会从快取线422选取实体位址336的位元[5:2]指定的双字组,以供给图4的讯号424。而且,控制逻辑电路302会在图3的L1_mux_sel讯号395产生一个数值,使图4的多工器402选取输入424以经由总线138提供给执行单元114的载入单元,以提供给载入指令,稍后写回单元116会将输入424载入到暂存器组112其中,载入指令所指定的暂存器。由图8A可知,数据是猜测性的提供给载入单元。说猜测是因为尚未确认将在后面的步骤814,在实体位址336产生的载入指令的来源实体位址,是否会等于从堆栈快取124的最顶端的两个记录单位的其中之一提供给载入单元的载入数据的位址。由于步骤808侦测到虚拟位址334击中堆栈快取124的最顶端的两个记录单位,控制逻辑电路302会在sc_hit讯号389产生真值,以提供给执行单元114的载入单元。
接下来,在步骤814,转译暂存区308会产生载入指令的来源实体位址336。
接下来,在步骤816,图3的两个比较器314会比较步骤814产生的实体位址336与实体sc_tag[1:0]讯号224,在步骤812,载入数据就是由此猜测性地输出,以产生对应的PA_match[1:0]讯号364。
接下来,在决策步骤818,控制逻辑电路302会检查对应于在步骤812猜测提供载入数据的堆栈快取124的记录单位的PA_match[1:0]讯号364,以决定载入指令的来源实体位址336是否等于上述的记录单位的实体位址标签204,也就是说,实体位址336是否击中记录单位。如果载入指令的来源位址336击中堆栈快取124的猜测记录单位,流程就此结束,也就是说,猜测载入程序提供了正确的弹出数据。否则,流程进入步骤822。
在步骤822,控制逻辑电路302会在例外事件讯号399产生真值,使微处理机100执行例外事件处理程序,以处理猜测载入程序提供错误数据的情况。例外事件处理程序会使载入指令接收到正确数据。在一实施例中,例外事件处理程序会从非堆栈快取122或系统记忆体或L2快取载入正确数据。流程在步骤822结束。
由此可知,后面也会参照图11详加说明,图8A的猜测载入程序使载入数据提供给载入指令,可以比传统的快取记忆体快上几个时脉周期。
在图8B的步骤824,转译暂存区308会产生载入指令的来源实体位址336。
接下来,在步骤826,图3的比较器314会比较步骤824产生的实体位址336以及堆栈快取124的十六个记录单位所各自对应的实体sc_tag[15:0]讯号224,以产生PA_match[15:0]讯号364。
接下来,在步骤828,控制逻辑电路302会检查sc_MESI[15:0]讯号222与PA_match[15:0]讯号364,以决定堆栈快取124是否有记录单位的状态为有效,以及载入指令的来源实体位址336是否等于有效的记录单位的实体位址标签204,也就是说,实体位址336是否击中堆栈快取124。如果是,流程会进入步骤832,否则会进入图8C的步骤834。
在步骤832,为回应load_instr讯号346的真值,并且回应载入指令的来源虚拟位址334错过堆栈快取124最顶端的两个记录单位,以及回应载入指令的来源实体位址336击中堆栈快取124,控制逻辑电路302会在normal_sc_load_mux_sel讯号393产生一个数值,使多工器408选取已经在步骤828决定,有等于载入指令的来源实体位址336的有效实体位址标签204的堆栈快取124的十六个快取线(也就是sc_data[15:0]226)的其中之一,以输出于图4的讯号428。此外,多工器406会从快取线428选取实体位址336的位元[5:2]指定的双字组,以输出于图4的讯号426。而且控制逻辑电路302会在L1_mux_sel讯号395产生一个数值,使多工器402选取输入426,以经由总线138提供给执行单元114的载入单元,以供给载入指令,稍后写回单元116会将讯号426的内容载入至载入指令所指定的,图1的暂存器组112其中的一个暂存器。由于步骤828侦测到实体位址336击中堆栈快取124,控制逻辑电路302会在sc_hit讯号389产生真值,以提供给执行单元114的载入单元。流程在步骤832结束。
由此可知,后面也会配合图12详加解释,图8B的发自堆栈快取124的正常载入程序使得载入数据提供给载入指令,可以比传统的快取记忆体,例如非堆栈快取122,快上至少一个时脉周期。
在图8C的步骤834,非堆栈快取122会接收图8B的步骤824产生的实体位址336的索引部分(index portion),并且接着对索引进行列解码,以在非堆栈快取122选取一列,或称为一个栏集合(set of ways)。
接下来,在步骤836,非堆栈快取122比较步骤824产生的实体位址336的高位部分,或标签部分,以及步骤834选取的集合其中每一栏(way)的实体位址标签。
接下来,在决策步骤838,非堆栈快取122会检查步骤836的比较结果以及受选取的栏的有效位元,以决定载入的实体位址336是否击中非堆栈快取122。如果击中,流程会进入步骤842,如果没有,流程则会进入步骤844。
在步骤842,非堆栈快取122会从它被实体位址336击中的记录单位提供载入数据。流程在步骤842结束。
在步骤844,由于步骤838决定载入的实体位址336错过非堆栈快取122,非堆栈快取122会在其中配置一个记录单位,以载入错过的载入指令的实体位址336所在的快取线。
接下来,在步骤846,非堆栈快取122会从系统记忆体或第二级快取,将错过的快取线载入步骤844配置的记录单位。
接下来,在步骤848,非堆栈快取122会从步骤846载入的快取线提供载入数据。流程在步骤848结束。
在一实施例中,图8C的步骤834到848是以传统快取记忆体的方式执行。也就是说,图8C是传统的非堆栈快取122,在载入实体位址336错过堆栈快取124时的传统载入程序。
请参阅图9所示,图9为根据本发明的,进入图1的第一级快取126的存放程序流程图。流程从步骤902开始。
在步骤902,图1的指令转译器106会将存放指令解码,指令排程器108会将存放指令发给执行单元114的存放单元。紧接着,存放单元会在图3的store_instr讯号348产生真值。
接下来,在步骤904,位址产生器306会计算存放指令的目标虚拟位址334。
接下来,在步骤906,转译暂存区308会产生存放指令的目标实体位址336。
接下来,在步骤908,图3的比较器314会比较步骤906产生的实体位址336与堆栈快取124的十六个记录单位各自对应的实体sc_tag[15:0]讯号224,以产生PA_match[15:0]讯号364。
接下来,在决策步骤912,控制逻辑电路302会检查sc_MESI[15:0]讯号222与PA_match[15:0]讯号364以决定堆栈快取124是否有状态为有效的记录单位,以及存放指令的目标实体位址336是否等于堆栈快取124当中,一个有效的记录单位的实体位址标签204,也就是说,实体位址336是否击中堆栈快取124。如果是,流程会进入步骤914,否则会进入步骤916。
在步骤914,存放数据会放入决策步骤912当中位址符合的堆栈快取124的有效记录单位,存放数据是通过sc_write_data讯号216存放至实体位址336的位元[5:2]指定的快取线206的双字组位移值。如有必要,最顶端记录单位的MESI状态202会通过sc_write_MESI讯号212更新,例如更新为已修改状态。存放数据来自存放指令所指定的暂存器或记忆体位置。例如,如果存放指令是x86的MOV指令,指定一个一般用途暂存器为数据来源,存放数据就在暂存器组112当中,受MOV指令的来源运算元指定的暂存器。由于步骤912侦测到实体位址336击中堆栈快取124,控制逻辑电路302会在sc_hit讯号389产生真值,提供给执行单元114的存放单元。流程在步骤914结束。
在步骤916,步骤906产生的实体位址336的标签部分会与非堆栈快取122当中,实体位址336的索引部分选取的集合的每一栏的实体标签做比较。
接下来,在决策步骤918,控制逻辑电路302会检查non-sc_hit讯号366以决定存放指令的目标实体位址336是否击中非堆栈快取122。如果击中,流程会进入步骤922,否则会进入步骤924。
在步骤922,存放数据会被存放入非堆栈快取122在步骤918受选取的集合当中,有效且比较结果相等的栏。流程在步骤922结束。
在步骤924,由于决策步骤918判定存放实体位址336错过非堆栈快取122,非堆栈快取122会在其中配置一个记录单位,以容纳存放指令的实体位址336所在的快取线。
接下来,在步骤926,非堆栈快取122会从系统记忆体或第二级快取,将前面错过的快取线载入在步骤924配置的非堆栈快取122的记录单位。
接下来,在步骤928,非堆栈快取122会将存放数据存放入在步骤926载入的快取线。流程在步骤928结束。
在一实施例中,图9的步骤902到906以及步骤916到928都是以传统快取记忆体的方式进行。也就是说,步骤902到906以及步骤916到928是存放位址336错过堆栈快取124时,在传统的非堆栈快取122进行的传统存放程序。
请参阅图10所示,图10是根据本发明的图5所绘示的,从堆栈快取124进行快速弹出程序的时序图。图10包括四个行(column),标示为1到4,对应于微处理机100的四个时脉周期。图10也包括五个列(row),各自代表微处理机100的一个动作或结果。图10的每个行列交会处的方格,不是空白就是“弹出”,以指示弹出指令在微处理机100的管线(pipeline)中所在的位置。
在时脉周期1,根据图10的第一列,图1的执行单元114的载入单元会在图3的pop_instr讯号344产生真值,以请求弹出数据给弹出指令,就如图5的步骤502所示。
在时脉周期2,根据第二列,堆栈快取124会从fp_offset讯号396指定的最顶端记录单位的快取线,提供数据给弹出指令,就如图5的步骤504所示。更明确的说,多工器318会从堆栈快取124的最顶端记录单位提供在sc_data[0]讯号226的十六个双字组当中,选取fp_offset讯号396指定的双字组398,而且多工器402会选取fp_data输入398。此外,堆栈快取124会以sc_hit讯号389通知载入单元有弹出指令发生击中。也就是说,堆栈快取124会通知载入单元,弹出指令的数据正位于堆栈快取124。如同前面配合图5的说明,sc_hit讯号389的击中指示是猜测的,因为还没确定稍后会在时脉周期3产生的弹出指令来源位址,会等于将在时脉周期3从堆栈快取124的最顶端记录单位提供给载入单元的弹出数据的位址。在一实施例中,sc_hit讯号389通知载入单元有弹出指令发生击中,会经过图2的sc_MESI[0]222的有效位元把关,如此在最顶端的记录单元为有效时,堆栈快取124才会通知载入单元有弹出指令发生击中。也就是说,尽管控制逻辑电路302在告知弹出击中之前不会确认位址符合,至少会确认堆栈快取124的最顶端记录单位为有效。
在时脉周期2,根据第三列,位址产生器306会计算图3的虚拟位址334,就如图5的步骤514所示。
在时脉周期3,根据第四列,转译暂存区308会产生弹出指令的来源实体位址336,就如图5的步骤516所示。
在时脉周期4,根据第五列,控制逻辑电路302会侦测到堆栈快取124提供了不正确的弹出数据,就如图5的步骤518至524所示。
比较图10与后面会说明的图13可知,快速弹出程序可以使第一级数据快取126提供数据给弹出指令,比传统的不会区分弹出与载入指令的快取记忆体快上几个时脉周期。
在一实施例中,实体位址336的位元[5:2]是用来选取数据的双字组,而非fp_offset讯号396,而数据是在时脉周期3提供,而不是在时脉周期2。
请参阅图11所示,图11是根据本发明的图8所绘示的,从堆栈快取124进行猜测载入程序的时序图。图11包括四个行,标示为1至4,对应于微处理机100的四个时脉周期。图11也包括六个列,各自代表微处理机100的一个动作或结果。图11的每个行列交会处的方格,不是空白就是“载入”,以指示载入指令在微处理机100的管线中所在的位置。
在时脉周期1,根据图11的第一列,图1的执行单元114的载入单元会在图3的load_instr讯号346产生真值,以请求载入数据给载入指令,就如图8的步骤802所示。
在时脉周期2,根据第二列,位址产生器306会计算图3的虚拟位址334,就如图8的步骤804所示。
在时脉周期3,根据第三列,图3的比较器312会进行虚拟标签比较,以产生VA_match[1:0]讯号362,就如图8的步骤806所示。此外,控制逻辑电路302会根据VA_match[1:0]讯号362与图2的sc_MESI[1:0]讯号222产生spec_sc_load_mux_sel讯号391,如同图8的步骤812所示。此外,堆栈快取124会以sc_hit讯号389通知载入单元有载入指令发生击中,就如图8的步骤812所示。也就是说,堆栈快取124会通知载入单元,载入指令所需的数据正位于堆栈快取124。如同前面关于图8的说明,击中指示是猜测的,因为还没确定在时脉周期3产生的载入指令的来源实体位址336,会等于将在时脉周期4从堆栈快取124提供给载入单元的载入数据的位址。
在时脉周期3,根据第四列,转译暂存区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可知,猜测载入程序可以使第一级数据快取126提供数据给载入指令,比传统的快取记忆体快上几个时脉周期。
请参阅图12所示,图12是根据本发明的图8所绘示的,从堆栈快取124进行正常载入程序,也就是非猜测载入程序的时序图。图12包括五个行,标示为1至5,对应于微处理机100的五个时脉周期。图12也包括五个列,各自代表微处理机100的一个动作或结果。图12的每个行列交会处的方格,不是空白就是“载入”,以指示载入指令在微处理机100的管线中所在的位置。
在时脉周期1,根据图12的第一列,图1的执行单元114的载入单元会在图3的load_instr讯号346产生真值,以请求载入数据给载入指令,就如图8的步骤802所示。
在时脉周期2,根据第二列,位址产生器306会计算虚拟位址334,如同图8的步骤804所示。
在时脉周期3,根据第三列,转译暂存区308会产生载入指令的来源实体位址336,就如图8的步骤824所示。
在时脉周期4,根据第四列,图3的比较器314会进行实体标签比较,以产生图3的PA_match[15:0]讯号364,就如图8的步骤836所示。此外,控制逻辑电路302会根据PA_match[15:0]讯号364与图2的sc_MESI[15:0]讯号222产生normal_sc_load_mux_sel讯号393,就如图8的步骤832所示。此外,堆栈快取124会以sc_hit讯号389通知载入单元有载入指令发生击中,就如图8的步骤832所示。
在时脉周期5,根据第五列,载入数据会提供给载入单元,就如图8的步骤832所示。更明确的说,图4的多工器408会根据normal_sc_load_mux_sel讯号393选取sc_data[15:0]讯号226的十六个快取线其中之一,多工器406会根据实体位址336的位元[5:2]选取正确的双字组,而多工器402会选取输入426。
比较图12与稍后说明的图13可知,正常的载入程序可以使第一级数据快取126提供数据给载入指令,比传统的快取记忆体更快。
请参阅图13所示,图13是根据本发明的图8所绘示的,从非堆栈快取122进行载入程序的时序图。图13包括六个行,标示为1至6,对应于微处理机100的六个时脉周期。图13也包括六个列,各自代表微处理机100的一个动作或结果。图1 3的每个行列交会处的方格,不是空白就是“载入”,以指示载入指令在微处理机100的管线中所在的位置。
在时脉周期1,根据图13的第一列,图1的执行单元114的载入单元会在图3的load_instr讯号346产生真值,以请求载入数据给载入指令,就如图8的步骤802所示。
在时脉周期2,根据第二列,位址产生器306会计算图3的虚拟位址334,就如图8的步骤804所示。
在时脉周期3,根据第三列,转译暂存区308会产生载入指令的来源实体位址336,就如图8的步骤824所示。
在时脉周期4,根据第四列,非堆栈快取122会根据实体位址336的索引部分进行传统的列解码,从列解码的结果所指定的集合的每一栏读取数据。
在时脉周期5,根据第五列,非堆栈快取122会用实体位址336的标签部分与受选取的集合的每一栏的标签进行实体标签比较。根据标签比较结果与每一栏的有效位元,非堆栈快取122会产生一个栏选取讯号(wayselect signal)以选取符合且有效的栏。
在时脉周期6,根据第六列,非堆栈快取122会选出栏选取讯号所指定的快取线,并且根据实体位址336的低位位元,在刚才选出的快取线当中,选出正确的双字组。
除了图10到图13演示的范例之外,本发明也包括其他实施例,其中前面提到的各种功能,例如位址比较与多工选取(multiplexing),是并入不同的时脉周期,而且快速弹出、猜测载入、正常载入、以及从非堆栈快取122的载入程序,都不局限于以上的实施例。
从以上的说明可知,堆栈快取124与非堆栈快取122分离的优点是,比起不会区分堆栈与非堆栈存取的传统的单一快取记忆体,可以有效增加第一级数据快取126的容量,而且不会增加第一级数据快取126的存取时间。此外,由于非堆栈快取122不储存堆栈数据,基于程序存取的数据整体性,非堆栈快取122比同样大小的传统快取记忆体更有效率。此外,堆栈快取124可以加速大部分的弹出指令,这是利用堆栈后进先出的特性,弹出指令所要求的数据很可能位在堆栈快取124的顶端,因为最顶端的数据很可能就是最近推入堆栈快取124的数据,也就是最新数据。因此堆栈快取124在决定弹出位址是否真的击中堆栈快取124之前就会猜测提供弹出数据。再者,堆栈快取124可以加快大部分取用堆栈数据的载入指令,这也是由于堆栈后进先出的特性,要载入的数据很可能位在靠近堆栈快取124顶端的一个或多个快取线之中。因此,堆栈快取124会在进行实体位址比较以确定载入数据是否存在之前,就先根据虚拟位址比较,从顶端的记录单位其中之一猜测提供载入数据。这使得堆栈快取124在大部分情况下都可以更快提供载入数据,因为不必等待虚拟位址被转译为实体位址,以比较实体位址。最后,如果载入的虚拟位址没击中堆栈快取124最顶端的记录单位,使得载入数据不能猜测提供给载入指令,堆栈快取124会在载入的实体位址击中堆栈快取124时提供载入数据。如果载入的实体位址没击中堆栈快取124,就由非堆栈快取122提供载入数据。于是,从堆栈快取124读取数据所需的时间会变动,越容易预测的读取动作所需的时脉周期就越少。时间变动的原因之一是读取堆栈快取124的指令种类。另一个变动原因是数据在堆栈快取124之内的位置。
请参阅图14所示,图14是根据本发明的管线式微处理机1400的方块图。微处理机1400类似于图1的微处理机100,只是微处理机1400的第一级数据快取1402不包括堆栈快取124。图14的第一级数据快取1402包括一个传统的第一级数据快取,后者有一个装置可从第一级数据快取1402进行快速弹出,细节后述。
请参阅图15所示,图15是根据本发明的图14当中第一级数据快取1402的方块图。其中有几个元件类似于图3的对应元件,作用也类似,类似的元件都使用相同标号。更明确的说,数据快取1402包括:位址产生器306,负责接收运算元332并产生虚拟位址334;转译暂存区308,负责接收虚拟位址334并产生实体位址336;算术单元304,负责接收加法讯号382、递减讯号384、以及递增讯号386,并产生欠位讯号388与溢位讯号392;以及多工器316、多工器318、fp_offset暂存器322、add_sp_val讯号394、堆栈指标暂存器152的位元[5:2]、输出讯号372、以及fp_offset讯号396,除了下面说明的差别之外,以上元件的作用都类似于图3当中标号相同的元件。数据快取1402也包括控制逻辑电路1502,其作用在某些方面类似于图3的控制逻辑电路302。控制逻辑电路1502接收类似于控制逻辑电路302的push_instr讯号342、pop_instr讯号344、以及add_sp_instr讯号352。控制逻辑电路1502产生类似于图3的控制讯号368。控制逻辑电路1502产生例外事件讯号399以回应快速弹出程序的错误,除了下面说明的差异之外,就如同图3的对应讯号。
数据快取1402也包括储存阵列(storage element array)1504,以存放多数个快取线,以及它们的位址标签与快取状态,例如MESI状态。在图15的实施例中,储存阵列1504有N个列,或称为集合,以及四个行,或称为栏。也就是说,数据快取1402是一个四栏集合关联式快取记忆体。不过,本发明并不局限于具有特定数量的栏的快取记忆体。在一实施例中,储存阵列1504所储存的快取线大小为64位元组。
数据快取1402也包括列解码器(row decoder)1506。列解码器1506接收指定储存阵列1504的N个列其中之一的列讯号(row signal)1552。列解码器1506会在多数个读取讯号[N-1:0]1542之中,列讯号1552所指定的一个产生真值。紧接着,储存阵列1504会输出上述为真的读取讯号[N-1:0]1542所指定列的讯号1594。也就是说,受选取的列的每一栏的快取线数据、位址标签、以及MESI状态都会输出于讯号1594。在图15的实施例中,讯号1594上面会输出四个各包括十六个双字组的快取线,以及各个快取线所对应的位址标签1574与MESI状态中的有效位元1576。
数据快取1402也包括一个耦接于储存阵列1504,有四个输入端的多工器1528。多工器1528的四个输入端各自接收储存阵列1504输出的四个快取线1594的其中之一。多工器1528根据控制输入1596选取四个快取线其中之一以输出于讯号1592。受选取的快取线经过讯号1592提供至多工器318,后者会根据fp_offset讯号396在总线138上提供一个双字组。
数据快取1402也包括由控制逻辑电路1502产生的fast_pop讯号1564。控制逻辑电路1502会在fast_pop讯号1564产生真值,以回应pop_instr讯号344的真值,从数据快取1402进行快速弹出作业。
数据快取1402也包括一个储存单位堆栈,或记录单位堆栈,称为fp_row堆栈1516,耦接于控制逻辑电路1502。fp_row堆栈1516由多数个储存单位组成,每个储存单位储存一个数值,指向储存阵列1504的一个列。在一实施例中,fp_row堆栈1516的每个单位储存log2N个位元,其中N是储存阵列1504的列数。fp_row堆栈1516的多个储存单位构成一个堆栈,包括最顶端的记录单位1514,以存放最近推入的列数值(row value),后者是由控制逻辑电路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也包括一个有两个输入端的多工器1512,耦接于fp_row堆栈1516。多工器1512的一个输入端接收fp_row堆栈1516的最顶端记录单位1514的内容值,标示为fp_row讯号1556。多工器1512的另一个输入端接收来自转译暂存区308的实体位址336的索引部分,或称为列选取部份1548。在一实施例中,索引1548就是实体位址336的低位位址位元。如果fast_pop讯号1564为真值,多工器1512会选取fp_row讯号1556,以输出于列讯号1552,提供至列解码器1506;否则,多工器1512会选取索引1548以输出于列讯号1552。
数据快取1402也包括另一个储存单位,或记录单位的堆栈,称为fp_way堆栈1534,耦接于控制逻辑电路1502。fp_way堆栈1534由多个储存单位组成,每个单位各储存一个数值,指向储存阵列1504的一个栏。在图15的实施例中,fp_way堆栈1534的每个单位都储存两个位元,以指出储存阵列1504的四个栏的其中之一。fp_way堆栈1534的多个储存单位构成一个堆栈,包括最顶端的记录单位1532,以存放最近推入的栏数值(way value),后者是控制逻辑电路1502以new_way讯号1582提供。也就是说,new_way讯号1582会指出储存阵列1504之中,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是由单一堆栈组成,其中每个记录单位各存放一个列数值与一个栏数值。
数据快取1402也包括一个有两个输入端的多工器1526,耦接于fp_way堆栈1534。多工器1526的一个输入端接收fp_way堆栈1534的最顶端记录单位1532的内容,标示为fp_way讯号1584。多工器1526的另一个输入端接收normal_way_select讯号1578。如果fast_pop讯号1564为真值,多工器1526会选取fp_way讯号1584,以输出于多工选取讯号(mux selectsignal)1596,提供至多工器1528;否则,多工器1526会选取normal_way_select讯号1578以输出于多工选取讯号1596。
在一实施例中,fp_way堆栈1534和fp_row堆栈1516的每个记录单位都包括一个有效位元(valid bit),而且fast_pop讯号1564会由最顶端记录单位1514以及最顶端记录单位1532的有效位元做逻辑或运算的结果把关。也就是说,尽管控制逻辑电路1502不会在执行快速弹出之前,检查弹出来源位址符合与否,至少会先检查fp_row堆栈1516的最顶端记录单位1514以及fp_way堆栈1534的最顶端记录单位1532都是有效。在本实施例中,fp_way堆栈1534和fp_row堆栈1516的每一次弹出时,向上平移之后,最底下的记录单位的有效位元都会设为伪值(false)。
数据快取1402也包括耦接于控制逻辑电路1502的栏选取产生器(wayselect generator)1524。栏选取产生器1524从储存阵列1504受选取的列当中,接收每一个位址标签1574以及有效位元1576。栏选取产生器1524也接收来自转译暂存区308的实体位址336的位址标签部分1546。栏选取产生器1524会比较实体位址标签1546与储存阵列1504输出的每一个标签1574,其中实体位址标签1546可能来自弹出、推入、载入、或存放指令。如果位址标签1574的其中之一等于实体位址标签1546,而且对应的有效位元1576表示这个位址标签1574为有效,栏选取产生器1524就会在提供给控制逻辑电路1502的cache_hit讯号1572产生真值。此外,栏选取产生器1524会将有效且相等的栏的数值,也就是击中储存阵列1504的栏,输出于normal_way_select讯号1578,并提供给控制逻辑电路1502与多工器1526。
数据快取1402也包括耦接于储存阵列1504的检查逻辑电路(checklogic)1508。检查逻辑电路1508接收实体位址336、fast_pop讯号1564、fp_row讯号1556、fp_way讯号1584、位址标签1574、有效位元1576、以及fp_offset讯号396。检查逻辑电路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产生伪值,以提供给控制逻辑电路1502。否则,检查逻辑电路1508会在fp_check讯号1544产生真值,以提供给控制逻辑电路1502。
请参阅图16所示,图16为根据本发明的,从图15的数据快取1402进行快速弹出程序的流程图。流程从步骤1602开始。
在步骤1602,指令转译器106会将弹出指令解码,指令排程器108会将弹出指令发给图14的执行单元114的载入单元。然后载入单元会在pop_instr讯号344产生真值。
接下来,在步骤1604,为回应pop_instr讯号344的真值,控制逻辑电路1502会在fast_pop讯号1564产生真值。因此,多工器1512会选取fp_row讯号1556以经由列讯号1552输出至列解码器1506。接着列解码器1506会在读取讯号[N-1:0]1542当中,由fp_row讯号1556指定的一个之上产生真值。接着储存阵列1504会在输出讯号1594输出一列处于真值的读取讯号[N-1:0]。为了回应fast_pop讯号1564的真值,多工器1526会选取fp_way讯号1584,以经由多工选取讯号1596提供给多工器1528。接着多工器1528会选取来自fp_way讯号1584所指定的栏的快取线,以输出于讯号1592。多工器318会从多工器1528输出的快取线1592选取正确的双字组,以根据fp_offset暂存器322的内容值,将这个双字组经由总线138提供给执行单元114的载入单元,以提供给弹出指令,最后写回单元116会将这个双字组载入到图14的暂存器组112当中,弹出指令所指定的暂存器。举例而言,如果弹出指令是x86的RET指令,弹出数据会载入暂存器组112当中的指令指标暂存器。另一个例子,如果弹出指令是x86的LEAVE指令,弹出数据会载入暂存器组112当中的EBP暂存器。又一个例子,如果弹出指令是x86的POP指令,弹出数据会载入暂存器组112当中,POP指令所指定的暂存器。由图16可知,数据是猜测性地提供给载入单元。说猜测是因为尚未确定将在步骤1616产生于实体位址336的弹出指令来源位址,会等于从储存阵列1504当中,由fp_row讯号1556与fp_way讯号1584指定的记录单位,提供至载入单元的弹出数据的位址。
接下来,在步骤1606,控制逻辑电路1502会在递增讯号386产生真值,接着算术单元304会递增fp_offset讯号396,然后将递增后的数值输出于讯号372,控制逻辑电路1502会通过控制讯号368,使多工器316选取这个数值,以载入到fp_offset暂存器322。
接下来,在决策步骤1608,控制逻辑电路1502会检查溢位讯号392,以决定步骤1606的递增程序是否造成fp_offset暂存器322溢位。也就是说,控制逻辑电路1502会决定弹出指令是否会造成堆栈指标152指向下一个快取线。如果是,流程会进入步骤1612,否则会进入步骤1614。
在步骤1612,控制逻辑电路1502会在pop_row讯号1558产生真值,以弹出fp_row堆栈1516的最顶端记录单位,控制逻辑电路1502也会在pop_way讯号1586产生真值,以弹出fp_way堆栈1534的最顶端记录单位。这是为了让它们与系统记忆体快取一致,因为在储存阵列1504当中,由fp_row堆栈1516的最顶端记录单位1514与fp_way堆栈1534的最顶端记录单位1532所指定的记录单位储存的快取线的上一个双字组,正被弹出指令弹出系统记忆体堆栈。在一实施例中,步骤1612是在后面说明的步骤1618之后执行。在另一实施例中,用于步骤1604的fp_row讯号1556和fp_way讯号1584的数值会保存下来,留待步骤1618使用。
接下来,在步骤1614,位址产生器306会计算弹出指令的来源虚拟位址334。
接下来,在步骤1616,转译暂存区308会产生弹出指令的来源实体位址336。
接下来,在步骤1618,检查逻辑电路1508会比较产生于步骤1616的实体位址336的对应部分,以及fp_way讯号1584所选取的位址标签1574,并且比较实体位址336的对应部分与fp_row讯号1556,并且比较实体位址336的对应部分与fp_offset讯号396,并检查fp_way讯号1584选取的有效位元1576,以产生提供给控制逻辑电路1502的fp_check讯号1544。
接下来,在决策步骤1622,控制逻辑电路1502会检查fp_check讯号1544,以决定弹出指令的来源实体位址336是否击中储存阵列1504当中,fp_row堆栈1516与fp_way堆栈1534的最顶端记录单位所指定的记录单位。如果击中,流程在此结束,也就是说,猜测快速弹出程序提供了正确的弹出数据。否则流程会进入步骤1624。
在步骤1624,控制逻辑电路1502会在例外事件讯号399产生真值,使微处理机1400执行例外事件处理程序,以处理猜测快速弹出程序提供错误数据的状况。例外事件处理程序会使弹出指令收到正确的数据。在一实施例中,例外事件处理程序会清空fp_row堆栈1516与fp_way堆栈1534,并且将堆栈指标暂存器152的位元[5:2]的正确数据载入到fp_offset暂存器322。流程在步骤1624结束。
由此可知,后面也会配合图19详细说明,图16的快速弹出程序使得传统的快取记忆体提供弹出数据给弹出指令,可以比没有快速弹出装置快上几个时脉周期。
请参阅图17所示,图17是根据本发明的图15的数据快取1402进行推入程序的流程图。流程从步骤1702开始。
在步骤1702,指令转译器106会将推入指令解码,然后指令排程器108会将推入指令发给执行单元114的存放单元。接着存放单元会在push_instr讯号342产生真值。
接下来,在步骤1704,控制逻辑电路1502会在递减讯号384产生真值,接着算术单元304会递减fp_offset讯号396,将递减后的数值输出于讯号372,控制逻辑电路1502会通过控制讯号368使多工器316选取这个数值,以将它载入fp_offset暂存器322。
接下来,在决策步骤1706,控制逻辑电路1502会检查欠位讯号388,以决定步骤1704递减fp_offset讯号396是否造成fp_offset暂存器322欠位。也就是说,控制逻辑电路1502会决定,推入指令是否会造成堆栈指标暂存器152指向前一个快取线。如果是,流程会进入决策步骤1716,否则会进入决策步骤1708。
在决策步骤1708,控制逻辑电路1502会检查cache_hit讯号1572,以决定推入指令的目标实体位址336是否击中储存阵列1504。如果击中,流程会进入步骤1712,如果没有,则会进入步骤1714。
在步骤1712,数据快取1402会将目前的推入指令视为击中数据快取1402的正常推入指令。也就是说,数据快取1402会以数据快取领域所熟知的传统方法处理这个推入指令。因为推入动作不会转而指向上一个快取线,不需要更新fp_row堆栈1516与fp_way堆栈1534;于是,下一个弹出程序很可能会指定fp_row堆栈1516的最顶端记录单位1514与fp_way堆栈1534的最顶端记录单位1532所指定的快取线其中的数据。流程在步骤1712结束。
在步骤1714,控制逻辑电路1502会在例外事件讯号399产生真值,使微处理机1400执行例外事件处理程序,以更新fp_row堆栈1516与fp_way堆栈1534。在一实施例中,例外事件处理程序会清空fp_row堆栈1516与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,控制逻辑电路1502会在push_row讯号1562产生真值,以将new_row 1554提供的数值推入fp_row堆栈1516。控制逻辑电路1502也会在push_way讯号1588产生真值,以将new_way 1582提供的数值推入fp_way堆栈1534。
接下来,在步骤1724,数据快取1402会将目前的推入指令视为击中数据快取1402的正常推入指令。也就是说,在步骤1722更新fp_row堆栈1516和fp_way堆栈1534之后,数据快取1402会以数据快取领域习知的传统方法处理这个推入指令。流程在步骤1724结束。
在步骤1726,控制逻辑电路1502会决定储存阵列1504当中,被索引1548指定的列当中,要被错过的推入位址336所涉及的快取线取代的栏,这个快取线必须现在就载入数据快取1402。在一实施例中,控制逻辑电路1502会选取受选取的列当中,最久没使用的栏。控制逻辑电路1502会通过new_way讯号1582,将用来取代的栏提供给fp_way堆栈1534。此外,控制逻辑电路1502会通过new_row讯号1554,将索引1548所选取的列提供给fp_row堆栈1516。
接下来,在步骤1728,控制逻辑电路1502会在push_row讯号1562产生真值,以将new_row讯号1554提供的值推入fp_row堆栈1516。控制逻辑电路1502也会在push_way讯号1588产生真值,以将new_way讯号1582提供的值推入fp_way堆栈1534。
接下来,在步骤1732,数据快取1402会将目前的推入指令视为错过数据快取1402的正常推入指令。也就是说,在步骤1728更新fp_row堆栈1516和fp_way堆栈1534之后,数据快取1402会以数据快取领域习知的传统方法处理这个推入指令。流程在步骤1732结束。
请参阅图18所示,图18为根据本发明的图14的微处理机1400处理堆栈指标加法指令的流程图。流程从步骤1802开始。
在步骤1802,指令转译器106会将目标为图14的堆栈指标暂存器152的加法指令解码,而指令排程器108会将这个加法指令发给执行单元114的整数单元。然后整数单元会在add_sp_instr讯号352产生真值。
接下来,在步骤1804,控制逻辑电路1502会在加法讯号382产生真值,然后算术单元304会将add_sp_val讯号394加上fp_offset讯号396,将总和输出于讯号372,控制逻辑电路1502会通过控制讯号368,使多工器316选取这个总和,以载入到fp_offset暂存器322。
接下来,在决策步骤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与fp_way堆栈1534必须做弹出动作,使fp_row堆栈1516的最顶端记录单位1514与fp_way堆栈1534的最顶端记录单位1532指向正确的快取线。在一实施例中,控制逻辑电路1502会发出使堆栈指标暂存器152溢位超过一条快取线的加法指令。在此实施例中,在接下来的步骤1808,fp_row堆栈1516与fp_way堆栈1534弹出的记录单位数量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的数值是由计算而来,而且fp_row堆栈1516与fp_way堆栈1534各弹出N个记录单位。流程在步骤1808结束。
请参阅图19所示,图19为根据本发明的,从图15的数据快取1402进行图16的快速弹出程序的时序图。图19包括四个行,标示为1至4,对应于微处理机1400的四个时脉周期。图19也包括六个列,各自代表微处理机1400的一个动作或结果。图19的每个行列交会处的方格,不是空白就是“弹出”,以指示弹出指令在微处理机1400的管线中所在的位置。
在时脉周期1,根据图19的第一列,执行单元114的载入单元会在pop_instr讯号344产生真值,以请求弹出数据给弹出指令,就如图16的步骤1602所示。
在时脉周期2,根据第二列,列解码器1506会将fp_row讯号1556提供的列数值解码,以在读取讯号[N-1:0]1542的其中之一产生真值,如同图16的步骤1604所示。接着储存阵列1504会输出真值的读取讯号[N-1:0]1542所选取的列的四栏当中,每个记录单位的快取线、位址标签、与状态,如同图16的步骤1604所示。
在时脉周期2,根据第三列,位址产生器306会计算虚拟位址334,如同图16的步骤1614所示。
在时脉周期3,根据第四列,多工器1528会选出fp_way讯号1584指定的快取线1592,而且多工器318会选出刚才选出的快取线1592当中,fp_offset讯号396指定的正确双字组,如同图16的步骤1604所示。在一实施例中,选出的是快取线1592当中,实体位址336的低位位元[5:2]所指定的双字组。
在时脉周期3,根据第五列,转译暂存区308会产生弹出指令的来源实体位址336,如同图16的步骤1616所示。
在时脉周期4,根据第六列,控制逻辑电路1502会检查fp_check讯号1544以决定前面进行的猜测弹出程序是否不正确,如同图16的步骤1618至1624所示。
在一实施例中,从图15的数据快取1402执行载入指令的时序,类似于从图1的非堆栈快取122执行载入指令的时序;因此,图13也可以用来说明从数据快取1402执行载入指令的的时序。比较图19与图13可知,图16的快速弹出程序使得数据快取1402提供数据给弹出指令,可以比不包括图15的快速弹出装置,而且不区分弹出与载入指令的传统快取记忆体快上几个时脉周期。
在一实施例中,会使用虚拟位址334的位元[5:2]来选取双字组,而不是用fp_offset讯号396。
虽然本发明与其目的、技术特征、与优点已详细说明如上,本发明亦包括其他实施例。例如上述的堆栈快取或堆栈记忆体可以用各种方式实施,以达成具有后进先出功能的记忆体。其中一个实施例是功能为环状先进先出记忆体(circular FIFO memory)的暂存器组,有堆栈顶端与底部指标,以决定下次要推入或弹出哪个记录单位,以及堆栈何时清空。再者,虽然前面的实施例皆以x86架构的指令为主,堆栈是往记忆体位址逐渐减少的方向成长,本发明也可以应用于,堆栈指令会使堆栈往记忆体位址逐渐增加的方向成长的微处理机。此外,虽然以上的实施例只揭露一种快取线的大小,其他大小不同的快取线也可以用于本发明。
另外,虽然本发明与其目的、技术特征、与优点已详细说明如上,本发明亦包括其他实施例。除了以硬体实施之外,本发明也能以电脑可接受(例如可读取)的媒体所储存的数码来实施(例如用电脑程序码与数据等方式)。上述的电脑数码可实现本发明的功能或制造,或两者皆有。例如实现方式可以是一般程序语言(例如C、C++、JAVA,诸如此类);GDSII数据库;包括Verilog HDL、VHDL、Altera HDL(AHDL)在内的硬体描述语言(hardwaredescription languages,即HDL),诸如此类;或相关技术领域的其他程序与/或电路设计工具。上述的电脑数码可存放于电脑可接受(例如可读取)的任何已知媒体,包括半导体记忆体、磁碟(magnetic disk)、光碟(opticaldisk,例如CD-ROM与DVD-ROM,诸如此类),也能以电脑数据讯号的形式,内含于电脑可接受(例如可读取)的传输媒体,例如载波(carrier wave)或任何其他媒体,包括数位、光学、与类比式媒体。因此上述的电脑数码可通过通讯网路传递,包括网际网路(Internet)与内部网路(intranet)。本发明也能以智慧财产(intellectual property,即IP)核心,例如微处理机核心,的电脑数码(例如为其中一部分)实施,或以系统级设计,例如单芯片系统(System on Chip,即SOC)实施,并且在集成电路的制程中转换为硬体。此外,本发明也能以硬体与电脑数码的组合方式实施。
以上所述,仅是本发明的较佳实施例而已,并非对本发明作任何形式上的限制,虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明,任何熟悉本专业的技术人员,在不脱离本发明技术方案范围内,当可利用上述揭示的方法及技术内容作出些许的更动或修饰为等同变化的等效实施例,但是凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化与修饰,均仍属于本发明技术方案的范围内。
Claims (24)
1、一种随机存取快取记忆体的快速弹出装置,其特征在于其包括:
一后进先出记忆体,储存复数个列数值,该后进先出记忆体包括储存一最新列数值的一最顶端记录单位;以及
一多工器,包括:
一第一输入端,自该最顶端记录单位接收该最新列数值;
一第二输入端,接收存取该随机存取快取记忆体的一指令的一记忆体位址的一列选取部份;
一输出端,提供一数值以选取该随机存取快取记忆体的其中一列;以及
一选取输入端,指定该指令的种类,若该选取输入端指定的种类为弹出指令,则该多工器选取该第一输入端以提供于该输出端。
2、根据权利要求1所述的随机存取快取记忆体的快速弹出装置,其特征在于其中若该选取输入端指定的种类为载入指令,则该多工器选取该第二输入端以提供于该输出端;若该选取输入端指定的种类并非为弹出指令,则该多工器亦选取该第二输入端以提供于该输出端。
3、根据权利要求1所述的随机存取快取记忆体的快速弹出装置,其特征在于其中存放于该后进先出记忆体的每一个该些列数值各包括一推入指令的目标位址的一部分。
4、根据权利要求3所述的随机存取快取记忆体的快速弹出装置,其特征在于更包括下列可能变化的至少一种:
该推入指令的目标位址隐含于该推入指令,作为一堆栈指标暂存器的内容值的一相对位址形式;以及
该最新列数值包括该后进先出记忆体中的一最新推入指令的目标位址的一部分。
5、根据权利要求1所述的随机存取快取记忆体的快速弹出装置,其特征在于其中所述的记忆体位址包括存取该随机存取快取记忆体的一载入指令的一来源位址。
6、根据权利要求1所述的随机存取快取记忆体的快速弹出装置,其特征在于更包括:
一储存阵列,接收该多工器的输出,包括有复数个列,其中每一个列各储存至少一个数据快取线;其中该多工器的输出数值指定该些列其中之一。
7、根据权利要求6所述的随机存取快取记忆体的快速弹出装置,其特征在于其中所述的多工器的输出数值所指定的该列所储存的该些数据快取线其中的至少一包括一最新推入指令的目标数据,该最新推入指令为最近执行且数据尚未从一堆栈记忆体弹出的一推入指令,且该堆栈记忆体是耦接于包括该随机存取快取记忆体的一微处理机。
8、根据权利要求6所述的随机存取快取记忆体的快速弹出装置,其特征在于其中所述的随机存取快取记忆体在决定该弹出指令的一来源位址是否击中该随机存取快取记忆体之前,会输出该多工器的输出数值所指定的该列所储存的该些数据快取线的其中至少之一。
9、根据权利要求1所述的随机存取快取记忆体的快速弹出装置,其特征在于更包括:
一第二后进先出记忆体,储存多数个栏数值,该第二后进先出记忆体包括储存一最新栏数值的一最顶端记录单位;以及
一第二多工器,包括:
一第一输入端,自该第二后进先出记忆体的该最顶端记录单位接收该最新栏数值;
一第二输入端,接收一栏选取数值;
一输出端,提供一数值以选取该随机存取快取记忆体的一栏;以及
一选取输入端,指定存取该随机存取快取记忆体的该指令的种类,若该选取输入端指定的种类为弹出指令,则该第二多工器选取该第一输入端以提供于该输出端。
10、根据权利要求9所述的随机存取快取记忆体的快速弹出装置,其特征在于其中若该第二多工器的选取输入端指定的种类为载入指令,则该第二多工器选取该第二输入端以提供于该输出端,若该第二多工器的选取输入端指定的种类并非为弹出指令,则该第二多工器亦选取该第二输入端以提供于该输出端。
11、根据权利要求9所述的随机存取快取记忆体的快速弹出装置,其特征在于更包括下列可能变化的至少一种:
该第二后进先出记忆体所储存的每一个该些栏数值各指定该随机存取快取记忆体当中,储存推入指令目标数据的一个栏;以及
该第一与该第二多工器的输出数值所分别选取的该列与该栏,是指定该随机存取快取记忆体所储存的一快取线以供给该指令,其中该快取线含有该指令的来源数据。
12、根据权利要求1所述的随机存取快取记忆体的快速弹出装置,其特征在于更包括:
一位移值,指定该随机存取快取记忆体当中,该多工器的输出数值所指定的该列的一快取线当中的一数据位置。
13、根据权利要求12所述的随机存取快取记忆体的快速弹出装置,其特征在于更包括下列可能变化的至少一种:
该位移值会回应于一弹出指令而递增;以及
该位移值会回应于一推入指令而递减。
14、根据权利要求13所述的随机存取快取记忆体的快速弹出装置,其特征在于其中若该位移值的递增造成该位移值溢位,则该随机存取快取记忆体从该后进先出记忆体弹出该最新列数值。
15、根据权利要求1所述的随机存取快取记忆体的快速弹出装置,其特征在于更包括:
一比较逻辑电路,耦接至该最顶端记录单位以接收该最新列数值,并比较该最新列数值与该记忆体位址的一部分,其中该记忆体位址包括该弹出指令的一来源数据位址;以及
一例外事件输出端,耦接至该比较逻辑电路,在该最新列数值不符合该记忆体位址的该部分时,指示一例外事件状况。
16、一种随机存取快取记忆体的快速弹出方法,其特征在于其包括以下步骤:
存放一推入指令的数据至该随机存取快取记忆体当中,一列数值所指定的一列;
在该存放之后,推入该列数值至一后进先出记忆体的一最顶端记录单位;以及
在该推入之后,接收一请求以读取该随机存取快取记忆体,其中该请求指定一请求种类。
17、根据权利要求16所述的随机存取快取记忆体的快速弹出方法,其特征在于其中存放该推入指令的数据的步骤更包括:
将该推入指令的数据存放至该随机存取快取记忆体的该列的其中一栏,其中该栏是由一栏数值所指定。
18、根据权利要求17所述的随机存取快取记忆体的快速弹出方法,其特征在于更包括以下步骤:
在存放该推入指令的数据至该栏之后,将该栏数值推入一第二后进先出记忆体的一最顶端记录单位;
其中该第一与该第二后进先出记忆体为同一个后进先出记忆体。
19、根据权利要求16所述的随机存取快取记忆体的快速弹出方法,其特征在于更包括以下步骤的至少一个:
(a)决定读取该随机存取快取记忆体的步骤所使用的该栏数值,是否正确指定该随机存取快取记忆体当中,储存该弹出指令所指定的数据的一栏;
(b)在存放的步骤之后递减一位移值,其中该位移值指定该随机存取快取记忆体的一快取线其中的一数据位置,其中该快取线位于该随机存取快取记忆体当中,该列数值所指定的该列;以及
(c)决定用于读取步骤的该列数值,是否正确指定该随机存取快取记忆体中,储存该弹出指令所指定数据的一列。
20、根据权利要求19所述的随机存取快取记忆体的快速弹出方法,其特征在于更包括以下可能变化的至少一种:
步骤(a)更包括:比较该弹出指令的一来源数据位址的一部分与该随机存取快取记忆体提供的一标签数值,其中该标签数值是根据该栏数值选取;
步骤(b)更包括:若该请求种类为弹出指令,则根据该位移值读取该随机存取快取记忆体;
步骤(c)更包括:若用于读取步骤的该列数值,未能正确指定该随机存取快取记忆体当中,储存该弹出指令所指定的数据的该列,则提供正确数据给该弹出指令;以及
步骤(c)更包括:若用于读取步骤的该列数值,未能正确指定该随机存取快取记忆体当中,储存该弹出指令所指定的数据的该列,则产生一例外事件状况。
21、根据权利要求19所述的随机存取快取记忆体的快速弹出方法,其特征在于其中步骤(c)更包括:
比较该弹出指令的一来源数据位址的一部分与该列数值。
22、根据权利要求16所述的随机存取快取记忆体的快速弹出方法,其特征在于更包括以下步骤:
若读取的步骤包括自该列数值指定的一快取线当中,读取处于一位移值的位置的数据,而且该位移值指定该快取线的最后数据,则自该后进先出记忆体的该最顶端记录单位弹出该列数值。
23、根据权利要求16所述的随机存取快取记忆体的快速弹出方法,其特征在于其中推入的步骤只在该推入指令与上一个推入指令的数据位于不同快取线时执行。
24、一种内含于一传输媒体的电脑数据讯号,其特征在于其包括:
一电脑可读取程序码,提供一随机存取快取记忆体的一快速弹出装置,该电脑可读取程序码包括:
一第一程序码,提供一后进先出记忆体,以储存多数个列数值,该后进先出记忆体包括储存一最新列数值的一最顶端记录单位;以及
一第二程序码,提供一多工器,包括:
一第一输入端,自该最顶端记录单位接收该最新列数值;
一第二输入端,接收存取该随机存取快取记忆体的一指令的一记忆体位址的一列选取部份;
一输出端,提供一数值以选取该随机存取快取记忆体的其中一列;以及
一选取输入端,指定该指令的种类,若该选取输入端指定的种类为弹出指令,则该多工器选取该第一输入端以提供于该输出端。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/759,489 US7136990B2 (en) | 2003-01-16 | 2004-01-16 | Fast POP operation from RAM cache using cache row value stack |
US10/759,489 | 2004-01-16 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1627252A true CN1627252A (zh) | 2005-06-15 |
CN100378650C CN100378650C (zh) | 2008-04-02 |
Family
ID=34794781
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2005100004893A Active CN100378650C (zh) | 2004-01-16 | 2005-01-11 | 微处理机与随机存取快取记忆体的快速弹出装置及其方法 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN100378650C (zh) |
TW (1) | TWI294569B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9740484B2 (en) | 2011-12-22 | 2017-08-22 | Intel Corporation | Processor-based apparatus and method for processing bit streams using bit-oriented instructions through byte-oriented storage |
CN107250997A (zh) * | 2015-02-20 | 2017-10-13 | 高通股份有限公司 | 选择性翻译后援寄存器搜寻及页面错误 |
CN107770071A (zh) * | 2017-10-19 | 2018-03-06 | 盛科网络(苏州)有限公司 | 一种基于OpenFlow的MPLS报文处理方法及装置 |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10223204B2 (en) * | 2011-12-22 | 2019-03-05 | Intel Corporation | Apparatus and method for detecting and recovering from data fetch errors |
KR101785301B1 (ko) * | 2013-09-27 | 2017-11-15 | 인텔 코포레이션 | 디바이스들 간의 메모리 리소스를 구성하기 위한 장치, 방법 및 저장 매체 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
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 |
US6009499A (en) * | 1997-03-31 | 1999-12-28 | Sun Microsystems, Inc | Pipelined stack caching circuit |
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 |
CN1216327C (zh) * | 2003-05-15 | 2005-08-24 | 复旦大学 | 采用双指令集的32位嵌入式微处理器 |
-
2005
- 2005-01-03 TW TW94100032A patent/TWI294569B/zh active
- 2005-01-11 CN CNB2005100004893A patent/CN100378650C/zh active Active
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9740484B2 (en) | 2011-12-22 | 2017-08-22 | Intel Corporation | Processor-based apparatus and method for processing bit streams using bit-oriented instructions through byte-oriented storage |
CN107250997A (zh) * | 2015-02-20 | 2017-10-13 | 高通股份有限公司 | 选择性翻译后援寄存器搜寻及页面错误 |
CN107250997B (zh) * | 2015-02-20 | 2021-02-12 | 高通股份有限公司 | 选择性翻译后援寄存器搜寻及页面错误 |
CN107770071A (zh) * | 2017-10-19 | 2018-03-06 | 盛科网络(苏州)有限公司 | 一种基于OpenFlow的MPLS报文处理方法及装置 |
CN107770071B (zh) * | 2017-10-19 | 2021-03-23 | 盛科网络(苏州)有限公司 | 一种基于OpenFlow的MPLS报文处理方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
TWI294569B (en) | 2008-03-11 |
CN100378650C (zh) | 2008-04-02 |
TW200525351A (en) | 2005-08-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1303536C (zh) | 执行自高速缓存的快速推测式加载运算的微处理器及方法 | |
CN1641567A (zh) | 自堆栈快取存储器进行快速推测性弹出操作方法及装置 | |
CN1120425C (zh) | 存储器控制器和存储器控制方法 | |
CN1217262C (zh) | 假想分支目标地址高速缓存中置换目标地址的装置及方法 | |
CN1632877A (zh) | 可变延滞时间堆栈快取存储器及提供资料的方法 | |
CN1260646C (zh) | 附有第二预测装置的假想分支目标地址高速缓存 | |
CN1130644C (zh) | 一种在具有多系统总线的计算机系统中保持存储器相关性的系统和方法 | |
CN1296833C (zh) | 用于存储器管理的设备和方法 | |
CN1236380C (zh) | 具随机数产生器及用于存储随机数数据的指令的微处理器 | |
CN1220938C (zh) | 双调用/返回堆栈分支预测系统 | |
CN1244051C (zh) | 对于处理数据的装置和方法 | |
CN1021380C (zh) | 计算系统的命令传递 | |
CN1498367A (zh) | 信息处理装置、存储器管理装置、存储器管理方法及信息处理方法 | |
CN1641607A (zh) | 页表中维护性能监测结构用于监测程序性能的方法和设备 | |
CN1217271C (zh) | 假想分支目标地址高速缓存 | |
CN1866399A (zh) | 存储器控制器、非易失性存储器、非易失性存储系统和数据写入方法 | |
CN1107911C (zh) | 文件管理装置和方法 | |
CN1916877A (zh) | 在处理器与存储器流控制器间传送命令参数的系统和方法 | |
CN1991798A (zh) | 半导体存储装置 | |
CN1201519C (zh) | 数据一致性检测装置、数据一致性判断装置及数据挑选装置 | |
CN1427335A (zh) | 电路组控制系统 | |
CN1664777A (zh) | 用于控制信息处理设备的内部状态的装置和方法 | |
CN101044450A (zh) | 处理器 | |
CN1269030C (zh) | 高速缓存的快取线选取目标地址的装置及方法 | |
CN1627252A (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 |