TWI722635B - 管線式處理器及節電方法 - Google Patents
管線式處理器及節電方法 Download PDFInfo
- Publication number
- TWI722635B TWI722635B TW108139683A TW108139683A TWI722635B TW I722635 B TWI722635 B TW I722635B TW 108139683 A TW108139683 A TW 108139683A TW 108139683 A TW108139683 A TW 108139683A TW I722635 B TWI722635 B TW I722635B
- Authority
- TW
- Taiwan
- Prior art keywords
- memory
- instruction
- volatile memory
- program counter
- content information
- Prior art date
Links
- 238000000034 method Methods 0.000 title claims description 45
- 230000015654 memory Effects 0.000 claims abstract description 681
- 238000012545 processing Methods 0.000 claims abstract description 40
- 230000004913 activation Effects 0.000 claims abstract description 39
- 230000004044 response Effects 0.000 claims description 17
- 230000009849 deactivation Effects 0.000 claims description 8
- 230000008569 process Effects 0.000 claims description 3
- 230000001568 sexual effect Effects 0.000 claims 1
- 238000010586 diagram Methods 0.000 description 8
- 239000004065 semiconductor Substances 0.000 description 8
- 238000012986 modification Methods 0.000 description 7
- 101000634768 Homo sapiens Nucleolar protein 16 Proteins 0.000 description 4
- 102100029102 Nucleolar protein 16 Human genes 0.000 description 4
- 230000003213 activating effect Effects 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 230000004075 alteration Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000001143 conditioned effect Effects 0.000 description 1
- 238000012790 confirmation Methods 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F1/00—Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
- G06F1/26—Power supply means, e.g. regulation thereof
- G06F1/32—Means for saving power
- G06F1/3203—Power management, i.e. event-based initiation of a power-saving mode
- G06F1/3234—Power saving characterised by the action undertaken
- G06F1/3243—Power saving in microcontroller unit
-
- 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/30105—Register structure
-
- 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 or look ahead
- G06F9/3867—Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
- G06F9/3869—Implementation aspects, e.g. pipeline latches; pipeline synchronisation and clocking
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0625—Power saving in storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0683—Plurality of storage devices
- G06F3/0685—Hybrid storage combining heterogeneous device types, e.g. hierarchical storage, hybrid arrays
-
- 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/30181—Instruction operation extension or modification
-
- 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/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
- G06F9/321—Program or instruction counter, e.g. incrementing
-
- 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/34—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
-
- 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 or look ahead
- G06F9/3802—Instruction 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 or look ahead
- G06F9/3824—Operand accessing
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Advance Control (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
提供了管線式處理器,用於執行指令的管線式處理,其經歷多個階段。管線式處理器包括記憶體激活指示器和記憶體控制器。記憶體激活指示器用於存儲內容資訊,該內容資訊指示在執行當前指令時是否激活第一易失性記憶體和/或第二易失性記憶體。記憶體控制器用於根據存儲在該記憶體激活指示器中的該內容資訊,在當前指令的多個階段的特定階段中控制該第一易失性記憶體和/或該第二易失性記憶體的激活。
Description
本申請通常涉及一種計算機(computer)系統,以及更特別地,涉及一種管線式處理器(pipelined processor)以及用於管線式處理器中的記憶體子系統(memory sub-system)的節電(power-saving)方法。
許多處理裝置利用緩存(cache,亦被稱為高速緩衝記憶體)來減少對存儲在記憶體中的資訊進行存取/訪問(access)所需的平均時間。緩存是一種體積較小、速度較快的記憶體,用於存儲預期會相對頻繁使用的指令和/或資料的副本。例如,諸如中央處理單元(central processing unit,CPU)、圖形處理單元(graphical processing unit,GPU)、加速處理單元(accelerated processing units,APU)等的處理器通常與緩存或緩存記憶體元件的層次結構相關聯。預期將由CPU使用的指令或資料被從主記憶體(相對較大和較慢)移入緩存。當CPU需要讀取或寫入主記憶體中的位置時,它首先檢查以查看所需的記憶體位置是否被包括在緩存中。如果此位置被包括在緩存中(緩存命中),則CPU能夠對緩存記憶體位置中的副本執行讀取或寫入操作。如果此位置未被包括在緩存中(緩存未命中),則CPU需要存取被存儲在主記憶體中的資訊,在一些情況下,可以從主記憶體中復制資訊並將其添加到緩存中。緩存的適當配置和操作能夠將記憶體訪問的平均延遲降低到低於主記憶體的延遲的值,使其接近於緩存存儲器的值。
一種用於CPU緩存記憶體的被廣泛使用的體系結構是分層(hierarchical)緩存,其將緩存劃分為兩個級別(level),稱為L1緩存和L2緩存。L1緩存通常比L2緩存更小和更快,而L2緩存比主記憶體更小和更快。CPU首先嘗試在L1緩存中查找所需的記憶體位置,然後,當在L1緩存中無法找到記憶體位置時繼續在L2緩存和主記憶體中查找。L1緩存可以進一步細分為單獨的(separate)L1緩存,用於存儲指令(L1-I)和資料(L1-D)。L1-I緩存可被放置在需要比資料更頻繁地存取的指令的實體附近,而L1-D被放置在需要比指令更頻繁地存取的資料的實體附近。L2緩存通常與L1-I和L1-D緩存都關聯,且能夠存儲從主記憶體獲得/讀取(retrieve)的指令或資料的副本。常用指令從L2高速緩存被複製到L1-I緩存中,而常用資料可以從L2緩存被複製到L1-D緩存中。利用此配置,L2緩存被稱為統一(unified)緩存。
在下面的實施例中將參照附圖給出詳細描述。
本發明提供了一種管線式處理器,用於對要輸入的指令執行管線式處理,該指令經歷多個階段。管線式處理器包括記憶體激活指示器和記憶體控制器。記憶體激活指示器用於存儲內容資訊,該內容資訊指示在執行當前指令時是否激活第一易失性記憶體和/或第二易失性記憶體。記憶體控制器用於根據存儲在該記憶體激活指示器中的該內容資訊,在當前指令的多個階段的特定階段中控制該第一易失性記憶體和/或該第二易失性記憶體的激活。
在一實施例中,該記憶體激活指示器為程序計數器,該特定階段為取指令階段,以及,該第一易失性記憶體和該第二易失性記憶體分別為該管線式處理器中用於存儲(多條)指令的指令緩存和指令記憶體。
在一實施例中,該記憶體控制器根據存儲在該程序計數器中的程序計數器值和該內容資訊,在當前指令的該特定階段中控制該第一易失性記憶體和/或該第二易失性記憶體的激活和停用。
在一實施例中,用於當前指令的程序計數器值和內容資訊是在執行上一條指令的過程中基於順序獲取指令的方式確定出來的。
在一實施例中,響應於存儲在該程序計數器中的該程序計數器值等於當前指令所指示的程序地址,該記憶體控制器確定出存儲在該程序計數器中的該內容資訊是有效的,並根據存儲在該程序計數器中的該內容資訊在當前指令的該特定階段中激活該第一易失性記憶體或該第二易失性記憶體;以及,響應於存儲在該程序計數器中的該程序計數器值不等於當前指令所指示的程序地址,該記憶體控制器確定出存儲在該程序計數器中的該內容資訊是無效的,並在當前指令的該特定階段中激活該第一易失性記憶體和該第二易失性記憶體這兩者。
在另一實施例中,該記憶體激活指示器為該管線式處理器中的寄存器堆,該特定階段為執行階段,以及,該第一易失性記憶體和該第二易失性記憶體分別為該管線式處理器中用於存儲資料的資料緩存和資料記憶體。
在一實施例中,該第一易失性記憶體在邏輯地址中具有第一範圍,以及,該第二易失性記憶體在邏輯地址中具有第二範圍,其中,該第一範圍之後是該第二範圍,且該第一範圍和該第二範圍是連續的。
在一實施例中,該內容資訊包括記憶體資訊和距離資訊,該記憶體資訊指示在該執行階段中是否激活該第一易失性記憶體和/或該第二易失性記憶體,以及,該距離資訊指示當前指令的地址到該第一易失性記憶體的邊界的距離是否長於預定長度。
在一實施例中,在該記憶體資訊指示激活第一易失性記憶體的情況下,響應於該距離資訊指示該當前指令的地址到該第一易失性記憶體的邊界的距離長於該預定長度,該記憶體控制器在當前指令的執行階段中激活該第一易失性記憶體並停用該第二易失性記憶體。
在一實施例中,響應於該距離資訊指示該下一條指令的地址到該第一易失性記憶體的邊界的距離等於或小於該預定長度,該記憶體控制器在當前指令的執行階段中激活該第一易失性記憶體和該第二易失性記憶體這兩者。
在一實施例中,該記憶體控制器還利用當前指令的執行階段的結果和用於下一條指令的內容資訊來更新階段寄存器;其中,在當前指令的寫回階段中,該記憶體控制器利用存儲在該階段寄存器中的值更新該寄存器堆;其中,在下一條指令的執行階段中,該記憶體控制器獲取存儲在該寄存器堆中的該內容資訊,以確定是否激活該第一易失性記憶體和/或該第二易失性記憶體。
在一實施例中,該記憶體控制器還利用當前指令的執行階段的結果和用於下一條指令的內容資訊來更新階段寄存器;其中,在下一條指令的執行階段中,該記憶體控制器獲取被存儲在該階段寄存器中的該內容資訊,以確定是否激活該第一易失性記憶體和/或該第二易失性記憶體。
在一實施例中,該記憶體激活指示器為該管線式處理器中的寄存器堆,該特定階段為執行階段,以及,該第一易失性記憶體和該第二易失性記憶體分別為管線式處理器的內部記憶體和外部記憶體。
本發明還提供了一種節電方法,其用在管線式處理器的記憶體子系統中,其中,管線式處理器包括多個階段,該記憶體子系統包括第一易失性記憶體和第二易失性記憶體,該方法包括以下步驟:從該管線式處理器中的記憶體激活指示器獲取內容資訊,其中,該內容資訊指示在執行當前指令時是否激活該第一易失性記憶體和/或該第二易失性記憶體;以及,根據存儲在該記憶體激活指示器中的該內容資訊,在當前指令的多個階段的特定階段中控制該第一易失性記憶體和/或該第二易失性記憶體的激活。
在一實施例中,該記憶體激活指示器為程序計數器,該特定階段為取指令階段,以及,該第一易失性記憶體和該第二易失性記憶體分別為該管線式處理器中用於存儲指令的指令緩存和指令記憶體。
在一實施例中,該節電方法進一步包括:根據存儲在該程序計數器中的程序計數器值和該內容資訊,在當前指令的該特定階段中控制該第一易失性記憶體和/或該第二易失性記憶體的激活和停用,其中,用於當前指令的程序計數器值和內容資訊是在執行上一條指令的過程中基於順序獲取指令的方式確定出來的。
在一實施例中,該節電方法還包括:響應於存儲在該程序計數器中的該程序計數器值等於當前指令所指示的程序地址,確定出存儲在該程序計數器中的該內容資訊是有效的,並根據存儲在該程序計數器中的該內容資訊在當前指令的該特定階段中激活該第一易失性記憶體或該第二易失性記憶體;以及,響應於存儲在該程序計數器中的該程序計數器值不等於當前指令所指示的程序地址,確定出存儲在該程序計數器中的該內容資訊是無效的,並在當前指令的該特定階段中激活該第一易失性記憶體和該第二易失性記憶體這兩者。
在一實施例中,該記憶體激活指示器為該管線式處理器中的寄存器堆,該特定階段為執行階段,以及,該第一易失性記憶體和該第二易失性記憶體分別是為該管線式處理器中用於存儲資料的資料緩存和資料記憶體。
在一實施例中,該第一易失性記憶體在邏輯地址中具有第一範圍,以及,該第二易失性記憶體在邏輯地址中具有第二範圍,其中,該第一範圍之後是該第二範圍,且該第一範圍和該第二範圍是連續的。
在一實施例中,該內容資訊包括記憶體資訊和距離資訊,該記憶體資訊指示在該執行階段中是否激活該第一易失性記憶體和/或該第二易失性記憶體,以及,該距離資訊指示當前指令的地址到該第一易失性記憶體的邊界的距離是否長於預定長度。
在一實施例中,該節電方法還包括:在該記憶體資訊指示激活第一易失性記憶體的情況下,響應於該距離資訊指示該下一條指令的地址到該第一易失性記憶體的邊界的距離長於該預定長度,在當前指令的執行階段中激活該第一易失性記憶體並停用該第二易失性記憶體。
在一實施例中,該節電方法還包括:響應於該距離資訊指示該下一條指令的地址到該第一易失性記憶體的邊界的距離等於或小於該預定長度,在當前指令的執行階段中激活該第一易失性記憶體和該第二易失性記憶體這兩者。
在一實施例中,該節電方法還包括:利用當前指令的執行階段的結果和用於下一條指令的內容資訊更新階段寄存器;在當前指令的寫回階段中,利用存儲在該階段寄存器中的值更新該寄存器堆;以及,在下一條指令的執行階段中,獲取存儲在該寄存器堆中的該內容資訊,以確定是否激活該第一易失性記憶體和/或該第二易失性記憶體。
在一實施例中,該節電方法還包括:利用當前指令的執行階段的結果和用於下一條指令的內容資訊更新階段寄存器;以及,在下一條指令的執行階段中,獲取被存儲在該階段寄存器中的該內容資訊,以確定是否激活該第一易失性記憶體和/或該第二易失性記憶體。
在一實施例中,該記憶體激活指示器為該管線式處理器中的寄存器堆,該特定階段為執行階段,以及,該第一易失性記憶體和該第二易失性記憶體分別為管線式處理器的內部記憶體和外部記憶體。
以下描述為本發明實施的較佳實施例。以下實施例僅用來例舉闡釋本發明的技術特徵,並非用來限制本發明的範疇。在通篇說明書及申請專利範圍當中使用了某些詞彙來指稱特定的組件。所屬技術領域中具有通常知識者應可理解,製造商可能會用不同的名詞來稱呼同樣的組件。本說明書及申請專利範圍並不以名稱的差異來作為區別組件的方式,而係以組件在功能上的差異來作為區別的基準。本發明的範圍應當參考后附的申請專利範圍來確定。在以下描述和申請專利範圍當中所提及的術語“包含”和“包括”為開放式用語,故應解釋成“包含,但不限定於…”的意思。此外,術語“耦接”意指間接或直接的電氣連接。因此,若文中描述一個裝置耦接至另一裝置,則代表該裝置可直接電氣連接於該另一裝置,或者透過其它裝置或連接手段間接地電氣連接至該另一裝置。文中所用術語“基本”或“大致”係指在可接受的範圍內,所屬技術領域中具有通常知識者能夠解決所要解決的技術問題,基本達到所要達到的技術效果。舉例而言,“大致等於”係指在不影響結果正確性時,所屬技術領域中具有通常知識者能夠接受的與“完全等於”有一定誤差的方式。在下面的詳細描述中,為了說明的目的,闡述了許多具體細節,以便所屬技術領域中具有通常知識者能夠更透徹地理解本發明實施例。然而,顯而易見的是,可以在沒有這些具體細節的情況下實施一個或複數個實施例,不同的實施例或不同實施例中披露的不同特徵可根據需求相結合,而並不應當僅限於附圖所列舉的實施例。
第1圖係根據本發明實施例的半導體裝置的方框示意圖。如第1圖所示,半導體裝置100包括中央處理單元(CPU)105、主記憶體(main memory)150和存儲裝置(storage device)160。其中,中央處理單元(CPU)105進一步包括記憶體子系統11和12、處理核(processing core)110、寄存器堆(register file)125,以及總線介面單元(bus interface unit,BIU)130。CPU 105通過系統總線(system bus)115耦接到主記憶體150和存儲裝置160。CPU 105被配置為存取/訪問被存儲在主記憶體150中的指令和/或資料。然而,如本領域普通技術人員將理解的那樣,CPU 105意在說明,在替代實施例中,除CPU 105之外可以包括其它類型的處理器,諸如圖形處理單元(GPU)、數字信號處理器(DSP)、加速處理單元(APU)、協處理器(co-processor)、應用處理器等,或者,其它類型的處理器可以替代CPU 105。在所示的實施例中,CPU 105包括至少一個處理核110,其用於執行(execute)指令和/或操作(manipulate)資料。在可選地變型實施例中,CPU 105可包括彼此一起工作的多個處理核110。
CPU 105還實現了分級(或多級)緩存系統,該系統用於通過將選定的指令和/或資料存儲在緩存中來加快對指令和/或資料的存取/訪問。然而,本發明所屬領域普通技術人員應當理解,裝置100的替代實施例可以實現CPU 105的不同配置,例如使用外部緩存的配置。此外,本申請中描述的技術可以應用於其它處理器,諸如圖形處理單元(GPU)、加速處理單元(APU)等。
記憶體子系統11包括記憶體控制器(memory controller)121、指令緩存(instruction cache,I-Cache)126和指令記憶體(instruction memory,I-Memory)127。指令緩存126和指令記憶體127用作L1指令(L1 instruction,L1-I)記憶體。記憶體子系統12包括記憶體控制器122、資料緩存(data cache,D-Cache)123和資料記憶體(data memory,D-Memory)124。資料緩存123和資料記憶體124用作L1資料(L1 data,L1-D)記憶體。例如,資料緩存(D-Cache)123、資料記憶體(D-Memory)124、指令緩存(I-Cache)126和指令記憶體(I-Memory)127可以由單獨的靜態隨機存取記憶體(static random access memory,SRAM)來實現,但本發明實施例并不限於此。在一些實施例中,資料記憶體124和指令記憶體127可以是緊密耦合的記憶體(tightly-coupled memory,TCM)。
主記憶體150可以由動態隨機存取記憶體(dynamic random access memory,DRAM)來實現,該動態隨機存取記憶體(DRAM)具有比資料緩存123和資料記憶體124更大的記憶體容量、更長的訪問時間及更高的功耗。存儲裝置160可以是非易失性記憶體(non-volatile memory),諸如硬盤驅動器(hard-disk drive,HDD)、固態磁盤(solid-state disk,SSD)、閃存(flash memory)或只讀記憶體(read-only memory),但本發明實施例並不限於此。
資料記憶體124和資料緩存123的大小可以彼此相同或不同。例如,資料緩存123具有邏輯地址(logical address)的第一範圍,資料記憶體124具有邏輯地址的第二範圍。在一實施例中,第一範圍獨立於第二範圍,且不與第二範圍重疊。在一實施例中,第一範圍之後是第二範圍,以及,第一範圍內的邏輯地址和第二範圍內的邏輯地址是連續的。例如,第一範圍可以係從地址0到地址M-1,第二範圍可以係從地址M到地址N-1,其中,M和N係正整數,且N大於M。在可選實施例中,第一範圍和第二範圍內的地址可以係不連續的。具體地,本發明實施例不做任何限制。
類似地,指令記憶體127和指令緩存126的大小可以彼此相同或不同。例如,指令緩存126具有邏輯地址的第三範圍,指令記憶體127具有邏輯地址的第四範圍。在一實施例中,第三範圍獨立於第四範圍,且不與第四範圍重疊。在一實施例中,第三範圍之後是第四範圍,且第三範圍和第四範圍在邏輯地址上是連續的。例如,第三範圍可以係從地址0到地址P-1,第二範圍可以係從地址P到地址Q-1,其中,P和Q係正整數,且Q大於P。在可選實施例中,第三範圍和第四範圍內的地址可以係不連續的。具體地,本發明實施例不做任何限制。
記憶體控制器121可以被視為L1指令側控制器(L1 instruction-side controller)。記憶體控制器121被配置為響應於存儲在程序計數器(program counter,如第2圖中標註的210所示)中的程序地址(program address)和內容資訊(content information)來控制指令緩存126和指令記憶體127的激活(activation)和停用/去激活(deactivation)。例如,記憶體控制器121可以根據存儲在程序計數器中的程序地址和內容資訊來激活指令緩存126和/或指令記憶體127,並從指令緩存126或指令記憶體127中取/獲取(fetch)指令。例如,存儲在程序計數器中的內容資訊包括記憶體資訊(memory information)。在一些實施例中,記憶體資訊指示(indicate)在當前指令的取指令(instruction-fetch,IF)階段中是否激活指令緩存126或指令記憶體127,以及,該記憶體資訊可以由諸如2'b00,2'b01、2'b10或2'b11的兩位值(two-bit value)表示,其中,該兩位值的最高有效位(most significant bit)指示是否激活指令緩存126,該兩位值的最低有效位(least significant bit)指示是否激活指令記憶體127。
記憶體控制器122可以被視為L1資料側控制器(LI data-side controller)。記憶體控制器122被配置為響應於處理核110中的地址生成單元(address-generation unit,AGU)112的存取/訪問命令(access command)來控制資料緩存123和資料記憶體124的存取。記憶體控制器122還被配置為控制資料記憶體124和資料緩存123的激活和停用/去激活。在一實施例中,資料記憶體124或資料緩存123被記憶體控制器122根據來自地址生成單元的地址資訊和當前執行的指令的內容資訊激活。在一實施例中,記憶體控制器121和記憶體控制器122可以包括能夠將虛擬記憶體地址轉換為實體地址的記憶體管理單元(memory management unit,MMU)或記憶體保護單元(memory protection unit,MPU)。
寄存器堆(register file)125是CPU 105中的處理器寄存器(processor register)的陣列。例如,寄存器堆125可以包括預定數量的寄存器,並且每個寄存器具有固定的寬度,其中,預定數量和寄存器的寬度取決於CPU 105的架構。在一實施例中,寄存器堆125中的寄存器可以是通用寄存器,其存儲由CPU 105的執行單元處理的中間結果資料。可替換地或另外地,寄存器堆125中的寄存器可以進一步包括堆棧指針(stack pointer)、鏈接寄存器(link register)、程序計數器(program counter,PC)、當前程序狀態寄存器(current program status register,CPSR)、分組寄存器(banked register)等,但本發明實施例并不限於此。
在一實施例中,寄存器堆125中的每個寄存器除了原始寄存器值之外還包括用於其預期目的的內容資訊。例如,內容資訊包括記憶體資訊和距離資訊(distance information)。記憶體資訊可以指示在當前指令的執行階段中是否激活資料緩存123或資料記憶體124,以及,記憶體資訊可以由諸如2'b00、2'b01,2'b10或2'b11的兩位值表示,其中,兩位值的最高有效位指示是否激活資料緩存123,兩位值的最低有效位指示是否激活資料記憶體124。
假定記憶體資訊的兩位值為2'b11,則記憶體控制器122在執行當前指令的記憶體存取操作的同時激活資料緩存123和資料記憶體124。例如,由於記憶體控制器122不能夠確定要存取的地址是位於資料緩存123還是資料記憶體124內,因此,可以將2'b11的記憶體資訊用於初始條件。假定記憶體資訊的兩位值為2'b10,則記憶體控制器122在執行當前指令的記憶體存取操作的同時激活資料緩存123並停用/去激活資料記憶體124。假定記憶體資訊的兩位值為2’b01,則記憶體控制器122在執行當前指令的記憶體存取操作時激活資料記憶體124並停用/去激活資料緩存123。假定記憶體資訊的兩位值為2’b00,則由於當前指令不需要存取/訪問記憶體,因此記憶體控制器122停用/去激活資料記憶體124和資料緩存123這兩者。
距離資訊指示當前地址到資料緩存123的邊界的距離是否長於或大於預定長度(例如32字節),但本發明實施例并不限於此。距離資訊可以由一位值(1-bit value)表示,該值可以幫助確定下一條指令的地址是位於資料緩存123還是資料記憶體124中。
在一實施例中,內容資訊可因算術指令(例如,ADD,SUB,MPY,DIV等)、邏輯指令(例如,AND,OR,XOR等)、寄存器移動指令(register-movement instruction)或記憶體存取指令而改變。
第2圖係根據本發明實施例的CPU中的指令管線(instruction pipeline)的方框示意圖。
在一實施例中,CPU 105中的指令管線可以被劃分為四個階段(four stages),諸如取指令(instruction-fetch,IF)階段、指令解碼(instruction-decode,ID)階段、執行(execution,EX)階段和寫回(write-back,WB)階段。這些階段被安排成使得新指令被存儲在每個階段的輸入寄存器中,而在該階段中計算出的結果被存儲在隨後(subsequent)階段的輸入寄存器中。例如,在當前指令的取指令(IF)階段中,處理核110讀取被存儲在程序計數器(PC)中的程序地址,然後根據存儲在程序計數器中的程序地址將來自指令緩存126或指令記憶體127的當前指令提取(fetch)到指令寄存器(未顯示)中。在一實施例中,程序計數器可以是寄存器堆125中的寄存器之一,或者是獨立的寄存器。
在一實施例中,除程序地址外,程序計數器還包括內容資訊。例如,存儲在程序計數器中的內容資訊指示在當前指令的取指令(IF)階段中是否激活和停用/去激活指令緩存126和/或指令記憶體127,或者說,存儲在程序計數器中的內容資訊指示在當前指令的取指令(IF)階段中是否激活指令緩存126和/或指令記憶體127。在另一實施例中,記憶體控制器121根據存儲在程序計數器中的程序地址和內容資訊這兩者確定在當前指令的取指令(IF)階段中是否激活和停用/去激活指令緩存126和/或指令記憶體127。其細節將在後面進行描述。
在指令解碼(ID)階段期間,處理核110的指令解碼器113解碼已提取的指令、從寄存器堆125中的一個或多個寄存器獲得(retrieve)與被解碼的指令相關聯的操作數(operands),並將已獲得的操作數寫入一個或多個指令寄存器。
在執行(EX)階段期間,處理核110和記憶體控制器122從指令寄存器獲得當前指令的地址。例如,如果當前指令是記憶體存取指令(也就是說,需要訪問/存取資料緩存或資料記憶體的任意指令),則處理核110的地址生成單元(AGU)112計算記憶體地址,以通過記憶體控制器122從資料緩存123和/或資料記憶體124獲取資料。在執行(EX)階段,處理核110的算術邏輯單元(ALU)111還可以執行算術運算(例如,ADD、SUB、MPY、DIV、SHIFT等)和/或邏輯運算(例如,AND、OR、NOT、NAND、NOR、XOR、XNOR等),以及,執行的操作需要一個或多個時鐘週期,具體取決於指令的類型。另外,記憶體控制器122可以生成用於下一條指令的內容資訊,該內容資訊用以指示針對下一條指令是否激活資料緩存123和/或資料記憶體124。執行(EX)階段的結果和計算資訊被存儲在寄存器240中,寄存器240為階段寄存器(stage register)。
在寫回(WB)階段期間,記憶體控制器122(或處理核110)將存儲在寄存器240中的值更新至寄存器堆125中的關聯寄存器。應當注意,寄存器堆125中的該寄存器在寫回(WB)階段之後包括更新後(updated)的內容資訊,以及,在寄存器堆125中具有更新後的內容資訊的寄存器可以在下一條指令(或稍後執行的指令)的執行(EX)階段中使用。具體地,存在“轉發路徑(forwarding path)”241用於具有更新後的內容資訊的寄存器,使得在當前執行的指令的寫回(WB)階段(即,第四階段)中進行更新的內容資訊能夠在下一條指令(或稍後執行的指令)的執行(EX)階段(即,第三階段)中使用。替代地或附加地,在執行(EX)階段的輸入和存儲執行(EX)階段的結果及內容資訊的寄存器240(例如,階段寄存器)之間存在另一轉發路徑242。例如,在執行(EX)階段,記憶體控制器122(或處理核110)也將計算出的內容資訊寫入寄存器240,使得存儲在寄存器240中的值和內容資訊能夠被立即用作下一條指令的執行(EX)階段的輸入,從而減少了指令管線中可能的停頓。
為了描述的目的,在示例實施例中,CPU 105是32位CPU,寄存器堆125包括16個寄存器,以及,寄存器堆125中的每個寄存器的寬度為32位加上內容資訊(例如,2位值)和距離資訊(例如,1位值)的3個附加位,但本發明實施例并不限於此。
在一實施例中,在取指令(IF)階段,CPU 105中有兩種類型的取指令方式,例如順序獲取和非順序獲取。例如,如果執行順序獲取,則意味著下一條指令的程序計數器(PC)值(Next_PC)是通過將當前指令的指令長度(instruction_length)與當前的程序計數器值(Current_PC)相加計算的,該值可表示成等式(1):
Next_PC==Current_PC+instruction_length(1)
表1根據本發明實施例示出了CPU 105執行利用順序獲取的指令的示例。
表1
PC | 指令 | PC序號 | 記憶體資訊 |
0×00 | ADD, R0, R1, R2 | PC+0×4 | 2’b11 |
0×04 | NOP | PC+0×4 | 2’b10 |
0×08 | SUB, R3, R4, R5 | PC+0×4 | 2’b10 |
0×0C | NOP | PC+0×4 | 2’b10 |
0×10 | NOP16 | PC+0×2 | 2’b10 |
0×12 | MPY, R7, R8, R9 | PC+0×4 | 2’b10 |
在一實施例中,程序計數器210不包括內容資訊。在執行第一指令“ADD”的同時,記憶體控制器121激活並獲取指令緩存126和指令記憶體127這兩者,以及,程序計數計算器(program-count calculator)220通過將ADD的指令長度(例如4個字節)與當前的程序計數器值Current_PC(例如0×0)相加來計算用於下一條指令的程序計數器值Next_PC,從而獲得程序計數器值Next_PC=0×0+0×4=0×4。在執行第二指令“NOP”的同時,記憶體控制器121同樣激活並獲取指令緩存126和指令記憶體127,以及,程序計數計算器220通過將NOP的指令長度(例如4個字節)與當前的程序計數器值Current_PC(例如,0×4)相加來計算用於下一條指令的程序計數器值Next_PC,從而獲得程序計數器值Next_PC=0×4+0×4=0×8。
在執行第三指令“SUB”的同時,記憶體控制器121同樣激活並獲取指令緩存126和指令記憶體127,以及,程序計數計算器220通過將SUB的指令長度(例如4個字節)與當前的程序計數器值Current_PC(例如0×8)相加來計算用於下一條指令的程序計數器值Next_PC,從而獲得程序計數器值Next_PC=0×8+0×4=0×C。在執行第四指令“NOP”的同時,記憶體控制器121同樣激活並獲取指令緩存126和指令記憶體127,以及,程序計數計算器220通過將NOP的指令長度(例如4個字節)與當前的程序計數器值Current_PC(例如,0×C)相加來計算用於下一條指令的程序計數器值Next_PC,從而獲得程序計數器值Next_PC=0×C+0×4=0×10。
應當注意,諸如“NOP16”之類的一些指令的長度與CPU 105所定義的指令集的寬度不對齊。例如,在執行第五指令“NOP16”時,記憶體控制器121同樣激活並獲取指令緩存126和指令記憶體127,以及,程序計數計算器220通過將NOP16的指令長度(例如2個字節)與當前的程序計數器Current_PC(例如0×10)相加來計算用於下一條指令的程序計數器值Next_PC,從而獲得程序計數器值Next_PC=0×10+0×2=0×12。在執行第六指令“MPY”的同時,記憶體控制器121同樣激活並獲取指令緩存126和指令記憶體127,以及,程序計數計算器220通過將MPY的指令長度(例如4個字節)與當前的程序計數器Current_PC(例如0×12)相加來計算用於下一條指令的程序計數器值Next_PC,從而獲得程序計數器值Next_PC=0×12+0×4=0×16。用於下一條指令的程序計數器值可以按上述類似方式計算。
在另一實施例中,程序計數器210包括內容資訊(例如,表1中的記憶體資訊)。在執行第一指令“ADD”的同時,記憶體控制器121激活並獲取指令緩存126和指令記憶體127,以及,程序計數計算器220通過將ADD的指令長度(例如4個字節)與當前的程序計數器值Current_PC(例如0×0)相加來計算用於下一條指令的程序計數器值Next_PC,從而獲得程序計數器值Next_PC=0×0+0×4=0×4。例如,在初始條件下,存儲在程序計數器210中的關於是否激活指令緩存126和/或指令記憶體127的內容資訊為空。因此,記憶體控制器121不能確定存儲在程序計數器210中的程序地址的確切位置是位於指令緩存126內還是指令記憶體127內,以及,記憶體控制器121必須激活指令緩存126和指令記憶體127這兩者。然後,記憶體控制器121檢查已計算出的下一條指令的程序計數器值Next_PC(即,0×4)的記憶體屬性(memory attribute),以確定所計算出的程序計數器值Next_PC是否位於指令緩存126或指令記憶體127內。例如,在該實施例中,記憶體控制器121確定所計算出的程序計數器值Next_PC的地址0x4位於指令緩存126中,并使用2'b10(即,路徑201)將用於下一條指令NOP的內容資訊更新到程序計數器210。
在執行第二指令“NOP”的同時,記憶體控制器121根據存儲在程序計數器210中的內容資訊(如表1中示出的記憶體資訊)激活並獲取指令緩存126,以及,程序計數計算器220通過將NOP的指令長度(例如4個字節)與當前的程序計數器值Current_PC(例如0×4)相加來計算用於下一條指令的程序計數器值Next_PC,從而獲得程序計數器Next_PC=0×4+0×4=0×8。例如,在該實施例中,記憶體控制器121確定計算出的程序計數器值Next_PC的地址0x8位於指令緩存126中,並使用2’b10將內容資訊更新到程序計數器210。類似地,在表1中的後續指令中,記憶體控制器121可以確定計算出的程序計數器值Next_PC的地址位於指令緩存126中,並用2'b10將內容資訊更新到程序計數器210。因此,在執行表1中的第三指令、第四指令、第五指令和第六指令中的每一個指令的同時,記憶體控制器121根據存儲在程序計數器中的內容資訊來激活和獲取指令緩存126。特別地,在執行表1中的剩餘指令的每一指令的同時,除計算下一條指令的程序計數器值Next_PC之外,記憶體控制器121還檢查計算出的下一條指令的程序計數器值Next_PC的記憶體屬性,以確定計算出的程序計數器值Next_PC是位於指令緩存126中還是指令記憶體127中,并將用於下一條指令的內容資訊更新到程序計數器210。
CPU 105通常從L1指令記憶體(即,可以是指令緩存126或指令記憶體127)中順序獲取指令,但是控制轉移指令(control-transfer instruction)通過在程序計數器中放置新值來改變順序(即,非順序獲取)。這些包括分支(有時稱為跳轉)、子例程調用(subroutine call)和返回(return)。以一些判定(例如,if-else條件)的真性為條件的轉移使計算機在不同條件下遵循不同的順序。例如,分支(branch)提供了從記憶體中的其它地方獲取下一條指令。子例程調用不僅分支,而且還將PC先前的內容保存在某個地方。返回(return)將獲取保存在PC中的內容並將其放回PC中,並在子例程調用之後利用指令恢復順序執行。
在一實施例中,CPU 105可以執行以下代碼:
{
A=B+C; //B=1, C=1
If (A>0)
function_0(A);
Else
function_1(A);
}
這些代碼可以被編譯成具有表2所示的非順序獲取的指令。
表2
PC | 指令 | PC序號 | 記憶體資訊 |
0×00 | ADD, R0, R1, R2 | PC+0×4 | 2’b11 |
0×04 | If (A>0) PC=0xC Else PC=0x8 | PC+0×4 | 2’b10 |
0×0C | Function_0 PC=0×2000 | PC+0×4 | 2’b10 |
0×2000 | MPY, R7, R8, R9 | PC+0×4 | 2’b10 |
0×2004 | NOP | PC+0×4 | 2’b01 |
0×2008 | NOP | PC+0×4 | 2’b01 |
在表2的實施例中,假設指令緩存126的範圍是從地址0×0到地址0x1FFF,以及,指令記憶體127的範圍是從地址0×2000到0x3FFF。
在一實施例中,程序計數器不包括內容資訊。在執行第一指令“ADD”時,記憶體控制器121激活指令緩存126和指令記憶體127這兩者,並從指令緩存126和指令記憶體127獲取指令,以及,程序計數計算器220通過將ADD的指令長度(例如4個字節)與當前的程序計數器值Current_PC(例如0×0)相加來計算用於下一條指令的程序計數器值Next_PC,從而獲得程序計數器值Next_PC=0×0+0×4=0×4。
在執行第二指令時,記憶體控制器121同樣激活指令緩存126和指令記憶體127這兩者,並從指令緩存126和指令記憶體127獲取指令,以及,程序計數計算器220通過將當前指令的指令長度(例如4個字節)與當前的程序計數器值Current_PC(例如0×04)相加來得到下一條指令的程序計數器值Next_PC,從而獲得程序計數器值Next_PC=0×4+0×4=0×8。然而,在A>0的情況下,通過第二指令,程序計數器值Next_PC被設置為0×C,因此處理核110將地址0xC處的指令作為第三指令來執行。
在第三指令中,Function_0被執行。記憶體控制器121同樣激活並獲取指令緩存126和指令記憶體127這兩者,以及,程序計數計算器220通過將當前指令的指令長度(例如4個字節)與當前的程序計數器值Current_PC(例如,0×C)相加來計算下一條指令的程序計數器值Next_PC,從而獲得程序計數器值Next_PC=0×C+0×4=0×10。然而,通過第三指令,程序計數器值Next_PC被設置為0×2000,因此,地址0×2000處的指令作為第四指令且處理核110執行地址0×2000處的指令。
在執行第四指令“MPY”的同時,記憶體控制器121激活指令緩存126和指令記憶體127這兩者,以及,程序計數計算器220通過將MPY的指令長度(例如4個字節)與當前的程序計數器值Current_PC(例如0×2000)相加來計算下一條指令的程序計數器值Next_PC,從而獲得程序計數器值Next_PC=0×2000+0×4=0×2004。在執行第五指令時,記憶體控制器121同樣激活指令緩存126和指令記憶體127這兩者,並從指令緩存126和指令記憶體127獲取指令,以及,程序計數計算器220通過將當前指令的指令長度(例如4個字節)與當前的程序計數器值Current_PC(例如0×2004)相加來得到下一條指令的程序計數器值Next_PC,從而獲得程序計數器值Next_PC=0×2004+0×4=0×2008。
具體地說,無論執行順序獲取還是非順序獲取,如果程序計數器210不包括內容資訊,則記憶體控制器121在執行每個記憶體存取指令時必須激活指令緩存126和指令記憶體127這兩者並從指令緩存126和指令記憶體127獲取指令,這導致半導體裝置100的功耗較高。
在另一實施例中,程序計數器210包括內容資訊,該內容資訊指示是否激活指令緩存126和/或指令記憶體127。在執行第一指令“ADD”時,記憶體控制器121激活指令緩存126和指令記憶體127這兩者,並從指令緩存126和指令記憶體127獲取指令,以及,程序計數計算器220通過將ADD的指令長度(例如,4個字節)與當前的程序計數器值Current_PC(例如0×0)相加來計算下一條指令的程序計數器值Next_PC,從而獲得程序計數器值Next_PC=0×0+0×4=0×4。例如,在初始條件下,存儲在程序計數器210中的關於是否激活指令緩存126和/或指令記憶體127的內容資訊為空。因此,記憶體控制器121必須激活並獲取指令緩存126和指令記憶體127這兩者。然後,記憶體控制器121檢查所計算出的下一條指令的程序計數器值Next_PC(即,0×4)的記憶體屬性,以確定計算出的程序計數器值Next_PC是否位於指令緩存126內或指令記憶體127內。例如,在該實施例中,記憶體控制器121確定計算出的程序計數器值Next_PC的地址0×4位於指令緩存126中,並將計算出的程序計數器值和內容資訊更新到程序計數器210。
在執行表2中的第二條指令時,記憶體控制器121激活指令緩存126,並從激活的指令緩存126獲取指令。然後,程序計數計算器220通過將當前指令的指令長度(例如4個字節)與當前的程序計數器值Current_PC(例如0×4)相加來計算下一條指令的程序計數器值Next_PC,從而獲得程序計數器值Next_PC=0×4+0×4=0×8。然而,通過第二指令,程序計數器值Next_PC被設置為0×C,因此處理核110將地址0xC處的指令作為第三指令來執行。然後,記憶體控制器121檢查計算出的下一條指令的程序計數器值Next_PC(即,0×C)的記憶體屬性(其指示該下一條指令的記憶體資訊是2'b10),以確定計算出的程序計數器值Next_PC位於指令緩存126中。因此,記憶體控制器121將用於下一條指令的程序計數器值Next_PC和內容資訊(例如2’b10)更新到程序計數器210中。也就是說,在本發明實施例中,在執行當前指令的過程(例如,ID階段)中會提前計算/確定用於下一條指令的程序計數器值和內容資訊。
然而,按順序獲取指令的方式計算出的程序計數器值Next_PC(例如,0×8)不等於第三指令的實際程序地址(例如,0×C),即屬於非順序獲取指令的方式。因此,存儲在程序計數器210中的用於第三指令的內容資訊是無效的,以及,記憶體控制器121在執行第三指令的同時激活指令緩存126和指令記憶體127這兩者並從指令緩存126和指令記憶體127獲取資料。然後,程序計數計算器220通過將當前指令的指令長度(例如4個字節)與當前的程序計數器值Current_PC(例如0×C)相加來計算下一條指令的程序計數器值Next_PC,從而獲得程序計數器值Next_PC=0×C+0×4=0×10。同時,記憶體控制器121確定計算出的程序計數器值Next_PC位於指令緩存器126內,其指示該下一條指令的記憶體資訊是2’b10。然而,通過第三指令,程序計數器值Next_PC被設置為0×2000,因此處理核110將地址0×2000處的指令作為第四指令來執行。
類似地,按順序獲取指令的方式計算出的程序計數器值(存儲在程序計數器210中)Next_PC(例如,0×10)不等於第四指令的實際程序地址(例如,0×2000)。因此,存儲在程序計數器210中的第四指令的內容資訊是無效的,以及,記憶體控制器121在執行第四指令的同時激活指令緩存126和指令記憶體127這兩者並從指令緩存126和指令記憶體127獲取資料。然後,程序計數計算器220通過將MPY的指令長度(例如4個字節)與當前程序計數器Current_PC(例如0×2000)相加來計算下一條指令的程序計數器Next_PC,從而獲得程序計數器值Next_PC=0×2000+0×4=0×2004。同時,記憶體控制器121確定計算出的程序計數器值Next_PC位於指令記憶體127內,其指示下一條指令的記憶體資訊為2’b01。
由於計算出的程序計數器值(存儲在程序計數器210中)Next_PC(例如,0×2004)等於第五指令的實際程序地址(例如,0×2004),即順序獲取指令的方式,因此用於第五指令的內容資訊是有效的。在執行第五指令時,記憶體控制器121激活指令記憶體127並停用/去激活指令緩存126,且從指令記憶體127獲取指令。然後,程序計數計算器220通過將當前指令的指令長度(例如4個字節)與當前程序計數器Current_PC(例如0×2004)相加來計算下一條指令的程序計數器值Next_PC,從而獲得程序計數器值Next_PC=0×2004+0×4=0×2008。然後,記憶體控制器121檢查計算出的下一條指令的程序計數器值Next_PC(即,0×2008)的記憶體屬性,並確定所計算出的程序計數器值Next_PC位於指令記憶體127內,其指示該下一條指令的記憶體資訊是2'b01。
具體地說,如果程序計數器210包括內容資訊(如表2中所示的記憶體資訊),則記憶體控制器121在執行記憶體存取指令時能夠精確地激活并獲取指令緩存126和/或指令記憶體127,而無需“預測”,從而減少了半導體裝置100的功耗。每次在取指令(IF)階段獲取指令時,記憶體控制器121(或處理核110)利用已經計算出的用於下一條指令的程序計數器值和內容資訊來更新程序計數器210。也就是說,本發明實施例在執行當前指令的同時確定出接下來要執行的下一條指令是應該從指令緩存126取還是從指令記憶體127取,從而,在執行下一條指令時能夠有目的性地激活并獲取指令緩存126或者指令記憶體127,而不是盲目地激活并獲取指令緩存126和指令記憶體127這兩者,從而可以達到節電的目的。
在一實施例中,內容資訊可以在加載或存儲指令(load or store instruction)中使用,以減少執行(EX)階段的功耗。例如,加載或存儲指令有兩種模式,諸如偏移模式(offset mode)和後修改模式(post-modify mode)。在偏移模式下,加載指令Load(Rd,Rs+Offset)的輸入地址是基地址(base address)Rs加偏移量(即Rs+Offset),以及,地址(Rs+Offset)的值被加載到寄存器Rd,其中,基地址Rs未被修改。
表3示出了使用偏移模式的加載指令的可行操作。
表3
基地址 | 記憶體資訊 | 距離 資訊 | 偏移量 | 激活的記憶體 |
Rs | 2’b10 | 0 | 0×0 | D-Cache |
Rs | 2’b10 | 0 | >0 | D-Cache & D-Memory |
Rs | 2’b10 | 1 | >=32字節 | D-Cache |
參照表3,假定基地址Rs在資料緩存123的地址範圍內。在一些實施例中,表3中的記憶體資訊指示當前指令(如存取指令、加載或存儲指令)的基地址是指向資料緩存還是指向資料記憶體,例如,若基地址在資料緩存123的地址範圍內(即指向資料緩存),則記憶體資訊可以表示為2’b10,若基地址在資料記憶體124的地址範圍內(即指向資料記憶體),則記憶體資訊可以表示為2’b01。距離資訊指示當前指令的基地址到資料緩存的邊界的距離是否小於或等於預定長度(如32字節),例如,若基地址Rs到資料緩存123的邊界的距離小於(或等於)32字節,則距離資訊可以表示為0,若基地址Rs到資料緩存123的邊界的距離長於或大於32個字節,則距離資訊可表示為1。
在第一種情況下,記憶體資訊為2'b10,距離資訊為0,偏移量為0×0。記憶體資訊指示:在執行(EX)階段,資料緩存123應被激活而資料記憶體124應被去激活/停用,距離資訊(為0)指示基地址Rs到資料緩存123的邊界的距離小於(或等於)32字節。由於加載指令的偏移量是0×0,則(Rs+Offset)的求和值等於基地址Rs,從而處於資料緩存123的地址範圍內。因此,記憶體控制器122在加載指令的執行(EX)階段中激活資料緩存123並停用/去激活資料記憶體124,從而將資料緩存123中的地址(Rs+Offset)處的值加載到寄存器Rd。
第二種情況中的條件與第一種情況中的條件類似,不同之處在於當前指令的偏移量大於0。由於基地址Rs到資料緩存123的邊界的距離小於32個字節(距離資訊為0),從而(Rs+Offset)的求和值可能會超過資料緩存123的邊界。因此,在當前指令的執行(EX)階段中,記憶體控制器122不能精確地確定加載指令的輸入地址(Rs+Offset)是位於資料緩存123內還是位於資料記憶體124內。因此,記憶體控制器122在加載指令的執行(EX)階段中激活資料緩存123和資料記憶體124這兩者,從而將資料緩存123或資料記憶體124中的地址(Rs+Offset)處的值加載到寄存器Rd。
在第三種情況下,記憶體資訊為2'b10,距離資訊為1,以及,偏移量小於或等於32個字節。由於基地址Rs到資料緩存123的邊界的距離長於或大於32個字節(距離資訊為1),且偏移量小於或等於32個字節,因此(Rs+Offset)的求和值將不會超出資料緩存123的邊界。因此,記憶體控制器122確定加載指令的輸入地址(Rs+Offset)位於資料緩存123的地址範圍內。因此,記憶體控制器122在加載指令的執行(EX)階段中激活資料緩存123並停用/去激活資料記憶體124,從而將資料緩存123中的地址(Rs+Offset)處的值加載到寄存器Rd。
在後修改模式中,加載指令Load(Rd,Rs+=Offset)的輸入地址是基地址Rs,以及,來自基地址Rs的值被加載到寄存器Rd中,其中,基地址Rs的值在加載指令被執行完之後被修改為(Rs+Offset)。
在一實施例中,假設基地址Rs處於資料緩存123的地址範圍內,以及,記憶體資訊、距離資訊和當前的偏移量分別為2'b10、0和0×0。由於在將基地址Rs的值加載到寄存器Rd之後,基地址Rs被修改為(Rs+Offset),因此,距離資訊和當前的偏移量將不影響用於激活或停用/去激活資料緩存123和/或資料記憶體124的確定。因此,在後修改模式下,記憶體控制器122在加載指令的執行(EX)階段中激活資料緩存123並停用/去激活資料記憶體124,從而將資料緩存123中的基地址(Rs)處的值加載到寄存器Rd。此外,在執行當前指令的過程中,進一步確定用於下一條指令(如存取指令、加載或存儲指令)的記憶體資訊和距離資訊,例如,若確定出修改後的地址(Rs+Offset)處於資料緩存123的地址範圍內,則用於下一條指令的記憶體資訊可以表示為2’b10,若確定出修改後的地址(Rs+Offset)處於資料記憶體124的地址範圍內,則用於下一條指令的記憶體資訊可以表示為2’b01,以及,若確定出修改後的地址(Rs+Offset)到資料緩存123的邊界的距離小於或等於預定長度(如32字節),則用於下一條指令的距離資訊可以表示為0,若確定出修改後的地址(Rs+Offset)到資料緩存123的邊界的距離大於或長於預定長度,則用於下一條指令的距離資訊可以表示為1。在本發明實施例描述的後修改模式中,當前指令的記憶體資訊和距離資訊是在執行上一條指令的過程(特別地,在執行階段)中確定出來的。
第3圖係根據發明另一實施例的CPU的指令管線中的執行(EX)階段的方框示意圖。參考第1圖和第3圖,在另一實施例中,存儲在寄存器堆125的每個寄存器中的內容資訊幫助確定要存取的地址是屬於內部記憶體之一(例如,資料緩存123或資料記憶體124)還是外部記憶體。外部記憶體可以是主記憶體150或存儲裝置160。
具體地說,外部記憶體的訪問時間(即等待時間)比內部記憶體的訪問時間長得多。因此,如果記憶體控制器122將要從內部記憶體或外部記憶體訪問/存取資料,則記憶體控制器122必須確保要訪問/存取的地址的確切位置。如果記憶體控制器122錯誤地從外部記憶體獲取資料,則將浪費數十或數百個時鐘週期,然後記憶體控制器122必須丟棄從外部記憶體獲取到的資料並從內部記憶體獲取正確的資料。另外,對外部記憶體的推測(speculative)訪問/存取將造成系統總線115的擁堵,並且推測訪問/存取的結果可能是錯誤的。因此,記憶體控制器122不允許對外部記憶體的推測訪問/存取,以及,在記憶體控制器122已經確定出要訪問/存取的地址的確切位置之後,記憶體控制器122根據來自AGU 112的地址資訊和來自寄存器堆125的內容資訊開始從內部記憶體或外部記憶體讀取資料。換句話說,記憶體控制器122將等待確切的記憶體屬性資訊,然後確定是提取內部記憶體還是外部記憶體(即,假設內部記憶體和外部記憶體被激活),從而減少CPU 105的等待時間(latency)。
表4示出了使用偏移模式的加載指令的可行操作。
表4
基地址 | 記憶體資訊 | 距離資訊 | 偏移量 | 等待記憶體屬性 |
Rs | 2’b10 | 0 | 0×0 | No |
Rs | 2’b10 | 0 | > 0 | Yes |
Rs | 2’b10 | 1 | >=32字節 | No |
參照表4,假定基地址Rs處於內部記憶體(即資料緩存123和資料記憶體124)的地址範圍內。
表4與表3非常相似。但是,在表4的實施例中,記憶體控制器122必須確定是從內部記憶體還是從外部記憶體獲取資料,且外部記憶體僅在需要時才被存取/訪問。
例如,在表4的第一種情況下,記憶體資訊為2'b10,距離資訊為0(基地址到內部記憶體的邊界的距離小於預定長度,如32字節),偏移量為0×0。由於加載指令的偏移量為0×0,因此(Rs+Offset)的求和值等於Rs,其處於內部記憶體的地址範圍內。因此,記憶體控制器122能夠快速地確定出要存取的地址位於內部記憶體內。因此,記憶體控制器122不需要等待來自AGU 112的地址資訊,並在加載指令的執行(EX)階段中從內部記憶體獲取資料,從而將內部記憶體中的地址(Rs+Offset)處的值加載到寄存器Rd。
第二種情況的條件與第一種情況的條件類似,不同之處在於偏移量大於0。由於從基地址Rs到內部記憶體邊界的距離小於32個字節(距離資訊為0),因此(Rs+Offset)的求和值可能會超出內部記憶體的邊界。因此,在第二種情況下,記憶體控制器122不能精確地確定加載指令的輸入地址(Rs+Offset)是位於內部記憶體內還是位於外部記憶體內。因此,記憶體控制器122必須等待來自AGU 112的地址資訊,並且根據該地址資訊確定要存取的地址是位於內部記憶體內還是位於外部記憶體內。如果來自AGU 112的地址資訊指示要存取的地址位於內部記憶體中,則記憶體控制器122在加載指令的執行(EX)階段從內部記憶體獲取資料,從而將資料緩存123或資料記憶體124中的地址(Rs+Offset)處的值加載到寄存器Rd。相反,如果來自AGU 112的地址資訊指示要存取的地址位於外部記憶體內,則記憶體控制器122在加載指令的執行(EX)階段中從外部記憶體獲取資料,從而將外部記憶體中的地址(Rs+Offset)處的值加載到寄存器Rd。
在第三種情況下,記憶體資訊為2'b10,距離資訊為1,且偏移量小於或等於32個字節。由於從基地址Rs到資料緩存123的邊界的距離長於或大於32個字節,且偏移量小於或等於32個字節,因此(Rs+Offset)的求和值將不會超出資料緩存123的邊界。因此,記憶體控制器122快速地確定出加載指令的輸入地址(Rs+Offset)位於資料緩存123的地址範圍內。因此,記憶體控制器122在加載指令的執行(EX)階段從內部記憶體獲取資料,從而將內部記憶體中的地址(Rs+Offset)的值加載到寄存器Rd。
類似地,在後修改模式中,加載指令Load(Rd,Rs+=Offset)的輸入地址是基地址Rs,以及,地址Rs處的值被加載到寄存器Rd中,其中,地址Rs被修改為(Rs+Offset)以進行下一個操作。
在一實施例中,假設基地址Rs處於資料緩存123的地址範圍內,以及,記憶體資訊、距離資訊和當前偏移分別為2'b10、0和0×0。由於是在將資料緩存123的地址Rs中的值加載到寄存器Rd中之後,地址Rs才被修改為(Rs+Offset),因此,距離資訊和當前偏移將不影響用於獲取內部記憶體或外部記憶體的確定。因此,在後修改模式下,記憶體控制器122在加載指令的執行(EX)階段中根據記憶體資訊(例如,其值為2’b10)從內部記憶體獲取資料,從而將內部記憶體中的地址(Rs)處的值加載到寄存器Rd。
在一些實施例中,可以將表3的實施例中描述的技術與表4的實施例中描述的技術結合在一起。更特別地,內容資訊中的記憶體資訊可以擴展到三位或更多位,以及,距離資訊可以擴展到兩位或更多位。如果存在三個記憶體要存取,例如資料緩存123、資料記憶體124和主記憶體150,則記憶體資訊的3位值可以指示是否存取內部記憶體(即,包括資料緩存123和資料記憶體124)或外部記憶體(即主記憶體150)以及是否激活和獲取資料緩存123或資料記憶體124。
例如,三位值的最高有效位可以指示是否激活資料緩存123并從資料緩存123獲取資料。三位值的第二最高有效位指示是否激活資料記憶體124并從資料記憶體124獲取資料。三位值的最低有效位指示是否從主記憶體150獲取資料。
換句話說,在執行(EX)階段中,記憶體控制器122可以存取資料緩存123、資料記憶體124和主記憶體150之一。如果記憶體控制器122根據內容資訊不能確定是存取內部記憶體(例如,資料緩存123或資料記憶體124)還是外部記憶體(例如,主記憶體150),則記憶體控制器122必須等待AGU 112的地址資訊,以確定要存取的地址的確切位置是位於內部記憶體還是外部記憶體中。如果記憶體控制器122可以根據內容資訊確定出存取內部記憶體,則記憶體控制器122進一步使用表3的實施例中描述的技術確定是激活資料緩存123還是資料記憶體124并從資料緩存123或資料記憶體124中獲取資料。如果記憶體控制器122根據內容資訊確定出存取外部記憶體,則記憶體控制器122通過總線介面單元130向外部記憶體發送記憶體存取命令。
表5根據第2圖的實施例示出了CPU中的指令管線的時序示意圖。
表5
時鐘週期 | 1 | 2 | 3 | 4 | 5 | 6 |
指令 0 | IF | ID | EX | WB | ||
指令 1 | IF | ID | EX | WB | ||
指令 2 | IF | ID | EX | WB | ||
當前記憶體資訊 | --- | --- | N/A | 資料 緩存 | 資料 緩存 | 資料 記憶體 |
距離資訊 | --- | --- | --- | 1 | 1 | --- |
激活的記憶體 | --- | --- | 資料 緩存 & 資料 記憶體 | 資料 緩存 | 資料 緩存 | --- |
下一記憶體資訊 | --- | --- | 資料 緩存 | 資料 緩存 | 資料 記憶體 | --- |
在一實施例中,表5中示出了CPU 105的指令管線中的各種指令的時序和內容資訊。例如,CPU 105(例如,精簡指令集計算(reduced instruction set computing,RISC))處理器)的指令管線可以分為IF,ID,EX和WB階段。假設指令0、1、2是記憶體存取指令。列“當前記憶體資訊”是指針對當前指令的執行(EX)階段的記憶體資訊。列“激活的記憶體”是指在當前指令的執行(EX)階段要激活的記憶體(即,可以是資料緩存123、資料記憶體124或這兩者)。列“距離資訊”指示當前指令的地址到資料緩存的邊界的距離是否長於預定長度,列“下一記憶體資訊”是指在當前指令的執行(EX)階段中計算出的用以指示在下一條指令的EX階段中將被激活的記憶體(即,可以是資料緩存123、資料記憶體124或這兩者)。另外,轉發路徑242在該實施例中使用。
在時鐘週期1中,指令0的取指令(IF)階段被執行,且沒有內容資訊能被參考。
在時鐘週期2中,指令0的指令解碼(ID)階段和指令1的取指令(IF)階段被執行,以及,沒有內容資訊能被參考。
在時鐘週期3中,假設偏移量為0,指令0的執行(EX)階段、指令1的指令解碼(ID)階段和指令2的取指令(IF)階段被執行。由於在指令0的執行(EX)階段中仍然沒有可參考的內容資訊,因此記憶體控制器122無法確定要存取的地址是否位於資料緩存123或資料記憶體124內。因此,記憶體控制器122在時鐘週期3中激活資料緩存123和資料記憶體124。同時,記憶體控制器122和/或處理核110確定出用於下一條指令(即指令1)的記憶體資訊指向資料緩存123,以及,用於下一條指令(即指令1)的距離資訊為1。例如,記憶體控制器122和/或處理核110將指令0的執行(EX)階段的結果和用於下一條指令(即,指令1)的內容資訊寫入寄存器240。
在時鐘週期4中,指令0的寫回(WB)階段、指令1的執行(EX)階段和指令2的指令解碼(ID)階段被執行。記憶體控制器122利用存儲在寄存器240中的資料來更新寄存器堆125。同時,可以在時鐘週期4中將存儲在寄存器240中的內容資訊轉發到指令1的執行(EX)階段(例如,通過轉發路徑242),使得記憶體控制器122能夠確定出記憶體資訊指示資料緩存123將要被激活。因此,在時鐘週期4中,記憶體控制器122在指令1的執行(EX)階段中激活資料緩存123並停用/去激活資料記憶體124。同時,記憶體控制器122和/或處理核110確定出用於下一條指令(即,指令2)的記憶體資訊指向資料緩存123,以及,用於下一條指令(即指令2)的距離資訊為1。
在時鐘週期5中,指令1的寫回(WB)階段和指令2的執行(EX)階段被執行。記憶體控制器122將存儲在寄存器240中的資料更新到寄存器堆125中。同時,在時鐘週期4中生成的內容資訊可以在時鐘週期5中被轉發到指令2的執行(EX)階段,使得記憶體控制器122能夠確定出記憶體資訊指示資料緩存123要被激活且距離資訊處於資料緩存123的邊界內。因此,在時鐘週期5中,記憶體控制器122可以在指令2的執行(EX)階段中激活資料緩存123並停用/去激活資料記憶體124。同時,記憶體控制器122和/或處理核110確定出用於下一條指令的記憶體資訊指向資料記憶體124。應當說明的是,用於當前指令的記憶體資訊和距離資訊是在執行上一條指令的過程中確定出來的,也就是說,在執行當前指令的過程中,會計算/確定用於下一條指令的記憶體資訊和距離資訊。例如,在加載指令的偏移模式中,由於地址(Rs+Offset)的值被加載到寄存器Rd,而基地址Rs未被修改,因此,可以確定出用於下一條指令的記憶體資訊和距離資訊與用於當前指令的的記憶體資訊和距離資訊相同。再例如,在加載指令的後修改模式中,基地址Rs的值在加載指令被執行完之後被修改為(Rs+Offset),因此,基於修改後的地址(Rs+Offset)可以確定用於下一條指令的記憶體資訊和距離資訊。
在時鐘週期6中,指令2的寫回(WB)階段被執行。記憶體控制器122將存儲在寄存器240中的資料更新到寄存器堆125中。儘管在該實施例中有三個指令,但是寄存器堆125中的寄存器可保持更新後的內容資訊,直到下一條指令(例如,指令3)被執行,從而,記憶體控制器122在執行下一條指令的同時根據寄存器堆125的關聯寄存器中的內容資訊來確定是否激活資料緩存123和/或資料記憶體124。
表6根據第2圖的實施例示出了CPU中的指令管線的另一時序圖。
表6
時鐘週期 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
指令0 | IF | ID | EX | WB | ||||
指令1 | IF | ID | ○ | EX | WB | |||
指令2 | IF | ID | ○ | ○ | EX | WB | ||
當前的記憶體資訊 | --- | --- | N/A | --- | 資料 緩存 | --- | 資料 緩存 | 資料 記憶體 |
距離資訊 | --- | --- | --- | --- | 1 | --- | 1 | --- |
激活的記憶體 | --- | --- | 資料 緩存 &資料 記憶體 | --- | 資料 緩存 | --- | 資料 緩存 | --- |
下一記憶體資訊 | --- | --- | 資料 緩存 | --- | 資料 緩存 | --- | 資料 記憶體 | --- |
在另一實施例中,表6中示出了CPU 105的指令管線中的各種指令的時序和內容資訊。此外,在該實施例中使用了轉發路徑241。例如,利用當前執行的指令的執行(EX)階段的結果和寫回(WB)階段中的用於下一條指令的內容資訊來更新寄存器堆125中的寄存器。如果寄存器堆125中的寄存器能夠在下一條指令的執行(EX)階段之前被更新,則處理核110和記憶體控制器112在執行(EX)階段中獲取寄存器堆125中的更新後的寄存器。如果寄存器堆125中的寄存器不能在下一條指令的執行(EX)階段之前被更新,則可以在CPU 105的指令管線中插入氣泡/暫停(bubble/stalling),以使下一條指令的執行(EX)階段延遲一個階段。
從時鐘週期1到時鐘週期3,表6中的CPU 105的指令管線的操作與表5中的相同。
在時鐘週期4中,指令0的寫回(WB)階段和指令2的指令解碼(ID)階段被執行。記憶體控制器122將存儲在寄存器240中的資料更新到寄存器堆125中。但是,存儲在寄存器堆125中的更新後的資料和內容資訊不能被指令1的執行(EX)階段使用,直到時鐘週期5才能被其使用。如果向後通過(backward passing)在指令管線中不被允許,則氣泡(bubble)被插入CPU 105的指令管線,以將指令1的執行(EX)階段延遲一個階段。由於執行(EX)階段沒有在時鐘週期4中被執行,因此,記憶體控制器122在時鐘週期4中停用/去激活資料緩存123和資料記憶體124這兩者。
在時鐘週期5中,指令1的執行(EX)階段被執行。應當注意,在時鐘週期5中,時鐘週期4處的指令0的寫回(WB)階段中更新的寄存器堆125中的資料和內容資訊可以在指令1的執行(EX)階段中使用,以及,記憶體控制器122根據寄存器堆125中更新後的內容資訊激活資料緩存123並停用/去激活資料記憶體124。同時,記憶體控制器122和/或處理核110確定處用於下一條指令(即,指令2)的記憶體資訊指向資料緩存123。然後,將指令1的執行(EX)階段的結果和指令2的更新後的內容資訊寫入寄存器240。由於尚未執行指令1的寫回(WB)階段來更新寄存器堆125,因此,另一氣泡被插入到CPU 105的指令管線,以將指令2的執行(EX)階段延遲一個階段。
在時鐘週期6中,指令1的寫回(WB)階段被執行。應當注意,寄存器堆125中的資料和內容資訊在時鐘週期6中對於指令2仍然時是無效的,另一氣泡被插入到CPU 105的指令管線中,以再次將指令2的執行(EX)階段延遲一個階段。
在時鐘週期7中,指令2的執行(EX)階段被執行。應當注意,在時鐘週期7中,在時鐘週期6處的指令1的寫回(WB)階段中更新到寄存器堆125中的資料和內容資訊可以在指令2的執行(EX)階段中使用,以及,記憶體控制器122根據寄存器堆125中更新後的內容資訊激活資料緩存123和停用/去激活資料記憶體124。同時,記憶體控制器122和/或處理核110確定出用於下一條指令(即,指令3)的記憶體資訊指向資料記憶體124。然後,指令2的執行(EX)階段的結果被寫入到寄存器240中,以備將來使用。
在前述實施例中,內容資訊可以被存儲在寄存器堆125或程序計數器210中,其中,寄存器堆125或程序計數器210可被視為記憶體激活指示器(memory-activation indicator)。當記憶體激活指示器是程序計數器210時,節電機制能夠被應用於CPU 105的取指令(IF)階段,使得記憶體控制器121能夠根據存儲在程序計數器210中的內容資訊確定是否激活指令緩存126和/或指令記憶體127。
當記憶體激活指示器是寄存器堆125時,節電機制能夠被應用於CPU 105的執行(EX)階段。例如,在一種情況下,資料緩存123和資料記憶體124在執行(EX)階段中被使用。在另一種情況下,內部記憶體和外部記憶體在執行(EX)階段中被使用。
第4圖係根據本發明實施例的在管線式處理器中使用的節電方法的流程示意圖。
步驟S410:從管線式處理器中的記憶體激活指示器檢索/獲取內容資訊,其中,該內容資訊指示在執行當前指令的同時是否激活和停用/去激活第一易失性記憶體和/或第二易失性記憶體。例如,記憶體激活指示器可以是寄存器堆125或程序計數器210。如上所述,不同類型的記憶體激活指示器能夠在CPU 105的不同階段中、在記憶體子系統的不同配置中使用。
步驟S420:根據存儲在記憶體激活指示器中的內容資訊,在當前指令的多個階段的特定階段中控制第一易失性記憶體和/或第二易失性記憶體的激活。例如,當前指令的內容資訊可以是在上一條(previous)指令的取指令(IF)階段或執行(EX)階段中計算出來的,從而幫助確定在取指令(IF)階段或執行(EX)階段中是否應當激活第一易失性記憶體和/或第二易失性記憶體階段。如果根據內容資訊能夠確定出在當前指令的取指令(IF)階段或執行(EX)階段中激活第一易失性記憶體或者第二易失性記憶體(而不是統一激活第一易失性記憶體和第二易失性記憶體這兩者),則能夠降低半導體裝置100的功耗。
鑑於上述情況,本申請實施例提供了一種管線式處理器和節電方法,該節電方法用於管線式處理器中的記憶體子系統。管線式處理器和節電方法利用存儲在記憶體激活指示器(如寄存器堆或程序計數器)中的內容資訊,能夠在管線式處理器的指令管線中的不同階段(如取指令(IF)階段或執行(EX)階段)中激活所需的緩存或記憶體,並停用/去激活不需要的緩存或記憶體。因此,能夠避免冗餘/多餘(redundant)的記憶體激活,從而減少半導體裝置100的功耗。
申請專利範圍中用以修飾元件的“第一”、“第二”、“第三”等序數詞的使用本身未暗示任何優先權、優先次序、各元件之間的先後次序、或方法所執行的步驟的次序,而僅用作標識來區分具有相同名稱(具有不同序數詞)的不同元件。
雖然已經對本發明實施例及其優點進行了詳細說明,但應當理解的係,在不脫離本發明的精神以及申請專利範圍所定義的範圍內,可以對本發明進行各種改變、替換和變更,例如,可以通過結合不同實施例的若干部分來得出新的實施例。所描述的實施例在所有方面僅用於說明的目的而並非用於限制本發明。本發明的保護範圍當視所附的申請專利範圍所界定者為准。所屬技術領域中具有通常知識者皆在不脫離本發明之精神以及範圍內做些許更動與潤飾。
100:半導體裝置
105:中央處理單元(CPU)
115:系統總線
150:主記憶體
160:存儲裝置
11、12:記憶體子系統
121、122:記憶體控制器
126:指令緩存
127:指令記憶體
110:處理核
111:算術邏輯單元(ALU)
112:地址生成單元(AGU)
113:指令解碼器
123:資料緩存
124:資料記憶體
125:寄存器堆
130:總線介面單元
201:路徑
210:程序計數器
220:程序計數計算器
241、242:轉發路徑
240:寄存器
S410、S420:步驟
通過閱讀後續的詳細描述和實施例可以更全面地理解本發明,該實施例參照附圖給出,其中:
第1圖係根據本發明實施例的半導體裝置(semiconductor device)的方框示意圖。
第2圖係根據本發明實施例的CPU中的指令管線(instruction pipeline)的方框示意圖。
第3圖係根據本發明另一實施例的CPU的指令管線中的執行(EX)階段(stage)的方框示意圖。
第4圖係根據本發明實施例的用於在管線式處理器中使用的節電方法的流程示意圖。
S410:步驟
S420:步驟
Claims (22)
- 一種管線式處理器,用於執行指令的管線式處理,其中,該管線式處理器包括:程序計數器,用於存儲程序計數器值和內容資訊,其中,用於當前指令的程序計數器值和內容資訊是在執行上一條指令的過程中確定出來的,以及,該內容資訊指示在執行當前指令的同時是否激活第一易失性記憶體和/或第二易失性記憶體;以及,記憶體控制器,用於根據存儲在該程序計數器中的該內容資訊,在當前指令的多個階段的取指令階段中控制該第一易失性記憶體和/或該第二易失性記憶體的激活。
- 根據申請專利範圍第1項所述的管線式處理器,其中,該第一易失性記憶體和該第二易失性記憶體分別為該管線式處理器中用於存儲指令的指令緩存和指令記憶體。
- 根據申請專利範圍第2項所述的管線式處理器,其中,該記憶體控制器根據存儲在該程序計數器中的程序計數器值和該內容資訊,在當前指令的該特定階段中控制該第一易失性記憶體和/或該第二易失性記憶體的激活和停用,其中,用於當前指令的程序計數器值和內容資訊是在執行上一條指令的過程中基於順序獲取指令的方式確定出來的。
- 根據申請專利範圍第3項所述的管線式處理器,其中:響應於存儲在該程序計數器中的該程序計數器值等於當前指令所指示的程序地址,該記憶體控制器確定出存儲在該程序計數器中的該內容資訊是有效的,並根據存儲在該程序計數器中的該內容資訊在當前指令的該特定階段中激活該第一易失性記憶體或該第二易失性記憶體;以及,響應於存儲在該程序計數器中的該程序計數器值不等於當前指令所指 示的程序地址,該記憶體控制器確定出存儲在該程序計數器中的該內容資訊是無效的,並在當前指令的該特定階段中激活該第一易失性記憶體和該第二易失性記憶體這兩者。
- 一種管線式處理器,用於執行指令的管線式處理,其中,該管線式處理器包括:記憶體激活指示器,用於存儲內容資訊,該內容資訊指示在執行當前指令的同時是否激活第一易失性記憶體和/或第二易失性記憶體;以及,記憶體控制器,用於根據存儲在該記憶體激活指示器中的該內容資訊,在當前指令的多個階段的特定階段中控制該第一易失性記憶體和/或該第二易失性記憶體的激活,其中,該記憶體激活指示器為該管線式處理器中的寄存器堆,該特定階段為執行階段,以及,該第一易失性記憶體和該第二易失性記憶體分別為該管線式處理器中用於存儲資料的資料緩存和資料記憶體或者分別為該管線式處理器的內部記憶體和外部記憶體。
- 根據申請專利範圍第5項所述的管線式處理器,其中,該第一易失性記憶體在邏輯地址中具有第一範圍,以及,該第二易失性記憶體在邏輯地址中具有第二範圍,其中,該第一範圍之後是該第二範圍,且該第一範圍和該第二範圍是連續的。
- 根據申請專利範圍第6項所述的管線式處理器,其中,該內容資訊包括記憶體資訊和距離資訊,該記憶體資訊指示在該執行階段中是否激活該第一易失性記憶體和/或該第二易失性記憶體,以及,該距離資訊指示當前指令的地址到該第一易失性記憶體的邊界的距離是否長於預定長度。
- 根據申請專利範圍第7項所述的管線式處理器,其中,在該記憶體資訊指示激活第一易失性記憶體的情況下,響應於該距離資訊指示該當前指令的地址到該第一易失性記憶體的邊界的距離長於該預定長度, 該記憶體控制器在當前指令的執行階段中激活該第一易失性記憶體並停用該第二易失性記憶體。
- 根據申請專利範圍第8項所述的管線式處理器,其中,響應於該距離資訊指示該下一條指令的地址到該第一易失性記憶體的邊界的距離等於或小於該預定長度,該記憶體控制器在當前指令的執行階段中激活該第一易失性記憶體和該第二易失性記憶體這兩者。
- 根據申請專利範圍第5項所述的管線式處理器,其中,該記憶體控制器還利用當前指令的執行階段的結果和用於下一條指令的內容資訊來更新階段寄存器;其中,在當前指令的寫回階段中,該記憶體控制器利用存儲在該階段寄存器中的值更新該寄存器堆;其中,在下一條指令的執行階段中,該記憶體控制器獲取存儲在該寄存器堆中的該內容資訊,以確定是否激活該第一易失性記憶體和/或該第二易失性記憶體。
- 根據申請專利範圍第5項所述的管線式處理器,其中,該記憶體控制器還利用當前指令的執行階段的結果和用於下一條指令的內容資訊來更新階段寄存器;其中,在下一條指令的執行階段中,該記憶體控制器獲取被存儲在該階段寄存器中的該內容資訊,以確定是否激活該第一易失性記憶體和/或該第二易失性記憶體。
- 一種節電方法,其用在管線式處理器中的記憶體子系統中,其中,該記憶體子系統包括第一易失性記憶體和第二易失性記憶體,該方法包括:從該管線式處理器中的程序計數器中獲取程序計數器值和內容資訊,其中,用於當前指令的程序計數器值和內容資訊是在執行上一條指令的過 程中確定出來的,以及,該內容資訊指示在執行當前指令的同時是否激活該第一易失性記憶體和/或該第二易失性記憶體;以及,根據存儲在該程序計數器中的該內容資訊,在當前指令的多個階段的取指令階段中控制該第一易失性記憶體和/或該第二易失性記憶體的激活。
- 根據申請專利範圍第12項所述的節電方法,其中,該第一易失性記憶體和該第二易失性記憶體分別為該管線式處理器中用於存儲指令的指令緩存和指令記憶體。
- 根據申請專利範圍第13項所述的節電方法,其中,該節電方法進一步包括:根據存儲在該程序計數器中的程序計數器值和該內容資訊,在當前指令的該特定階段中控制該第一易失性記憶體和/或該第二易失性記憶體的激活和停用,其中,用於當前指令的程序計數器值和內容資訊是在執行上一條指令的過程中基於順序獲取指令的方式確定出來的。
- 根據申請專利範圍第14項所述的節電方法,其中,該節電方法還包括:響應於存儲在該程序計數器中的該程序計數器值等於當前指令所指示的程序地址,確定出存儲在該程序計數器中的該內容資訊是有效的,並根據存儲在該程序計數器中的該內容資訊在當前指令的該特定階段中激活該第一易失性記憶體或該第二易失性記憶體;以及,響應於存儲在該程序計數器中的該程序計數器值不等於當前指令所指示的程序地址,確定出存儲在該程序計數器中的該內容資訊是無效的,並在當前指令的該特定階段中激活該第一易失性記憶體和該第二易失性記憶體這兩者。
- 一種節電方法,其用在管線式處理器中的記憶體子系統中,其中,該記憶體子系統包括第一易失性記憶體和第二易失性記憶體,該方 法包括:從該管線式處理器中的記憶體激活指示器中獲取內容資訊,其中,該內容資訊指示在執行當前指令的同時是否激活該第一易失性記憶體和/或該第二易失性記憶體;以及,根據存儲在該記憶體激活指示器中的該內容資訊,在當前指令的多個階段的特定階段中控制該第一易失性記憶體和/或該第二易失性記憶體的激活,其中,該記憶體激活指示器為該管線式處理器中的寄存器堆,該特定階段為執行階段,以及,該第一易失性記憶體和該第二易失性記憶體分別是為該管線式處理器中用於存儲資料的資料緩存和資料記憶體或者分別為該管線式處理器的內部記憶體和外部記憶體。
- 根據申請專利範圍第16項所述的節電方法,其中,該第一易失性記憶體在邏輯地址中具有第一範圍,以及,該第二易失性記憶體在邏輯地址中具有第二範圍,其中,該第一範圍之後是該第二範圍,且該第一範圍和該第二範圍是連續的。
- 根據申請專利範圍第17項所述的節電方法,其中,該內容資訊包括記憶體資訊和距離資訊,該記憶體資訊指示在該執行階段中是否激活該第一易失性記憶體和/或該第二易失性記憶體,以及,該距離資訊指示當前指令的地址到該第一易失性記憶體的邊界的距離是否長於預定長度。
- 根據申請專利範圍第18項所述的節電方法,其中,該節電方法還包括:在該記憶體資訊指示激活第一易失性記憶體的情況下,響應於該距離資訊指示該當前指令的地址到該第一易失性記憶體的邊界的距離長於該預定長度,在當前指令的執行階段中激活該第一易失性記憶體並停用該第二易失性記憶體。
- 根據申請專利範圍第19項所述的節電方法,其中,該節電方法還包括:響應於該距離資訊指示該當前指令的地址到該第一易失性記憶體的邊界的距離等於或小於該預定長度,在當前指令的執行階段中激活該第一易失性記憶體和該第二易失性記憶體這兩者。
- 根據申請專利範圍第16項所述的節電方法,其中,該節電方法還包括:利用當前指令的執行階段的結果和用於下一條指令的內容資訊更新階段寄存器;在當前指令的寫回階段中,利用存儲在該階段寄存器中的值更新該寄存器堆;以及,在下一條指令的執行階段中,獲取存儲在該寄存器堆中的該內容資訊,以確定是否激活該第一易失性記憶體和/或該第二易失性記憶體。
- 根據申請專利範圍第16項所述的節電方法,其中,該節電方法還包括:利用當前指令的執行階段的結果和用於下一條指令的內容資訊更新階段寄存器;以及,在下一條指令的執行階段中,獲取被存儲在該階段寄存器中的該內容資訊,以確定是否激活該第一易失性記憶體和/或該第二易失性記憶體。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/255,165 | 2019-01-23 | ||
US16/255,165 US11003457B2 (en) | 2019-01-23 | 2019-01-23 | Power-saving mechanism for memory sub-system in pipelined processor |
Publications (2)
Publication Number | Publication Date |
---|---|
TW202028924A TW202028924A (zh) | 2020-08-01 |
TWI722635B true TWI722635B (zh) | 2021-03-21 |
Family
ID=71608989
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW108139683A TWI722635B (zh) | 2019-01-23 | 2019-11-01 | 管線式處理器及節電方法 |
Country Status (3)
Country | Link |
---|---|
US (1) | US11003457B2 (zh) |
CN (1) | CN111475010B (zh) |
TW (1) | TWI722635B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5809326A (en) * | 1995-09-25 | 1998-09-15 | Kabushiki Kaisha Toshiba | Signal processor and method of operating a signal processor |
TW200529071A (en) * | 2003-12-18 | 2005-09-01 | Nvidia Corp | Across-thread out of order instruction dispatch in a multithreaded microprocessor |
US7020788B2 (en) * | 2001-06-01 | 2006-03-28 | Microchip Technology Incorporated | Reduced power option |
TW200612332A (en) * | 2004-05-06 | 2006-04-16 | Ibm | Method and system for speculatively sending processor-issued store operations to a store queue with full signal asserted |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6715064B1 (en) * | 2000-01-21 | 2004-03-30 | Intel Corporation | Method and apparatus for performing sequential executions of elements in cooperation with a transform |
EP1447742A1 (en) * | 2003-02-11 | 2004-08-18 | STMicroelectronics S.r.l. | Method and apparatus for translating instructions of an ARM-type processor into instructions for a LX-type processor |
US6983359B2 (en) * | 2003-08-13 | 2006-01-03 | Via-Cyrix, Inc. | Processor and method for pre-fetching out-of-order instructions |
US7681022B2 (en) * | 2006-07-25 | 2010-03-16 | Qualcomm Incorporated | Efficient interrupt return address save mechanism |
US10002072B2 (en) * | 2015-05-18 | 2018-06-19 | Mediatek Inc. | Method and apparatus for controlling data migration in multi-channel memory device |
US10430302B2 (en) * | 2017-04-12 | 2019-10-01 | Qualcomm Incorporated | Data retention with data migration |
CN207817702U (zh) * | 2018-02-24 | 2018-09-04 | 丰郅(上海)新能源科技有限公司 | 用于提高数据处理速度的数据处理系统 |
-
2019
- 2019-01-23 US US16/255,165 patent/US11003457B2/en active Active
- 2019-10-30 CN CN201911045644.1A patent/CN111475010B/zh active Active
- 2019-11-01 TW TW108139683A patent/TWI722635B/zh active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5809326A (en) * | 1995-09-25 | 1998-09-15 | Kabushiki Kaisha Toshiba | Signal processor and method of operating a signal processor |
US7020788B2 (en) * | 2001-06-01 | 2006-03-28 | Microchip Technology Incorporated | Reduced power option |
TW200529071A (en) * | 2003-12-18 | 2005-09-01 | Nvidia Corp | Across-thread out of order instruction dispatch in a multithreaded microprocessor |
TW200612332A (en) * | 2004-05-06 | 2006-04-16 | Ibm | Method and system for speculatively sending processor-issued store operations to a store queue with full signal asserted |
Also Published As
Publication number | Publication date |
---|---|
CN111475010B (zh) | 2022-05-10 |
US11003457B2 (en) | 2021-05-11 |
CN111475010A (zh) | 2020-07-31 |
TW202028924A (zh) | 2020-08-01 |
US20200233673A1 (en) | 2020-07-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6665749B1 (en) | Bus protocol for efficiently transferring vector data | |
JP4451397B2 (ja) | Simdプロセッサスライスの有効/無効の制御のための方法ならびに装置 | |
JP3871883B2 (ja) | 間接分岐ターゲットを計算するための方法 | |
US6813701B1 (en) | Method and apparatus for transferring vector data between memory and a register file | |
JP3836322B2 (ja) | プリデコード情報を記憶するためのecc/パリティビットの使用 | |
US6321326B1 (en) | Prefetch instruction specifying destination functional unit and read/write access mode | |
US7610469B2 (en) | Vector transfer system for packing dis-contiguous vector elements together into a single bus transfer | |
KR101839479B1 (ko) | 더 넓은 레지스터에의 모드 의존형 부분 폭 로드 프로세서들, 방법들, 및 시스템들 | |
JPS62245442A (ja) | 情報処理装置 | |
JP5513744B2 (ja) | 動的自動減衰デバイスアーキテクチャ | |
US10606596B2 (en) | Cache preload operations using streaming engine | |
US12050914B2 (en) | Cache management operations using streaming engine | |
US6553486B1 (en) | Context switching for vector transfer unit | |
US10990384B2 (en) | System, apparatus and method for dynamic update to code stored in a read-only memory (ROM) | |
US11321097B2 (en) | Super-thread processor | |
TW202219745A (zh) | 微處理器和預取指調整方法 | |
TWI722635B (zh) | 管線式處理器及節電方法 | |
US6625720B1 (en) | System for posting vector synchronization instructions to vector instruction queue to separate vector instructions from different application programs | |
JP3105110B2 (ja) | 演算装置 | |
US20230315467A1 (en) | Storing instructions from second storage to first storage while fetch operation is stalled, and reading instructions from first instruction storage upon resuming fetch operation | |
US8468306B2 (en) | Microprocessor and method for deferred store data forwarding for store background data in a system with no memory model restrictions | |
US20030135717A1 (en) | Method and apparatus for transferring vector data | |
WO2009156920A1 (en) | Method, register file system, and processing unit device enabling substantially direct cache memory access | |
KR20130004712A (ko) | 중앙 처리 유닛 코어 처리 속도 향상 시스템 |