專利名稱:一種消息式內存訪問裝置及其訪問方法
技術領域:
本發(fā)明涉及計算機系統設計領域,尤其涉及一種消息式內存訪問裝置及其訪問方法。
背景技術:
計算機的內存系統是影響體系結構和軟件效能的重要因素之一。過去幾十年,由于處理器與內存之間的性能差距越來越大,內存系統已成為制約系統性能的瓶頸。近年來隨著處理器向多核、眾核結構的轉變,內存系統的訪問帶寬問題變得日益突出,已經制約了多核處理器規(guī)模的進一步擴展。多年來,提高內存有效訪問帶寬的主要途徑是依靠提高總線頻率和數據通道數,也就是提高物理帶寬。而基于同步總線式的訪存體系結構多年來沒有大的改變。 SDRAM (Synchronous Dynamic Random Access Memory,同步式隨機動態(tài)存儲器)出現于上世紀90年代中期,經歷SDR,DDR, DDR2,DDR3,一直發(fā)展到即將發(fā)布的DDR4。SDRAM使用同步接口,所有的請求都要等待固定的時鐘周期才能得到回應。自從SDRAM發(fā)布以來,內存總線的結構基本沒有發(fā)生本質的變化。SDRAM的發(fā)展途徑基本上是通過不斷的提高接口頻率來提高帶寬。目前國際上已經開始了對內存結構轉變的嘗試。如Rambus公司的RDRAM和XDR技術中,采用了基于包的請求/應答的協議,利用相對窄但數據率高的串聯內存總線來傳送數據包。Intel的FB-DIMM則在內存板(DIMM)上增加一個緩沖芯片(AWB,Advanced Memory Buffer),從而可以通過高速的串行通道連接內存控制器或者相鄰DIMM上的AMB。LRDIMM、 DDR4等技術也采用了類似的全數據緩沖,來提高高頻信號的質量。但這些只是部分的改變, 也就是實現了數據傳輸的從并行總線向包格式的轉化,而從時序要求上仍然延續(xù)同步訪問協議。現有的同步式內存系統設計主要為了保證單次內存訪問的延遲固定且較小。但在多核條件下,內存訪問的延遲實際上包括在處理器訪存隊列的等待時間和訪問內存通道的延遲兩部分。顯然,僅僅保證后者的延遲小并不能保證總體內存訪問的性能。另一方面,傳統的內存訪問的數據粒度是固定不變的,而且有增大的趨勢。這是為了保證在一次傳送周期傳送的更多數據,每次讀取數據基本上都是CPUCache行的長度。但是真實程序中,實際每次數據訪問的粒度是變化的。對于有些應用數據訪問是無規(guī)則且粒度很小的,這樣每次訪問的固定的大數據粒度必然造成浪費;而對有些應用需要大量連續(xù)數據讀寫時,又需要將整個數據訪問分割成多個內存事務進行,從而增加協議上的開銷。這些實際上都造成了對訪存帶寬的浪費。
發(fā)明內容
為解決上述問題,本文提供了一種消息式內存訪問裝置及其訪問方法。本發(fā)明的目的是提高CPU內存通道的有效利用率,提出了一種消息式內存訪問裝置及其訪問方法。本發(fā)明公開了一種消息式內存訪問裝置,包括消息式命令總線,用于傳輸CPU生成的消息式訪存指令,指示內存系統完成相應操作;消息式內存控制器,用于將CPU的請求包裝成消息包發(fā)送給存儲模塊,并解析存儲模塊返回的消息包將數據返給CPU ;消息通道,用于請求和應答消息包傳送的通路;存儲模塊,含有緩沖調度器,用于接收消息式內存控制器的請求包,完成相應的請求。所述消息式命令總線還用于指定請求的訪存長度,訪存長度可大于或小于寄存器的長度;請求的數據可返回至cache,或返回至CPU可尋址緩沖區(qū),或不經cache返回至寄存器或寄存器組;請求可附帶數據訪問優(yōu)先級信息,用于指導消息式內存控制器和緩沖調度器中訪存命令的調度,為內存系統提供調度依據。所述消息式內存控制器還包括訪存請求接口,用于CPU與消息式內存控制器進行請求交互的接口。讀寫請求分配器,用于根據讀寫請求保留站的狀態(tài),控制能否將從訪存請求接口接收到的訪存請求插入到讀請求狀態(tài)表或是寫請求狀態(tài)表中,如果接收到的請求是寫請求,則需要將寫入到內存的數據暫存在寫數據緩沖區(qū)中。寫數據緩沖區(qū),用于暫存寫請求的數據。 讀數據緩沖區(qū),用于暫存讀請求的數據。讀寫請求保留站,由讀請求狀態(tài)表和寫請求狀態(tài)表兩部分組成,用于請求狀態(tài)表為每個新接收的請求分配一個表項,在請求被緩沖調度器響應或是消息式內存控制器將請求響應給CPU時,請求狀態(tài)表中對應的表項需要被更新或刪除。所述消息式內存控制器還包括請求生成與調度器,用于一方面根據請求狀態(tài)表中請求的屬性如請求長度和定時時延等生成多個小的請求;另一方面用于調度,從讀請求狀態(tài)表和寫請求狀態(tài)表中未完成的請求中選擇下一時刻需要處理的請求。被選擇的請求發(fā)送給消息打包器;消息打包器,用于將一個或多個請求封裝成消息通道上的消息包格式,并通過消息通道接口發(fā)送給緩沖調度器;消息解包器,用于從消息包中抽取出一個或多個請求,以及解析每個請求對應的數據內容;請求狀態(tài)更新單元,用于根據消息解包器解析出來的請求及其數據,更新請求在讀寫請求保留站中的狀態(tài)表,以及將數據暫存到讀數據緩沖區(qū);請求響應控制器,用于向CPU發(fā)送請求的響應;控制器配置接口,用于配置消息式內存控制器的參數,或是指定請求的屬性,對某個請求或訪存地址的配置,會將相應的值更新到讀寫請求狀態(tài)表的屬性中;消息通道接口,用于與緩沖調度器互相傳遞消息包,針對消息通道的不同物理實現,消息通道接口也有對應的接口類型。所述讀寫請求保留站中讀請求狀態(tài)表的條目號對應請求在請求狀態(tài)表中的序號, 消息式內存控制器和緩沖調度器的消息包中采用這個條目號來唯一指定被處理的請求,請求地址是待訪問內存的首地址,定時時延指定了該請求需要返回給CPU的時間,通過控制器配置接口來設置的,返回粒度由消息式內存控制器每次返回給CPU的數據長度組成,數據狀態(tài)是標識出已經從存儲模塊獲取請求需要的數據,并標識出空數據,數據位置是標識已獲取的請求數據存放在讀數據緩沖區(qū)中的位置。所述請求響應控制器還用于查詢讀寫請求保留站中請求的狀態(tài),當CPU發(fā)送過來的請求被緩沖調度器和存儲模塊處理完成后,請求響應控制器向CPU發(fā)送請求的響應,如果是讀請求被完成,則同時需要發(fā)送讀數據緩沖區(qū)中請求對應的數據。所述消息式內存控制器,與存儲模塊之間的交互是基于消息包完成的,還用于每個消息包包括一個或多個訪存請求或應答的信息;消息包中的請求沒有同步時序的限制, 有請求返回的最大時延信息;消息式內存控制器配置接口單元提供了消息式內存控制器特有的命令地址空間, 允許對控制器的屬性進行配置,允許設置訪存請求的屬性,可以發(fā)出相應的訪存命令。所述消息式內存控制器還用于對消息式內存控制器及命令地址空間通過相應的訪存命令,支持內存系統定時推送數據至寄存器或可尋址高速緩沖區(qū);支持在存儲系統內部執(zhí)行簡單的算術邏輯運算和移動操作,并可設定訪存的原子性,或批量執(zhí)行;讀寫請求保留站提供了讀請求狀態(tài)表和寫請求狀態(tài)表,每個被處理的請求都會在對應的讀或寫請求狀態(tài)表中存在對應的表項,每個表項包括請求的地址和長度,包括請求的定時返回時延、返回粒度、數據狀態(tài)和數據位置,在消息包中,每個請求都用其在請求狀態(tài)表中唯一的條目號進行確定;消息式內存控制器允許一個消息包包括了多個請求的信息,可以將每個請求分成一個或多個消息包傳遞到存儲模塊,還允許一個請求由存儲模塊通過一個或多個消息包來完成;所述消息式內存控制器,多個請求或者一個請求的多個消息包之間可以亂序返回。所述消息式內存控制器還用于如果一個讀請求被多個存儲模塊的消息包應答時, 請求對應的讀請求狀態(tài)表中的數據狀態(tài)標識已返回的數據和未返回的數據;未全部返回的數據可以存放在可尋址的緩沖區(qū)或是不可尋址的緩沖區(qū),如果數據暫存在不可尋址的緩沖區(qū),只有在請求的數據全部返回后,CPU的讀請求才會被響應,同時請求的數據被發(fā)送給CPU ;如果數據暫存在可尋址的緩沖區(qū),CPU讀取已返回的部分數據。所述消息包類型包括訪存讀/寫請求包、特殊命令請求包、存儲器狀態(tài)查詢包、 和/或響應包。所述存儲模塊中緩沖調度器包括消息通道接口,用于與消息式內存控制器互相傳遞消息包;消息解包器,用于從收到的消息包中獲取訪存請求的信息,所述信息包括請求序列號、請求類型、請求語義信息、地址、數據,消息解包器在判斷出請求類型后,將根據與該類型對應的規(guī)則完成解包操作;
請求分發(fā)器,用于將消息解包器解析出的訪存請求分配到請求隊列中,調度的參考依據包括每個請求的語義信息、要求的返回時間和訪問數據粒度信息;讀寫請求隊列,用于緩存未完成的讀寫請求,含有優(yōu)先級隊列,高優(yōu)先級隊列中保存訪問數據粒度小,返回時間要求短或是標記了高優(yōu)先級的讀寫請求;低優(yōu)先級隊列中保存訪問數據粒度大,返回時間要求長或是標記了低優(yōu)先級的讀寫請求;特殊請求隊列,用于緩存未完成的非讀寫訪存請求;請求調度器,用于從請求隊列中獲取訪存請求,轉發(fā)給命令生成單元;從數據緩沖區(qū)獲取訪存返回數據,轉發(fā)給消息打包器;命令生成單元,用于獲取調度后需要立即執(zhí)行的訪存請求,轉化成具體的訪問內存顆粒的命令,同時為了維護內存顆粒的狀態(tài),請求調度器會要求命令生成單元對內存芯片發(fā)出維護狀態(tài)所需的命令;消息打包器,用于從請求調度器獲取返回數據,以及和數據對應的請求序列號,生成響應包傳回給消息式內存控制器,根據請求調度器對返回數據的標記,也允許多個請求的返回數據合并成一個響應包傳給消息式內存控制器;數據緩沖區(qū),用于緩存訪問內存芯片返回的數據,由請求調度器選取需要的數據, 再提交給消息打包器;內存芯片接口,用于從命令生成單元接收訪問內存芯片的命令,發(fā)送給存儲模塊上的內存芯片,收到返回數據后,存入數據緩沖區(qū)。所述存儲模塊中緩沖調度器還包括定時器,用于根據需要輸出不同時間間隔的脈沖,給請求調度器和狀態(tài)維護單元提供所需的時鐘觸發(fā);狀態(tài)維護單元,用于維護與緩沖調度器相連的各個內存顆粒的狀態(tài),發(fā)出預充電和/或刷新命令。所述請求調度器還用于根據請求的情況完成高優(yōu)先級隊列中的訪存請求操作,將多個請求加上合并標記,所返回數據全部到達數據緩沖區(qū)后,一起轉給消息打包器打包成一個響應包,對低優(yōu)先級隊列中的訪存數據量比較大的請求,則可以將一個請求拆分成幾步完成,每完成一步都將結果轉發(fā)給消息打包器返回一個響應包。所述存儲模塊還用于對于一個消息式內存控制器發(fā)來的訪存請求,可以分多步完成并返回多個消息包應答這一個請求;對于多個消息式內存控制器發(fā)來的訪存請求,可以在完成所有請求后合并成一個消息包應答多個請求;可以調度消息式內存控制器發(fā)來的訪存請求的執(zhí)行順序,調度依據包括請求的優(yōu)先級、語義信息以及存儲模塊上內存芯片的狀態(tài)。所述存儲模塊的存儲單元為同步式內存顆粒和/或異步網絡連接的內存顆粒。其特征在于,所述緩沖調度器支持的特殊消息式訪存指令包括定時推送指令、存儲模塊內部的簡單算術邏輯運算和移動指令、壓縮存儲。所述消息通道用于傳輸以消息包為單位的消息,采用并行總線、點對點串行總線或拓撲結構的網絡。本發(fā)明還公開了一種消息式內存訪問方法,包括如下步驟步驟1001,CPU發(fā)出訪存請求,CPU可以指定該請求的訪問數據的長度、優(yōu)先級以及語義信息,該請求還可以是除讀、寫之外其他復雜訪存請求;步驟1002,判斷該請求是否含有配置消息式內存控制器的信息,如果含有則進入步驟1003,否則進入步驟1004 ;步驟1003,如果請求中含有配置消息式內存控制器的信息,則消息式內存控制器根據配置信息作出適當調整,進行調度并處理請求;步驟1004,消息式內存控制器將CPU的訪存請求封裝為消息包,封裝的過程中可以將多個請求封裝在一個包中,封裝完成的包通過消息通道發(fā)送給相應存儲模塊的緩沖調度器,并根據需要在讀寫請求保留站中進行記錄;步驟1005,存儲模塊中的緩沖調度器對發(fā)送的消息包進行解析,對CPU請求進行操作;步驟1006,該CPU請求完成后,如果其在消息式內存控制器讀寫請求保留站內有記錄,則消除該記錄。所述步驟1006之前還包括步驟1007,如果該CPU請求是讀請求,則將讀回的數據封裝為響應包,通過消息通道發(fā)送給消息式內存控制器,封裝響應包時,可根據需求將一個請求返回的數據拆分封裝為多個響應包,也可多個請求返回的數據合并封裝為一個響應包;步驟1008,消息式內存控制器接收到響應包,進行解析,根據需要將響應包中的數據存儲在cache或消息式內存控制器的內部可尋址緩沖區(qū)內;步驟1009,消息式內存控制器判斷該CPU請求的響應包是否全部返回,如果全部返回則進入步驟1006,如果不是則進入步驟1008。所述步驟1005之后還包括步驟1010,緩沖調度器收到消息式內存控制器發(fā)送的消息包,進行解析,并將CPU 請求填入適當的請求隊列;步驟1011,緩沖調度器內的請求調度器根據CPU請求的優(yōu)先級和語義信息對多個請求隊列里的請求進行調度,安排請求的執(zhí)行順序;步驟1012,將被調度執(zhí)行的CPU請求轉化為一系列符合內存顆粒標準的命令,發(fā)送給內存接口;步驟1013,判斷該CPU請求是否為復雜訪存請求,如果是則進入步驟1014,如果不是則進入步驟1016 ;步驟1014,如果該CPU請求為復雜訪存請求,緩沖調度器內的處理邏輯對從內存返回的數據進行簡單的處理;步驟1015,復雜訪存指令被處理之后,根據請求的類別,選擇是否需要將處理后的數據寫回內存,是否需要將處理后的數據返回給CPU,如果需要寫回內存,則通過一系列符合內存顆粒標準的命令寫入內存,如果需要返回給CPU,則將數據封裝為響應包,發(fā)送給消息式內存控制器;步驟1016,如果該CPU請求不是復雜訪存請求,則判斷是否為寫請求,如果是則進入步驟1006,如果不是則進入步驟1007。所述步驟1004還包括如下步驟步驟1101,消息式內存控制器從訪存請求端口接收CPU發(fā)送的讀寫請求;
步驟1102,讀寫請求分配器判斷請求是否是讀請求。如果是讀請求,跳轉到步驟 1104 ;否則,跳轉到步驟1103 ;步驟1103,如果收到的請求是寫請求,判斷寫請求狀態(tài)表是否存在空項。如果寫請求狀態(tài)表存在空項,則跳轉到步驟1105 ;否則,跳轉到步驟1102 ;步驟1104,如果收到的請求是讀請求,判斷讀請求狀態(tài)表是否存在空項。如果讀請求狀態(tài)表存在空項,則跳轉到步驟1106 ;否則,跳轉到步驟1102 ;步驟1105,如果收到的請求是寫請求,而且寫請求狀態(tài)表存在空閑的表項,則為該請求分配一個表項,并將寫請求中的數據存入到寫數據緩沖區(qū);否則,跳轉到步驟1102 ;步驟1106,如果收到的請求是讀請求,而且讀請求狀態(tài)表存在空閑的表項,則為該請求分配一個表項;否則,跳轉到步驟1102 ;步驟1107,結束本次請求的接收,并繼續(xù)處理從訪存請求接口接收到的請求。所述消息式內存控制器調度并處理請求包括如下步驟步驟1201,請求生成與調度器掃描讀寫請求狀態(tài)表的表項;步驟1202,請求生成與調度器查詢讀寫請求狀態(tài)表中是否有未完成而需要被處理的請求。如果有未完成的表項,跳轉到步驟1203 ;否則,跳轉到步驟1201 ;步驟1203,如果存在未完成的請求,請求生成與調度器根據請求在對應請求狀態(tài)表中的屬性,將一個大的請求劃分成多個小的請求,并根據調度算法選擇下一時刻被選擇處理的請求;步驟1204,判斷待處理的請求是否是讀請求。如果是讀請求,跳轉到步驟1206 ;否則,跳轉到步驟1205 ;步驟1205,如果待處理的請求是寫請求,需要從寫數據緩沖區(qū)中獲取該請求對應的數據;否則,直接跳到步驟1206 ;步驟1206,消息打包器將一個或多個請求封裝是消息包的格式;步驟1207,將打包后的消息發(fā)送給消息式內存控制器與緩沖調度器的消息通道接口 ;并轉入到步驟1201繼續(xù)下一輪的處理。所述步驟1013還包括下列步驟步驟1301,解析從緩沖調度器發(fā)送到消息式內存控制器的響應包的包頭信息,獲取包頭內響應的個數以及每個響應長度,用于下面逐個解析響應;步驟1302,判斷是否還有下一個響應需要解析,如果有,則進入步驟1303解析下一個響應;否則本次解析響應包結束;步驟1303,解析下一個響應的類型和請求標識,下面需要根據不同的響應類型分別進行不同的處理;步驟1304,判斷是否為訪存讀請求響應,如果是,則進入步驟135進一步解析;否則得到的是存儲器狀態(tài)查詢請求響應或訪存寫請求響應,進入步驟1306獲取對應狀態(tài)信步驟1305,根據包頭指示的該響應長度,尋址到響應,并從訪存讀請求響應中獲取返回的數據;步驟1306,根據包頭指示的響應長度尋址到響應,如果是狀態(tài)查詢請求響應,則從中獲取返回的狀態(tài)值;如果是訪存寫請求響應,則更新寫請求狀態(tài)表中該請求的屬性,至此解析本響應結束,回到步驟1302 ;步驟1307,根據包內是否含有子響應判斷返回的訪存讀請求數據是否被緩沖調度器拆分成多個響應返回。如果沒有被拆分成多個子響應,則完成本次訪存讀請求,進入步驟 1309 ;如果被拆分,則解析獲取子響應的個數和當前子響應的標識,進入步驟1308 ;步驟1308,判斷本次響應是否為訪存讀請求的最后一個子響應,判斷的依據是本次子響應標識是否等于子響應個數。如果是,那么完成本訪存讀請求,進入步驟1309 ;否則訪存讀請求還未完成,將本次返回的子響應數據寫入到對應的數據緩沖中,并更新該請求在讀請求狀態(tài)表中的數據狀態(tài)和數據位置等信息,回到步驟1302 ;步驟1309,完成本訪存讀請求,之后就可以準備將數據從消息式內存控制器傳回到CPU,回到步驟1302。所述步驟1006還包括如下步驟步驟1401,請求響應控制器掃描讀寫請求狀態(tài)表;步驟1402,查詢寫請求狀態(tài)表中是否有已完成的請求。如果有,跳轉到步驟1404 ; 否則,跳轉到步驟1403;步驟1403,如果寫請求狀態(tài)表中沒有已完成的請求項,則查詢讀請求狀態(tài)表中是否有已完成的請求項,如果有,跳轉到步驟1404 ;否則,跳轉到步驟1402 ;步驟1404,如果寫請求狀態(tài)表或讀請求狀態(tài)表中有已完成的請求,則判斷已完成的請求是否滿足請求屬性的要求,如果滿足,跳轉到步驟1405 ;否則,跳轉到步驟1402 ;步驟1405,向CPU發(fā)送滿足所有屬性的請求的響應,響應的數據內容也需要與請求的返回粒度等屬性匹配。所述步驟1011還包括如下步驟步驟1501,定時器根據設置好的條件,觸發(fā)請求調度器,準備開始一次新的請求調度;步驟1502,檢查此次觸發(fā)條件是否為芯片狀態(tài)維護請求,若是執(zhí)行步驟1503,否則執(zhí)行步驟1504 ;步驟1503,本次定時器觸發(fā)的條件是需要進行芯片狀態(tài)維護,發(fā)出芯片狀態(tài)維護命令,轉到步驟1509 ;步驟1504,檢查此次觸發(fā)條件是否要求處理特殊請求隊列,若是執(zhí)行步驟1505, 否則執(zhí)行步驟1506 ;步驟1505,本次定時器觸發(fā)的條件是需要處理特殊請求隊列,讀入特殊請求隊列中的請求,轉化成一序列的讀寫操作。修改隊列中的請求狀態(tài)或是在請求完成后移除。轉到步驟1509 ;步驟1506,檢查此次觸發(fā)條件是否要求處理優(yōu)先級最高的讀寫請求隊列,若是執(zhí)行步驟1507,否則執(zhí)行步驟1508 ;步驟1507,本次定時器觸發(fā)的條件是需要處理優(yōu)先級最高的讀寫請求隊列,移除隊列中的所有請求,并對所有的讀請求標上合并標記。轉到步驟1509 ;步驟1508,本次定時器觸發(fā)的條件是需要處理非最高優(yōu)先級的讀寫請求隊列,訪問對應優(yōu)先級請求隊列中的請求,根據讀寫請求當前的狀態(tài)生成需要的讀寫操作。修改隊列中的請求狀態(tài)或是在請求完成后移除。轉到步驟1509 ;
步驟1509,本次請求調度結束,等待下一次定時器觸發(fā)。本發(fā)明的有益效果為通過改變原有同步式訪存體系結構,用異步的請求和應答消息取代傳統的同步式總線事務,為訪存體系結構和應用訪存接口增加更多的并發(fā)性和靈活性,從而提高CPU內存通道的利用率。
圖I是本發(fā)明消息式內存訪問裝置的整體結構圖;圖2是本發(fā)明中在消息式內存控制器和存儲模塊間通信的消息包格式圖;圖3是本發(fā)明的消息包的包頭格式圖;圖4是本發(fā)明的訪存讀寫請求包格式圖;圖5是本發(fā)明的狀態(tài)查詢請求包格式圖;圖6是本發(fā)明的響應包格式圖;圖7是本發(fā)明的消息式內存控制器的結構示意圖;圖8是本發(fā)明中消息式內存控制器的讀請求狀態(tài)表表項格式圖;圖9是本發(fā)明的存儲模塊中緩沖調度器的結構示意圖;圖10是本發(fā)明基于消息的內存訪問方法流程圖;圖11是本發(fā)明中消息式內存控制器接收訪存請求的流程圖;圖12是本發(fā)明中消息式內存控制器調度并處理請求的流程13是本發(fā)明中消息式內存控制器接收處理響應包的流程14是本發(fā)明中消息式內存控制器向CPU響應請求的流程15是本發(fā)明中緩沖調度器調度訪存請求的流程圖。
具體實施例方式下面給出本發(fā)明的具體實施方式
,結合附圖對本發(fā)明做出了詳細描述。本發(fā)明的目的是提高CPU內存通道的有效利用率,提出了一種基于消息的內存訪問裝置。本發(fā)明的出發(fā)點是,即使物理帶寬受限,也同樣可以通過提高利用率來增加有效的帶寬。而傳統的內存系統采用的一種固定延遲、固定粒度、被動式的同步順序訪存體系, 限制了可能的有效技術手段的應用。本發(fā)明將研究一種新型的基于“消息”(message)式的體系結構,通過改變原有訪存體系結構,用異步、并發(fā)的請求和應答消息取代傳統的同步式總線事務,為訪存體系結構和應用訪存接口增加更多的靈活性,提高CPU內存通道的利用率。本發(fā)明提出的一種消息式內存訪問裝置,包括消息式命令總線,用于傳輸CPU生成的消息式訪存指令,指示內存系統完成相應操作;消息式內存控制器,用于將CPU的請求包裝成消息包發(fā)送給存儲模塊,并解析存儲模塊返回的消息包將數據返給CPU ;消息通道,用于請求和應答消息包傳送的通路;存儲模塊,含有緩沖調度器,用于接收消息式內存控制器的請求包,完成相應的請
所述消息式命令總線,可以指定請求的訪存長度,訪存長度可大于或小于寄存器的長度;所述消息式命令總線,請求的數據可返回至cache,或返回至CPU可尋址緩沖區(qū), 或不經cache返回至寄存器或寄存器組;所述消息式命令總線,請求可附帶數據訪問優(yōu)先級信息,用于指導消息式內存控制器和緩沖調度器中訪存命令的調度,為內存系統提供調度依據;所述消息式內存控制器,與存儲模塊之間的交互是基于消息包完成的。每個消息包允許包括一個或多個訪存請求的信息或是數據;消息包中的請求沒有同步時序的限制, 但可以包括請求返回的最大時延等信息。所述消息式內存控制器,控制器配置接口單元提供了消息式內存控制器特有的命令地址空間,允許對控制器的屬性進行配置,也允許設置訪存請求的屬性,如設置訪存請求定時返回的時延和粒度等,也可以發(fā)出特有的訪存命令。所述消息式內存控制器及命令地址空間,可以通過特有命令,支持內存系統定時推送數據至寄存器或可尋址高速緩沖區(qū);支持在存儲系統內部執(zhí)行簡單的算術邏輯運算和移動操作,并可設定訪存的原子性,或批量執(zhí)行。所述的消息式內存控制器,讀寫請求保留站單元提供了讀請求狀態(tài)表和寫請求狀態(tài)表。每個被處理的請求都會在對應的讀或寫請求狀態(tài)表中存在對應的表項。每個表項不僅包括了請求的地址和長度,還包括了請求的定時返回時延、返回粒度、數據狀態(tài)和數據位置等附加屬性。在消息包中,每個請求都用其在請求狀態(tài)表中唯一的條目號確定。所述的消息式內存控制器,消息式內存控制器不僅允許一個消息包包括了多個請求的信息,也可以將每個請求分成一個或多個消息包傳遞到存儲模塊,還允許一個請求由存儲模塊通過一個或多個應答信息包來完成。所述消息式內存控制器,多個請求或者一個請求的多個應答消息包之間可以亂序返回。所述消息式內存控制器,如果一個讀請求被多個存儲模塊的消息包應答時,請求對應的讀請求狀態(tài)表中的數據狀態(tài)標識已返回的數據和未返回的數據。未全部返回的數據可以存放在可尋址的緩沖區(qū)或是不可尋址的緩沖區(qū)。如果數據暫存在不可尋址的緩沖區(qū), 只有在請求的數據全部返回后,CPU的讀請求才會被響應,同時請求的數據被發(fā)送給CPU ; 如果數據暫存在可尋址的緩沖區(qū),CPU能夠地讀取已返回的部分數據,而不用等待所有的數據都訪問。所述消息包,可以包含訪存的語義信息,包括但不限于線程信息、對象信息、優(yōu)先級信息。所述消息通道,傳輸以消息包為單位,可以是并行總線、點對點串行總線或其他拓撲結構的網絡。所述含緩沖調度器的存儲模塊,對于一個消息式內存控制器發(fā)來的訪存請求,可以分多步完成并返回多個消息包應答這一個請求。所述含緩沖調度器的存儲模塊,對于多個消息式內存控制器發(fā)來的訪存請求,可以在完成所有請求后合并成一個消息包應答多個請求。
所述含緩沖調度器的存儲模塊,可以調度消息式內存控制器發(fā)來的訪存請求的執(zhí)行順序,調度依據包括請求的優(yōu)先級、語義信息以及存儲模塊上內存芯片的狀態(tài)。所述含緩沖調度器的存儲模塊,緩沖調度器支持除load/store外的特殊消息式訪存指令包括但不限于定時推送指令、存儲系統內部的簡單算術邏輯運算和移動指令 (支持原子操作和批量處理)、壓縮存儲。所述含緩沖調度器的存儲模塊,存儲模塊中的存儲單元既可以是同步式內存顆粒,也可以是基于異步網絡連接的內存顆粒。為了使本發(fā)明的目的、技術方案及優(yōu)點更加清楚明白,以下結合附圖及實施例,對本發(fā)明的一種消息式內存訪問裝置及基于消息的內存訪問方法進行進一步詳細說明。應當理解,此處所描述的具體實施例僅用以解釋本發(fā)明,并不用于限定本發(fā)明。如圖I所示,消息式內存訪問裝置包括消息式命令總線110、消息式內存控制器 120、消息通道130以及含緩沖調度器的存儲模塊140 ;這些功能單元通過消息包完成CPU 對內存訪問,實現了可控延遲,可變粒度,支持語義信息的消息式訪存。其中,CPU通過訪存指令或者對特殊命令地址空間的訪問轉化為消息式命令總線 110上的消息式訪存請求。相比傳統Load、Store訪存指令,消息式內存訪問裝置允許CPU 指定訪存的數據粒度大小、速度、返回數據的時機和方式等語義信息。消息式內存控制器120調度收到的訪存請求,將其轉換成請求包放到消息通道 130上,維護所有處理中的訪存請求狀態(tài)。當解析消息通道130上傳回的響應包時,解響應包獲取訪存請求的返回數據。存儲模塊140通過緩沖調度器接收處理消息通道130上的請求包,解析請求并訪問具體的內存芯片,將需要返回的數據打包成響應包傳回給消息式內存控制器120。消息式命令總線110上支持的消息式訪存指令主要分三類I.消息式內存存取指令,為普通的內存存取指令附加粒度和優(yōu)先級參數。CPU先在特殊命令地址空間的規(guī)定位置設置好訪存的數據大小和訪問優(yōu)先級,然后執(zhí)行消息式內存存取指令。即可按照需要的優(yōu)先級將指定長度的數據從內存中取出放于cache中。2.定時返回指令,允許在將來的一段時間內,每隔固定的時間間隔,存儲系統會把指令指定數組的一個數據返回到指定的寄存器中。CPU先在特殊命令地址空間的規(guī)定位置設置好訪存的時間間隔和返回次數,然后執(zhí)行定時返回指令即可。執(zhí)行該指令時,由消息式內存控制器或緩沖調度器定時產生需要的讀取命令,將其插入命令隊列或請求隊列中。存儲系統返回的數據不經cache,直接送入寄存器中。相對于預取,定時返回減少了 buffer占用。3.存儲系統內部的簡單算術邏輯運算和拷貝指令,支持原子性和批量處理。該指令使存儲系統可以不經(PU對存儲單元完成一些簡單的算術邏輯運算(加、減、與、或、異或等,運算結果寫入存儲單元)和拷貝。該指令支持批量處理。需要在特殊命令地址空間的規(guī)定位置設置好指令的參數,如存儲系統要執(zhí)行的操作類型、是否為原子操作,批量處理的操作次數等。然后執(zhí)行指令MOP Rl, R2,R3。其中Rl和R2存儲源操作數的地址,R3存儲目的操作數的地址。執(zhí)行該指令時,由緩沖調度器或消息式內存控制器來執(zhí)行運算和拷貝, 保證操作的原子性,控制操作次數。簡單的操作不用把數據移動到CPU,減少了訪存總量。在消息式內存控制器120和存儲模塊140之間通過消息包進行相互通信,支持的消息包類型包括訪存讀/寫請求包,特殊命令請求包,存儲器狀態(tài)查詢包,以及響應包。如圖2所示,一個消息包200包含一個包頭202,一個或多個訪存請求或響應204、206、208。 包頭202指示消息包的元數據,比如包類型、請求個數、每個請求的長度、包長度、容錯信息等。對于從消息式內存控制器發(fā)送到存儲模塊的訪存讀/寫請求包,包內可以包含一個或多個訪存讀/寫請求,每個訪存請求202、204、206包含請求標識、訪存地址、訪存粒度、訪存操作,還可以包含一些語義信息,對于寫請求還包含數據;而對于從存儲模塊發(fā)送回消息式內存控制器的響應包,包內可以包含一個或多個響應,每個響應包中包含請求標識,返回的數據等。每個消息包都必須包含一個包頭300,如圖3所示,包頭信息包括包類型302,源模塊標識304,目的模塊標識306,包含的請求/響應個數308,每個請求/響應的長度310、 312、314,包長度316,以及整個包的容錯信息318。其中,包類型302用于指示總線上傳輸的包的類型,支持的包類型包括訪存讀/寫請求包,特殊命令請求包,存儲器狀態(tài)查詢包, 以及響應包。源模塊標識304指示發(fā)送該消息包的模塊(消息式內存控制器或存儲模塊) 號,比如對于包含多個消息式內存控制器的系統,這個域可用于指示發(fā)送訪存讀/寫請求的消息式內存控制器標識。目的模塊標識306指示負責接收處理該包請求的模塊(消息式內存控制器或存儲模塊)號。請求/響應個數308指示該包中包含的請求或響應的個數, 注意這里包含的多個請求必須都是與包類型匹配的,比如包類型為訪存讀請求包,那么這里的多個請求必須都是訪存讀請求。每個請求/響應長度310、312、314用于指示每個請求或響應的大小,利用這個信息可以尋址到包內每個請求或響應的位置(偏移量)。包長度 316指示整個消息包的長度。包容錯信息318指示包在總線上傳輸過程中是否出錯,可以但不局限于使用奇偶校驗(Parity),校驗和(Checksum)和糾錯碼(ECC)等容錯技術。訪存讀/寫請求包被用于消息式內存控制器向存儲模塊發(fā)送一個或多個訪存讀/ 寫請求400,除了包頭外,如圖4所示,每個訪存讀/寫請求400包括請求標識402、操作碼404、訪存地址406、訪存粒度408、還可以包含語義信息410,對于訪存寫請求還包含數據412。請求標識402為消息式內存控制器分配給每個請求的唯一標識。操作碼404指示訪存請求的操作如讀請求,寫請求等。訪存地址406指示訪存請求的起始物理地址。訪存粒度408指示訪存請求數據的粒度(或長度),比如可以為小粒度的8B,也可以為大粒度的 4KB。語義信息410指示CPU經過消息式內存控制器傳送到存儲模塊的程序運行時信息,用于指導存儲模塊內緩沖調度器的調度,比如訪存請求的優(yōu)先級,訪存請求完成的超時時間 (Timeout),發(fā)送訪存請求的CPU核標識(Core ID)等。對于訪存寫請求,還包含數據412, 指示將被寫入到指定物理地址的數據。特殊命令請求包用于從消息式內存控制器向存儲模塊發(fā)送特殊處理的命令,如簡單算術邏輯運算、移動、原子操作、壓縮等。存儲器狀態(tài)查詢包用于消息式內存控制器向存儲模塊查詢多種狀態(tài)信息。每個存儲器狀態(tài)查詢包只包含一個查詢請求,所以它的包頭內請求個數總是設置為I。如圖5所示,每個狀態(tài)查詢請求500包括狀態(tài)查詢類型502和狀態(tài)查詢標識504。狀態(tài)查詢類型502 指示查詢的存儲模塊狀態(tài)的類型,如讀寫請求隊列是否已滿,特殊請求隊列是否已滿,內存芯片是否處于低功耗狀態(tài)等。狀態(tài)查詢標識504為消息式內存控制器分配的狀態(tài)查詢請求標識,用于消息式內存控制器收到來自存儲模塊的響應后,尋址狀態(tài)查詢請求。
響應包用于存儲模塊向消息式內存控制器發(fā)送一個或多個返回的響應,除了包頭外,如圖6所示,每個響應600包括響應類型602、請求標識604、還可能包含子響應個數 606、子響應標識608、數據610或者狀態(tài)值612。響應類型602指示針對不同類型請求返回的對應響應,如訪存讀請求響應,狀態(tài)查詢請求響應等。請求標識604為響應對應的請求標識,如訪存讀請求標識,狀態(tài)查詢請求標識。對于訪存讀請求響應,如果請求的為大粒度數據,則存儲模塊發(fā)送回響應的時候可能將單個請求的數據分割成多個子響應返回,這多個子響應可以放在同一個響應包內,也可以分散到多個響應包內分別返回,此時子響應個數 606用于指示分割的子響應個數,而子響應標識608為當前返回子響應的標識。如果消息式內存控制器從一個或多個響應包內獲取到指定個數的子響應,才完成該訪存讀請求。對訪存讀請求響應還包括從存儲模塊讀回到消息式內存控制器的數據610。而對于狀態(tài)查詢請求響應,則還包括返回的存儲器對應的狀態(tài)值612,如讀寫請求隊列已滿。如圖7所示,消息式內存控制器包括訪存請求接口 700、讀寫請求分配器單元701、 寫數據緩沖區(qū)單元702、讀數據緩沖區(qū)單元703、讀寫請求保留站704、請求生成與調度器單元705、消息打包器706、消息解包器707、請求狀態(tài)更新單元708、請求響應控制器709、控制器配置接口 710及消息通道接口 711。上述單元實現的消息式內存控制器,通過消息包的方式與緩沖調度器及其存儲模塊單元進行交互完成請求的處理;而且,它支持對變粒度的、限定返回時機的訪存請求進行處理。另外,它允許同一個讀請求的數據通過多個消息包以亂序的方式返回,這樣能夠提高內存帶寬的利用率。訪存請求接口 700是CPU與消息式內存控制器進行請求交互的接口。這個接口用于CPU向消息式內存控制器發(fā)送訪存請求,也用于消息式內存控制器向CPU發(fā)送訪存請求的響應;另外,這個接口也可以傳送用于配置消息式內存控制器的命令。讀寫請求分配器單元701根據讀寫請求保留站的狀態(tài),如消息式內存控制器所能容納的剩余訪存請求數,控制能否將從訪存請求接口接收到的訪存請求插入到讀請求狀態(tài)表或是寫請求狀態(tài)表中,如圖8所示。如果接收到的請求是寫請求,則需要將寫入到內存的數據暫存在寫數據緩沖區(qū)702中。寫數據緩沖區(qū)單元702用于暫存寫請求的數據。當在該寫請求被調度時,該請求對應的數據需要填充在發(fā)送到緩沖調度器的消息包中。讀數據緩沖區(qū)單元703用于暫存讀請求的數據。由于消息式內存控制器允許一個請求的數據以多個消息包的方式返回,讀數據緩沖區(qū)的數據可能只是請求所需數據的一部分,而且是亂序的。讀請求狀態(tài)表記錄了每個請求已返回的數據塊和其在讀數據緩沖區(qū)中的數據位置。另外,消息式內存控制具有請求定時返回的功能;這樣,即使一個請求的數據已全部暫存在讀數據緩沖區(qū)中,請求也可能不會立即返回。讀寫請求保留站單元704是控制和管理請求的關鍵單元;它由讀請求狀態(tài)表和寫請求狀態(tài)表兩部分組成。請求狀態(tài)表為每個新接收的請求分配一個表項。在請求被緩沖調度器響應或是消息式內存控制器將請求響應給CPU時,請求狀態(tài)表中對應的表項需要被更新或是刪除。讀請求狀態(tài)表的每個表項如圖8所示。條目號對應請求在請求狀態(tài)表中的序號。 消息式內存控制器和緩沖調度器的消息包中采用這個條目號來唯一指定被處理的請求。請求地址是待訪問內存的首地址。與現有消息式內存控制器固定的訪存請求長度不同,消息式內存控制器處理變長的請求來提高內存帶寬的有效性。定時時延指定了該請求需要返回給CPU的時間,它主要是通過控制器配置接口來設置的。返回粒度是指消息式內存控制器每次返回給CPU的數據長度。數據狀態(tài)標識請求需要的數據有哪些已經從存儲模塊獲取, 哪些仍是空。數據位置標識已獲取的請求數據存放在讀數據緩沖區(qū)中的位置。請求生成與調度器單元705 —方面根據請求狀態(tài)表中請求的屬性如請求長度和定時時延等生成多個小的請求;另一方面用于調度,從讀請求狀態(tài)表和寫請求狀態(tài)表中未完成的請求中選擇下一時刻需要處理的請求。被選擇的請求發(fā)送給消息打包器706。消息打包器706用于將一個或多個請求封裝成消息通道上的消息包格式,并通過消息通道接口發(fā)送給緩沖調度器。消息解包器707用于從消息包中抽取出一個或多個請求,以及解析每個請求對應的數據內容。請求狀態(tài)更新單元708根據消息解包器707解析出來的請求及其數據,更新請求在讀寫請求保留站704中的狀態(tài)表,以及將數據暫存到讀數據緩沖區(qū)。請求響應控制器709用于向CPU發(fā)送請求的響應。它主要是查詢讀寫請求保留站 704中請求的狀態(tài)。當CPU發(fā)送過來的請求被緩沖調度器和存儲模塊處理完成后,請求響應控制器709向CPU發(fā)送請求的響應。如果是讀請求被完成,則同時需要發(fā)送讀數據緩沖區(qū) 703中請求對應的數據??刂破髋渲媒涌?710用于配置消息式內存控制器的參數,或是指定請求的屬性, 如定時時延等。對某個請求或訪存地址的配置,會將相應的值更新到讀寫請求狀態(tài)表的屬性中。消息通道接口 711用于與緩沖調度器互相傳遞消息包。針對消息通道的不同物理實現,消息通道接口 711也有對應的接口類型。比如共享式的并行總線接口或是點到點的串行總線接口。圖9是存儲模塊中緩沖調度器的結構示意圖。如圖9所示,緩沖調度器包括了消息通道接口 901、消息解包器902、請求分發(fā)器903、讀寫請求隊列904、特殊請求隊列905、定時器906、狀態(tài)維護單元907、請求調度器908、命令生成單元909、消息打包器910、數據緩沖區(qū)911、內存芯片接口 912。所述緩沖調度器,可以是存儲模塊上一個獨立的集成電路芯片,與存儲模塊上的內存顆粒相連。也可以是系統主板上的一個芯片,與通用存儲模塊相連。緩沖調度器可以通過各種硬件方式實現,如專用集成電路芯片,可編程邏輯設備,現場可編程門陣列等。盡管下文描述的緩沖調度器是依照圖展開的,通過其他方式實現的示例也是同樣適宜的,例如增加額外的模塊或是合并里面的某些功能單元。消息通道接口 901用于與消息式內存控制器互相傳遞消息包。針對消息通道的不同物理實現,消息通道接口 901也有對應的接口類型。比如共享式的并行總線接口或是點到點的串行總線接口。消息解包器902從收到的消息包中獲取訪存請求的各種信息,包括請求序列號、 請求類型、請求語義信息、地址、數據等。不同的請求類型有不同的消息包格式,消息解包器 902在判斷出請求類型后,將根據與該類型對應的規(guī)則完成解包操作。請求分發(fā)器903將消息解包器902解析出的訪存請求分配到不同的請求隊列中。調度的參考依據包括每個請求的語義信息、要求的返回時間和訪問數據粒度等信息。讀寫請求隊列904,緩存未完成的讀寫請求,含有多個優(yōu)先級隊列。高優(yōu)先級隊列中保存訪問數據粒度小,返回時間要求短或是標記了高優(yōu)先級的讀寫請求;低優(yōu)先級隊列中保存訪問數據粒度大,返回時間要求長或是標記了低優(yōu)先級的讀寫請求。特殊請求隊列905,緩存未完成的非讀寫訪存請求。比如對數據的邏輯運算,壓縮, 移動等操作。定時器906可根據需要輸出不同時間間隔的脈沖,給請求調度器908和狀態(tài)維護單元907提供所需的時鐘觸發(fā)。狀態(tài)維護單元907,用于維護與緩沖調度器相連的各個內存顆粒的狀態(tài),在需要的時候發(fā)出預充電、刷新等命令。請求調度器908從請求隊列中獲取訪存請求,轉發(fā)給命令生成單元909 ;從數據緩沖區(qū)獲取訪存返回數據,轉發(fā)給消息打包器910。請求調度器908除了轉發(fā)請求和返回數據外,還可根據請求的情況完成一系列特殊操作。如高優(yōu)先級隊列中的訪存請求通常訪問粒度比較小,所以可以將多個請求加上合并標記,這樣在它們的返回數據全部到達數據緩沖區(qū)后,一起轉給消息打包器910打包成一個響應包。對低優(yōu)先級隊列中的訪存數據量比較大的請求,則可以將一個請求拆分成幾步完成,每完成一步都將結果轉發(fā)給消息打包器910 返回一個響應包。命令生成單元909獲取調度后需要立即執(zhí)行的訪存請求,轉化成具體的訪問內存顆粒的命令。同時為了維護內存顆粒的狀態(tài),請求調度器908也會要求命令生成單元909 對內存芯片發(fā)出維護狀態(tài)所需的命令。消息打包器910從請求調度器908獲取返回數據,以及和數據對應的請求序列號, 生成響應包傳回給消息式內存控制器。根據請求調度器908對返回數據的標記,也允許多個請求的返回數據合并成一個響應包傳給消息式內存控制器。數據緩沖區(qū)911緩存訪問內存芯片返回的數據,由請求調度器908選取需要的數據,再提交給消息打包器910。內存芯片接口 912從命令生成單元909接收訪問內存芯片的命令,發(fā)送給存儲模塊上的內存芯片,收到返回數據后,存入數據緩沖區(qū)911。如圖10所示,一種消息式內存訪問方法包括以下步驟步驟1001,CPU發(fā)出訪存請求,CPU可以指定該請求的訪問數據的長度、優(yōu)先級以及語義信息,該請求還可以是除讀、寫之外其他復雜訪存請求,如定時訪問、簡單算術邏輯運算、移動、原子操作、壓縮等;步驟1002,判斷該請求是否含有配置消息式內存控制器的信息,如果含有則進入步驟1003,否則進入步驟1004 ;步驟1003,如果請求中含有配置消息式內存控制器的信息,則消息式內存控制器根據配置信息作出適當調整;步驟1004,消息式內存控制器將CPU的訪存請求按一定的格式封裝為消息包,封裝的過程中可以按一定規(guī)則將多個請求封裝在一個包中,封裝完成的包通過消息通道發(fā)送給相應存儲模塊的緩沖調度器,并根據需要在讀寫請求保留站中進行記錄;請求填入適當的請求隊列;步驟1006,緩沖調度器內的請求調度器根據CPU請求的優(yōu)先級和語義信息對多個請求隊列里的請求進行調度,安排請求的執(zhí)行順序;步驟1007,將被調度執(zhí)行的CPU請求轉化為一系列符合內存顆粒標準的命令(如 DDR標準),發(fā)送給內存接口 ;步驟1008,判斷該CPU請求是否為復雜訪存請求,如果是則進入步驟1009,如果不是則進入步驟1011 ;步驟1009,如果該CPU請求為復雜訪存請求,緩沖調度器內的處理邏輯對從內存返回的數據進行簡單的處理(如簡單算術邏輯運算、移動等);步驟1010,復雜訪存指令被處理之后,根據請求的類別,選擇是否需要將處理后的數據寫回內存,是否需要將處理后的數據返回給CPU,如果需要寫回內存,則通過一系列符合內存顆粒標準的命令(如DDR標準)寫入內存,如果需要返回給CPU,則將數據封裝為響應包,發(fā)送給消息式內存控制器;步驟1011,如果該CPU請求不是復雜訪存請求,則判斷是否為寫請求,如果是則進入步驟1015,如果不是則進入步驟1012 ;步驟1012,如果該CPU請求是讀請求,則將讀回的數據封裝為響應包,通過消息通道發(fā)送給消息式內存控制器,封裝響應包時,可根據需求將一個請求返回的數據拆分封裝為多個響應包,也可多個請求返回的數據合并封裝為一個響應包;步驟1013,消息式內存控制器接收到響應包,進行解析,根據需要將響應包中的數據存儲在cache或消息式內存控制器的內部可尋址緩沖區(qū)內;步驟1014,消息式內存控制器判斷該CPU請求的響應包是否全部返回,如果全部返回則進入步驟1015,如果不是則進入步驟1013 ;步驟1015,該CPU請求完成,如果其在消息式內存控制器讀寫請求保留站內有記錄,則消除該記錄。如圖11所示,訪存請求被消息式內存控制器接收的處理流程是步驟1101,消息式內存控制器從訪存請求端口接收CPU發(fā)送的讀寫請求;步驟1102,讀寫請求分配器701判斷請求是否是讀請求。如果是讀請求,跳轉到步驟1104;否則,跳轉到步驟1103;步驟1103,如果收到的請求是寫請求,判斷寫請求狀態(tài)表是否存在空項。如果寫請求狀態(tài)表存在空項,則跳轉到步驟1105 ;否則,跳轉到步驟1102 ;步驟1104,如果收到的請求是讀請求,判斷讀請求狀態(tài)表是否存在空項。如果讀請求狀態(tài)表存在空項,則跳轉到步驟1106 ;否則,跳轉到步驟1102 ;步驟1105,如果收到的請求是寫請求,而且寫請求狀態(tài)表存在空閑的表項,則為該請求分配一個表項,并將寫請求中的數據存入到寫數據緩沖區(qū);否則,跳轉到步驟1102 ;步驟1106,如果收到的請求是讀請求,而且讀請求狀態(tài)表存在空閑的表項,則為該請求分配一個表項;否則,跳轉到步驟1102 ;步驟1107,結束本次請求的接收,并繼續(xù)處理從訪存請求接口接收到的請求。如圖12所示,消息式內存控制器調度并處理請求包括以下步驟步驟1201,請求生成與調度器705掃描讀寫請求狀態(tài)表的表項;
步驟1202,請求生成與調度器705查詢讀寫請求狀態(tài)表中是否有未完成而需要被處理的請求。如果有未完成的表項,跳轉到步驟1203 ;否則,跳轉到步驟1201 ;步驟1203,如果存在未完成的請求,請求生成與調度器根據請求在對應請求狀態(tài)表中的屬性,將一個大的請求劃分成多個小的請求,并根據調度算法選擇下一時刻被選擇處理的請求;步驟1204,判斷待處理的請求是否是讀請求。如果是讀請求,跳轉到步驟1206 ;否則,跳轉到步驟1205 ;步驟1205,如果待處理的請求是寫請求,需要從寫數據緩沖區(qū)中獲取該請求對應的數據;否則,直接跳到步驟1206 ;步驟1206,消息打包器706將一個或多個請求封裝是消息包的格式;步驟1207,將打包后的消息發(fā)送給消息式內存控制器與緩沖調度器的消息通道接口 ;并轉入到步驟1201繼續(xù)下一輪的處理。如圖13所示,消息式內存控制器接收到緩沖調度器發(fā)送的消息包后的步驟是步驟1302,解析從緩沖調度器發(fā)送到消息式內存控制器的響應包的包頭信息,獲取包頭內響應的個數以及每個響應長度,用于下面逐個解析響應;步驟1304,判斷是否還有下一個響應需要解析,如果有,則進入步驟1306解析下一個響應;否則本次解析響應包結束;步驟1306,解析下一個響應的類型和請求標識,下面需要根據不同的響應類型分別進行不同的處理;步驟1308,判斷是否為訪存讀請求響應,如果是,則進入步驟1310進一步解析;否則得到的是存儲器狀態(tài)查詢請求響應或訪存寫請求響應,進入步驟1312獲取對應狀態(tài)信息;步驟1310,根據包頭指示的該響應長度,尋址到響應,并從訪存讀請求響應中獲取返回的數據;步驟1312,根據包頭指示的響應長度尋址到響應,如果是狀態(tài)查詢請求響應,則從中獲取返回的狀態(tài)值;如果是訪存寫請求響應,則更新寫請求狀態(tài)表中該請求的屬性,至此解析本響應結束,回到步驟1304 ;步驟1314,根據包內是否含有子響應判斷返回的訪存讀請求數據是否被緩沖調度器拆分成多個響應返回。如果沒有被拆分成多個子響應,則完成本次訪存讀請求,進入步驟 1318 ;如果被拆分,則解析獲取子響應的個數和當前子響應的標識,進入步驟1316 ;步驟1316,判斷本次響應是否為訪存讀請求的最后一個子響應,判斷的依據是本次子響應標識是否等于子響應個數。如果是,那么完成本訪存讀請求,進入步驟1318 ;否則訪存讀請求還未完成,將本次返回的子響應數據寫入到對應的數據緩沖中,并更新該請求在讀請求狀態(tài)表中的數據狀態(tài)和數據位置等信息,回到步驟1304 ;步驟1318,完成本訪存讀請求,之后就可以準備將數據從消息式內存控制器傳回到CPU,回到步驟1304。如圖14所示,消息式內存控制器向CPU響應請求的步驟是步驟1401,請求響應控制器709掃描讀寫請求狀態(tài)表;步驟1402,查詢寫請求狀態(tài)表中是否有已完成的請求。如果有,跳轉到步驟1404 ;否則,跳轉到步驟1403;步驟1403,如果寫請求狀態(tài)表中沒有已完成的請求項,則查詢讀請求狀態(tài)表中是否有已完成的請求項。如果有,跳轉到步驟1404 ;否則,跳轉到步驟1402 步驟1404,如果寫請求狀態(tài)表或讀請求狀態(tài)表中有已完成的請求,則判斷已完成的請求是否滿足請求屬性的要求,如定時時延等屬性。如果滿足,跳轉到步驟1405 ;否則, 跳轉到步驟1402 ;步驟1405,向CPU發(fā)送滿足所有屬性的請求的響應,響應的數據內容也需要與請求的返回粒度等屬性匹配。如圖15所示,請求調度器908調度訪存請求的步驟是步驟1510,定時器906根據設置好的條件,觸發(fā)請求調度器908,準備開始一次新的請求調度;步驟1520,檢查此次觸發(fā)條件是否為芯片狀態(tài)維護請求,若是執(zhí)行步驟1530,否則執(zhí)行步驟1540 ;步驟1530,本次定時器觸發(fā)的條件是需要進行芯片狀態(tài)維護,發(fā)出芯片狀態(tài)維護命令,轉到步驟1590 ;步驟1540,檢查此次觸發(fā)條件是否要求處理特殊請求隊列,若是執(zhí)行步驟1550, 否則執(zhí)行步驟1560 ;步驟1550,本次定時器觸發(fā)的條件是需要處理特殊請求隊列,讀入特殊請求隊列中的請求,轉化成一序列的讀寫操作。修改隊列中的請求狀態(tài)或是在請求完成后移除。轉到步驟1590 ;步驟1560,檢查此次觸發(fā)條件是否要求處理優(yōu)先級最高的讀寫請求隊列,若是執(zhí)行步驟1570,否則執(zhí)行步驟1580 ;步驟1570,本次定時器觸發(fā)的條件是需要處理優(yōu)先級最高的讀寫請求隊列,移除隊列中的所有請求,并對所有的讀請求標上合并標記。轉到步驟1590 ;步驟1580,本次定時器觸發(fā)的條件是需要處理非最高優(yōu)先級的讀寫請求隊列,訪問對應優(yōu)先級請求隊列中的請求,根據讀寫請求當前的狀態(tài)生成需要的讀寫操作。修改隊列中的請求狀態(tài)或是在請求完成后移除。轉到步驟1590 ;步驟1590,本次請求調度結束,等待下一次定時器觸發(fā)。以上所述僅為本發(fā)明技術構思下的一些基本說明,而依據本發(fā)明的技術方案即所做的任何等效變換,均應屬于本發(fā)明的保護范圍,例如針對非易失存儲器的新型內存技術等均是保護對象。本領域的技術人員在不脫離權利要求書確定的本發(fā)明的精神和范圍的條件下,還可以對以上內容進行各種各樣的修改。因此本發(fā)明的范圍并不僅限于以上的說明,而是由權利要求書的范圍來確定的。
權利要求
1.一種消息式內存訪問裝置,其特征在于,包括消息式命令總線,用于傳輸CPU生成的消息式訪存指令,指示內存系統完成相應操作;消息式內存控制器,用于將CPU的請求包裝成消息包發(fā)送給存儲模塊,并解析存儲模塊返回的消息包將數據返給CPU ;消息通道,用于請求和應答消息包傳送的通路;存儲模塊,含有緩沖調度器,用于接收消息式內存控制器的請求包,完成相應的請求。
2.如權利要求I所述的消息式內存訪問裝置,其特征在于,所述消息式命令總線還用于指定請求的訪存長度,訪存長度可大于或小于寄存器的長度;請求的數據可返回至cache,或返回至CPU可尋址緩沖區(qū),或不經cache返回至寄存器或寄存器組;請求可附帶數據訪問優(yōu)先級信息,用于指導消息式內存控制器和緩沖調度器中訪存命令的調度,為內存系統提供調度依據。
3.如權利要求I所述的消息式內存訪問裝置,其特征在于,所述消息式內存控制器還包括訪存請求接口,用于CPU與消息式內存控制器進行請求交互的接口。讀寫請求分配器,用于根據讀寫請求保留站的狀態(tài),控制能否將從訪存請求接口接收到的訪存請求插入到讀請求狀態(tài)表或是寫請求狀態(tài)表中,如果接收到的請求是寫請求,則需要將寫入到內存的數據暫存在寫數據緩沖區(qū)中。寫數據緩沖區(qū),用于暫存寫請求的數據。讀數據緩沖區(qū),用于暫存讀請求的數據。讀寫請求保留站,由讀請求狀態(tài)表和寫請求狀態(tài)表兩部分組成,用于請求狀態(tài)表為每個新接收的請求分配一個表項,在請求被緩沖調度器響應或是消息式內存控制器將請求響應給CPU時,請求狀態(tài)表中對應的表項需要被更新或刪除。
4.如權利要求3所述的消息式內存訪問裝置,其特征在于,所述消息式內存控制器還包括請求生成與調度器,用于一方面根據請求狀態(tài)表中請求的屬性如請求長度和定時時延等生成多個小的請求;另一方面用于調度,從讀請求狀態(tài)表和寫請求狀態(tài)表中未完成的請求中選擇下一時刻需要處理的請求。被選擇的請求發(fā)送給消息打包器;消息打包器,用于將一個或多個請求封裝成消息通道上的消息包格式,并通過消息通道接口發(fā)送給緩沖調度器;消息解包器,用于從消息包中抽取出一個或多個請求,以及解析每個請求對應的數據內容;請求狀態(tài)更新單元,用于根據消息解包器解析出來的請求及其數據,更新請求在讀寫請求保留站中的狀態(tài)表,以及將數據暫存到讀數據緩沖區(qū);請求響應控制器,用于向CPU發(fā)送請求的響應;控制器配置接口,用于配置消息式內存控制器的參數,或是指定請求的屬性,對某個請求或訪存地址的配置,會將相應的值更新到讀寫請求狀態(tài)表的屬性中;消息通道接口,用于與緩沖調度器互相傳遞消息包,針對消息通道的不同物理實現,消息通道接口也有對應的接口類型。
5.如權利要求3所述的消息式內存訪問裝置,其特征在于,所述讀寫請求保留站中讀請求狀態(tài)表的條目號對應請求在請求狀態(tài)表中的序號,消息式內存控制器和緩沖調度器的消息包中采用這個條目號來唯一指定被處理的請求,請求地址是待訪問內存的首地址,定時時延指定了該請求需要返回給CPU的時間,通過控制器配置接口來設置的,返回粒度由消息式內存控制器每次返回給CPU的數據長度組成,數據狀態(tài)是標識出已經從存儲模塊獲取請求需要的數據,并標識出空數據,數據位置是標識已獲取的請求數據存放在讀數據緩沖區(qū)中的位置。
6.如權利要求4所述的消息式內存訪問裝置,其特征在于,所述請求響應控制器還用于查詢讀寫請求保留站中請求的狀態(tài),當CPU發(fā)送過來的請求被緩沖調度器和存儲模塊處理完成后,請求響應控制器向CPU發(fā)送請求的響應,如果是讀請求被完成,則同時需要發(fā)送讀數據緩沖區(qū)中請求對應的數據。
7.如權利要求I所述的消息式內存訪問裝置,其特征在于,所述消息式內存控制器,與存儲模塊之間的交互是基于消息包完成的,還用于每個消息包包括一個或多個訪存請求或應答的信息;消息包中的請求沒有同步時序的限制,有請求返回的最大時延信息;消息式內存控制器配置接口單元提供了消息式內存控制器特有的命令地址空間,允許對控制器的屬性進行配置,允許設置訪存請求的屬性,可以發(fā)出相應的訪存命令。
8.如權利要求7所述的消息式內存訪問裝置,其特征在于,所述消息式內存控制器還用于對消息式內存控制器及命令地址空間通過相應的訪存命令,支持內存系統定時推送數據至寄存器或可尋址高速緩沖區(qū);支持在存儲系統內部執(zhí)行簡單的算術邏輯運算和移動操作,并可設定訪存的原子性,或批量執(zhí)行;讀寫請求保留站提供了讀請求狀態(tài)表和寫請求狀態(tài)表,每個被處理的請求都會在對應的讀或寫請求狀態(tài)表中存在對應的表項,每個表項包括請求的地址和長度,包括請求的定時返回時延、返回粒度、數據狀態(tài)和數據位置,在消息包中,每個請求都用其在請求狀態(tài)表中唯一的條目號進行確定;消息式內存控制器允許一個消息包包括了多個請求的信息,可以將每個請求分成一個或多個消息包傳遞到存儲模塊,還允許一個請求由存儲模塊通過一個或多個消息包來完成;所述消息式內存控制器,多個請求或者一個請求的多個消息包之間可以亂序返回。
9.如權利要求7所述的消息式內存訪問裝置,其特征在于,所述消息式內存控制器還用于如果一個讀請求被多個存儲模塊的消息包應答時,請求對應的讀請求狀態(tài)表中的數據狀態(tài)標識已返回的數據和未返回的數據;未全部返回的數據可以存放在可尋址的緩沖區(qū)或是不可尋址的緩沖區(qū),如果數據暫存在不可尋址的緩沖區(qū),只有在請求的數據全部返回后,CPU的讀請求才會被響應,同時請求的數據被發(fā)送給CPU ;如果數據暫存在可尋址的緩沖區(qū),CPU讀取已返回的部分數據。
10.如權利要求7-9任一項所述的消息式內存訪問裝置,其特征在于,所述消息包類型包括訪存讀/寫請求包、特殊命令請求包、存儲器狀態(tài)查詢包、和/或響應包。
11.如權利要求I所述的消息式內存訪問裝置,其特征在于,所述存儲模塊中緩沖調度器包括消息通道接口,用于與消息式內存控制器互相傳遞消息包;消息解包器,用于從收到的消息包中獲取訪存請求的信息,所述信息包括請求序列號、 請求類型、請求語義信息、地址、數據,消息解包器在判斷出請求類型后,將根據與該類型對應的規(guī)則完成解包操作;請求分發(fā)器,用于將消息解包器解析出的訪存請求分配到請求隊列中,調度的參考依據包括每個請求的語義信息、要求的返回時間和訪問數據粒度信息;讀寫請求隊列,用于緩存未完成的讀寫請求,含有優(yōu)先級隊列,高優(yōu)先級隊列中保存訪問數據粒度小,返回時間要求短或是標記了高優(yōu)先級的讀寫請求;低優(yōu)先級隊列中保存訪問數據粒度大,返回時間要求長或是標記了低優(yōu)先級的讀寫請求;特殊請求隊列,用于緩存未完成的非讀寫訪存請求;請求調度器,用于從請求隊列中獲取訪存請求,轉發(fā)給命令生成單元;從數據緩沖區(qū)獲取訪存返回數據,轉發(fā)給消息打包器;命令生成單元,用于獲取調度后需要立即執(zhí)行的訪存請求,轉化成具體的訪問內存顆粒的命令,同時為了維護內存顆粒的狀態(tài),請求調度器會要求命令生成單元對內存芯片發(fā)出維護狀態(tài)所需的命令;消息打包器,用于從請求調度器獲取返回數據,以及和數據對應的請求序列號,生成響應包傳回給消息式內存控制器,根據請求調度器對返回數據的標記,也允許多個請求的返回數據合并成一個響應包傳給消息式內存控制器;數據緩沖區(qū),用于緩存訪問內存芯片返回的數據,由請求調度器選取需要的數據,再提交給消息打包器;內存芯片接口,用于從命令生成單元接收訪問內存芯片的命令,發(fā)送給存儲模塊上的內存芯片,收到返回數據后,存入數據緩沖區(qū)。
12.如權利要求11所述的消息式內存訪問裝置,其特征在于,所述存儲模塊中緩沖調度器還包括定時器,用于根據需要輸出不同時間間隔的脈沖,給請求調度器和狀態(tài)維護單元提供所需的時鐘觸發(fā);狀態(tài)維護單元,用于維護與緩沖調度器相連的各個內存顆粒的狀態(tài),發(fā)出預充電和/ 或刷新命令。
13.如權利要求11所述的消息式內存訪問裝置,其特征在于,所述請求調度器還用于根據請求的情況完成高優(yōu)先級隊列中的訪存請求操作,將多個請求加上合并標記,所返回數據全部到達數據緩沖區(qū)后,一起轉給消息打包器打包成一個響應包,對低優(yōu)先級隊列中的訪存數據量比較大的請求,則可以將一個請求拆分成幾步完成,每完成一步都將結果轉發(fā)給消息打包器返回一個響應包。
14.如權利要求I所述的消息式內存訪問裝置,其特征在于,所述存儲模塊還用于對于一個消息式內存控制器發(fā)來的訪存請求,可以分多步完成并返回多個消息包應答這一個請求;對于多個消息式內存控制器發(fā)來的訪存請求,可以在完成所有請求后合并成一個消息包應答多個請求;可以調度消息式內存控制器發(fā)來的訪存請求的執(zhí)行順序,調度依據包括請求的優(yōu)先級、語義信息以及存儲模塊上內存芯片的狀態(tài)。
15.如權利要求I所述的消息式內存訪問裝置,其特征在于,所述存儲模塊的存儲單元為同步式內存顆粒和/或異步網絡連接的內存顆粒。
16.如權利要求1、11、12任一項所述的消息式內存訪問裝置,其特征在于,所述緩沖調度器支持的特殊消息式訪存指令包括定時推送指令、存儲模塊內部的簡單算術邏輯運算和移動指令、壓縮存儲。
17.如權利要求I所述的消息式內存訪問裝置,其特征在于,所述消息通道用于傳輸以消息包為單位的消息,采用并行總線、點對點串行總線或拓撲結構的網絡。
18.一種消息式內存訪問方法,其特征在于,包括如下步驟步驟1001,CPU發(fā)出訪存請求,CPU可以指定該請求的訪問數據的長度、優(yōu)先級以及語義信息,該請求還可以是除讀、寫之外其他復雜訪存請求;步驟1002,判斷該請求是否含有配置消息式內存控制器的信息,如果含有則進入步驟 1003,否則進入步驟1004 ;步驟1003,如果請求中含有配置消息式內存控制器的信息,則消息式內存控制器根據配置信息作出適當調整,進行調度并處理請求;步驟1004,消息式內存控制器將CPU的訪存請求封裝為消息包,封裝的過程中可以將多個請求封裝在一個包中,封裝完成的包通過消息通道發(fā)送給相應存儲模塊的緩沖調度器,并根據需要在讀寫請求保留站中進行記錄;步驟1005,存儲模塊中的緩沖調度器對發(fā)送的消息包進行解析,對CPU請求進行操作; 步驟1006,該CPU請求完成后,如果其在消息式內存控制器讀寫請求保留站內有記錄, 則消除該記錄。
19.如權利要求18所述的消息式內存訪問方法,其特征在于,所述步驟1006之前還包括步驟1007,如果該CPU請求是讀請求,則將讀回的數據封裝為響應包,通過消息通道發(fā)送給消息式內存控制器,封裝響應包時,可根據需求將一個請求返回的數據拆分封裝為多個響應包,也可多個請求返回的數據合并封裝為一個響應包;步驟1008,消息式內存控制器接收到響應包,進行解析,根據需要將響應包中的數據存儲在cache或消息式內存控制器的內部可尋址緩沖區(qū)內;步驟1009,消息式內存控制器判斷該CPU請求的響應包是否全部返回,如果全部返回則進入步驟1006,如果不是則進入步驟1008。
20.如權利要求18所述的消息式內存訪問方法,其特征在于,所述步驟1005之后還包括步驟1010,緩沖調度器收到消息式內存控制器發(fā)送的消息包,進行解析,并將CPU請求填入適當的請求隊列;步驟1011,緩沖調度器內的請求調度器根據CPU請求的優(yōu)先級和語義信息對多個請求隊列里的請求進行調度,安排請求的執(zhí)行順序;步驟1012,將被調度執(zhí)行的CPU請求轉化為一系列符合內存顆粒標準的命令,發(fā)送給內存接口 ;步驟1013,判斷該CPU請求是否為復雜訪存請求,如果是則進入步驟1014,如果不是則進入步驟1016 ;步驟1014,如果該CPU請求為復雜訪存請求,緩沖調度器內的處理邏輯對從內存返回的數據進行簡單的處理;步驟1015,復雜訪存指令被處理之后,根據請求的類別,選擇是否需要將處理后的數據寫回內存,是否需要將處理后的數據返回給CPU,如果需要寫回內存,則通過一系列符合內存顆粒標準的命令寫入內存,如果需要返回給CPU,則將數據封裝為響應包,發(fā)送給消息式內存控制器;步驟1016,如果該CPU請求不是復雜訪存請求,則判斷是否為寫請求,如果是則進入步驟1006,如果不是則進入步驟1007。
21.如權利要求18所述的消息式內存訪問方法,其特征在于,所述步驟1004還包括如下步驟步驟1101,消息式內存控制器從訪存請求端口接收CPU發(fā)送的讀寫請求;步驟1102,讀寫請求分配器判斷請求是否是讀請求。如果是讀請求,跳轉到步驟1104 ; 否則,跳轉到步驟1103;步驟1103,如果收到的請求是寫請求,判斷寫請求狀態(tài)表是否存在空項。如果寫請求狀態(tài)表存在空項,則跳轉到步驟1105 ;否則,跳轉到步驟1102 ;步驟1104,如果收到的請求是讀請求,判斷讀請求狀態(tài)表是否存在空項。如果讀請求狀態(tài)表存在空項,則跳轉到步驟1106 ;否則,跳轉到步驟1102 ;步驟1105,如果收到的請求是寫請求,而且寫請求狀態(tài)表存在空閑的表項,則為該請求分配一個表項,并將寫請求中的數據存入到寫數據緩沖區(qū);否則,跳轉到步驟1102 ;步驟1106,如果收到的請求是讀請求,而且讀請求狀態(tài)表存在空閑的表項,則為該請求分配一個表項;否則,跳轉到步驟1102 ;步驟1107,結束本次請求的接收,并繼續(xù)處理從訪存請求接口接收到的請求。
22.如權利要求18所述的消息式內存訪問方法,其特征在于,所述消息式內存控制器調度并處理請求包括如下步驟步驟1201,請求生成與調度器掃描讀寫請求狀態(tài)表的表項;步驟1202,請求生成與調度器查詢讀寫請求狀態(tài)表中是否有未完成而需要被處理的請求。如果有未完成的表項,跳轉到步驟1203 ;否則,跳轉到步驟1201 ;步驟1203,如果存在未完成的請求,請求生成與調度器根據請求在對應請求狀態(tài)表中的屬性,將一個大的請求劃分成多個小的請求,并根據調度算法選擇下一時刻被選擇處理的請求;步驟1204,判斷待處理的請求是否是讀請求。如果是讀請求,跳轉到步驟1206 ;否則, 跳轉到步驟1205 ;步驟1205,如果待處理的請求是寫請求,需要從寫數據緩沖區(qū)中獲取該請求對應的數據;否則,直接跳到步驟1206;步驟1206,消息打包器將一個或多個請求封裝是消息包的格式;步驟1207,將打包后的消息發(fā)送給消息式內存控制器與緩沖調度器的消息通道接口 ; 并轉入到步驟1201繼續(xù)下一輪的處理。
23.如權利要求20所述的消息式內存訪問方法,其特征在于,所述步驟1013還包括下列步驟步驟1301,解析從緩沖調度器發(fā)送到消息式內存控制器的響應包的包頭信息,獲取包頭內響應的個數以及每個響應長度,用于下面逐個解析響應;步驟1302,判斷是否還有下一個響應需要解析,如果有,則進入步驟1303解析下一個響應;否則本次解析響應包結束;步驟1303,解析下一個響應的類型和請求標識,下面需要根據不同的響應類型分別進行不同的處理;步驟1304,判斷是否為訪存讀請求響應,如果是,則進入步驟135進一步解析;否則得到的是存儲器狀態(tài)查詢請求響應或訪存寫請求響應,進入步驟1306獲取對應狀態(tài)信息; 步驟1305,根據包頭指示的該響應長度,尋址到響應,并從訪存讀請求響應中獲取返回的數據;步驟1306,根據包頭指示的響應長度尋址到響應,如果是狀態(tài)查詢請求響應,則從中獲取返回的狀態(tài)值;如果是訪存寫請求響應,則更新寫請求狀態(tài)表中該請求的屬性,至此解析本響應結束,回到步驟1302 ;步驟1307,根據包內是否含有子響應判斷返回的訪存讀請求數據是否被緩沖調度器拆分成多個響應返回。如果沒有被拆分成多個子響應,則完成本次訪存讀請求,進入步驟 1309 ;如果被拆分,則解析獲取子響應的個數和當前子響應的標識,進入步驟1308 ;步驟1308,判斷本次響應是否為訪存讀請求的最后一個子響應,判斷的依據是本次子響應標識是否等于子響應個數。如果是,那么完成本訪存讀請求,進入步驟1309 ;否則訪存讀請求還未完成,將本次返回的子響應數據寫入到對應的數據緩沖中,并更新該請求在讀請求狀態(tài)表中的數據狀態(tài)和數據位置等信息,回到步驟1302 ;步驟1309,完成本訪存讀請求,之后就可以準備將數據從消息式內存控制器傳回到 CPU,回到步驟1302。
24.如權利要求18所述的消息式內存訪問方法,其特征在于,所述步驟1006還包括如下步驟步驟1401,請求響應控制器掃描讀寫請求狀態(tài)表;步驟1402,查詢寫請求狀態(tài)表中是否有已完成的請求。如果有,跳轉到步驟1404 ;否則,跳轉到步驟1403 ;步驟1403,如果寫請求狀態(tài)表中沒有已完成的請求項,則查詢讀請求狀態(tài)表中是否有已完成的請求項,如果有,跳轉到步驟1404 ;否則,跳轉到步驟1402 ;步驟1404,如果寫請求狀態(tài)表或讀請求狀態(tài)表中有已完成的請求,則判斷已完成的請求是否滿足請求屬性的要求,如果滿足,跳轉到步驟1405 ;否則,跳轉到步驟1402 ;步驟1405,向CPU發(fā)送滿足所有屬性的請求的響應,響應的數據內容也需要與請求的返回粒度等屬性匹配。
25.如權利要求20所述的消息式內存訪問方法,其特征在于,所述步驟1011還包括如下步驟步驟1501,定時器根據設置好的條件,觸發(fā)請求調度器,準備開始一次新的請求調度; 步驟1502,檢查此次觸發(fā)條件是否為芯片狀態(tài)維護請求,若是執(zhí)行步驟1503,否則執(zhí)行步驟1504 ;步驟1503,本次定時器觸發(fā)的條件是需要進行芯片狀態(tài)維護,發(fā)出芯片狀態(tài)維護命令, 轉到步驟1509 ;步驟1504,檢查此次觸發(fā)條件是否要求處理特殊請求隊列,若是執(zhí)行步驟1505,否則執(zhí)行步驟1506 ;步驟1505,本次定時器觸發(fā)的條件是需要處理特殊請求隊列,讀入特殊請求隊列中的請求,轉化成一序列的讀寫操作。修改隊列中的請求狀態(tài)或是在請求完成后移除。轉到步驟 1509 ;步驟1506,檢查此次觸發(fā)條件是否要求處理優(yōu)先級最高的讀寫請求隊列,若是執(zhí)行步驟1507,否則執(zhí)行步驟1508 ;步驟1507,本次定時器觸發(fā)的條件是需要處理優(yōu)先級最高的讀寫請求隊列,移除隊列中的所有請求,并對所有的讀請求標上合并標記。轉到步驟1509 ;步驟1508,本次定時器觸發(fā)的條件是需要處理非最高優(yōu)先級的讀寫請求隊列,訪問對應優(yōu)先級請求隊列中的請求,根據讀寫請求當前的狀態(tài)生成需要的讀寫操作。修改隊列中的請求狀態(tài)或是在請求完成后移除。轉到步驟1509 ;步驟1509,本次請求調度結束,等待下一次定時器觸發(fā)。
全文摘要
一種消息式內存訪問裝置及其訪問方法,包括消息式命令總線,用于傳輸CPU生成的消息式訪存指令,指示內存系統完成相應操作;消息式內存控制器,用于將CPU的請求包裝成消息包發(fā)送給存儲模塊,并解析存儲模塊返回的消息包將數據返給CPU;消息通道,用于請求和應答消息包傳送的通路;存儲模塊,含有緩沖調度器,用于接收消息式內存控制器的請求包,完成相應的請求。
文檔編號G06F12/08GK102609378SQ20121001635
公開日2012年7月25日 申請日期2012年1月18日 優(yōu)先權日2012年1月18日
發(fā)明者崔澤漢, 阮元, 陳明宇, 陳明揚, 陳荔城, 黃永兵 申請人:中國科學院計算技術研究所