專(zhuān)利名稱(chēng):一種處理器體系結(jié)構(gòu)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及處理器體系結(jié)構(gòu)領(lǐng)域。
背景技術(shù):
現(xiàn)有的處理器體系結(jié)構(gòu)在執(zhí)行操作時(shí)通常先用專(zhuān)門(mén)的數(shù)據(jù)裝載指令將操作數(shù)從 存儲(chǔ)器中裝載(load)到寄存器中,再送到運(yùn)算單元執(zhí)行相應(yīng)操作;執(zhí)行完畢后,先將執(zhí)行 結(jié)果保存在寄存器中,再用專(zhuān)門(mén)的數(shù)據(jù)存儲(chǔ)指令將寄存器中的數(shù)據(jù)存儲(chǔ)(store)到存儲(chǔ)器 中。即便是支持操作數(shù)存儲(chǔ)器尋址的處理器,由于存儲(chǔ)器端口數(shù)目和帶寬的限制,無(wú)法同時(shí) 從存儲(chǔ)器直接取得運(yùn)算單元所需的全部操作數(shù),而是先將一部分操作數(shù)從存儲(chǔ)器裝載到寄 存器中,再由存儲(chǔ)器和寄存器同時(shí)提供運(yùn)算單元所需的操作數(shù)。緩存(cache)的作用是將存儲(chǔ)器中的一部分內(nèi)容(即操作數(shù))復(fù)制在緩存中,使 這些內(nèi)容能在短時(shí)間內(nèi)由處理器快速存取,以保證流水線的持續(xù)運(yùn)行。然而,由于緩存是存 儲(chǔ)器的一部分鏡像,即便存在于緩存中的操作數(shù),也必須先被全部或部分地裝載到寄存器 中后,才能被運(yùn)算單元使用,并沒(méi)有一種由緩存直接向運(yùn)算單元提供全部操作數(shù)并將執(zhí)行 結(jié)果直接寫(xiě)回緩存的處理器體系結(jié)構(gòu)。根據(jù)統(tǒng)計(jì),在傳統(tǒng)處理器的程序中,裝載指令和存儲(chǔ)指令占程序中指令總數(shù)30% 左右。由于裝載指令和存儲(chǔ)指令本身并不涉及算術(shù)邏輯運(yùn)算,因此這類(lèi)指令的比重越大,處 理器運(yùn)算單元的利用率越低,處理器的運(yùn)算能力越無(wú)法得到充分的發(fā)揮。專(zhuān)門(mén)的裝載/存儲(chǔ)單元(load store unit)的提出在一定程度上實(shí)現(xiàn)了裝載/存 儲(chǔ)指令與算術(shù)邏輯運(yùn)算指令的并行執(zhí)行,提高了處理器運(yùn)算單元的利用率。然而裝載/存 儲(chǔ)指令涉及的操作數(shù)與之后使用這些操作數(shù)的運(yùn)算指令之間的數(shù)據(jù)相關(guān)性使得裝載/存 儲(chǔ)單元帶來(lái)的性能提升并不理想。此外,額外的裝載/存儲(chǔ)單元增加了處理器的復(fù)雜性。本發(fā)明公開(kāi)了全新的處理器體系結(jié)構(gòu),從根本上解決處理器的效率問(wèn)題。
發(fā)明內(nèi)容
本發(fā)明提出了一種基于直接支持運(yùn)算單元(Execution Unit)的零級(jí)存儲(chǔ)器新的 處理器體系結(jié)構(gòu)。所述處理器體系結(jié)構(gòu)與現(xiàn)有的傳統(tǒng)處理器體系結(jié)構(gòu)相比,有以下不同(1)沒(méi)有對(duì)操作數(shù)的裝載指令;(2)沒(méi)有對(duì)執(zhí)行結(jié)果的存儲(chǔ)指令;(3)用零級(jí)存儲(chǔ)器代替?zhèn)鹘y(tǒng)處理器體系結(jié)構(gòu)中的通用寄存器堆(RegisterFile); 所述零級(jí)存儲(chǔ)器的端口數(shù)大于或等于三個(gè)。在傳統(tǒng)處理器體系結(jié)構(gòu)的存儲(chǔ)層次中,比一級(jí)緩存更低存儲(chǔ)層次的是通用寄存器 堆。本發(fā)明所述的零級(jí)存儲(chǔ)器在對(duì)運(yùn)算單元的運(yùn)算支持效果上相當(dāng)于通用寄存器堆,但本 質(zhì)上是存儲(chǔ)器,內(nèi)容是更低層次存儲(chǔ)器中一部分內(nèi)容的鏡像,由存儲(chǔ)機(jī)制自動(dòng)填充和替換, 不需要專(zhuān)門(mén)的指令進(jìn)行裝載和存儲(chǔ)。本發(fā)明所述的寄存器需要專(zhuān)門(mén)的裝載/存儲(chǔ)指令按寄存器號(hào)尋址進(jìn)行裝載或存儲(chǔ)數(shù)據(jù),如寄存器堆和處理器狀態(tài)寄存器(processor status registers);而本發(fā)明所述 存儲(chǔ)器是整個(gè)系統(tǒng)存儲(chǔ)器中一部分內(nèi)容的鏡像,由存儲(chǔ)地址尋址,所述存儲(chǔ)器中數(shù)據(jù)的填 充和替換按某種機(jī)制自動(dòng)進(jìn)行,不需要專(zhuān)門(mén)的指令明示(explicit),如各級(jí)緩存和內(nèi)存。本發(fā)明所述的處理器體系結(jié)構(gòu)中的運(yùn)算單元能直接從存儲(chǔ)器取得操作數(shù)、并將執(zhí) 行結(jié)果寫(xiě)回存儲(chǔ)器。此外,所述處理器體系結(jié)構(gòu)包含下列部分特征或全部特征(1)沒(méi)有寄存器堆;(2)沒(méi)有將操作數(shù)從存儲(chǔ)器裝載(load)到寄存器堆的指令;(3)沒(méi)有將執(zhí)行結(jié)果從寄存器堆存儲(chǔ)(store)到存儲(chǔ)器中的指令;(4)對(duì)存儲(chǔ)器的尋址方式包括立即數(shù)直接尋址、基地址加偏移量方式尋址。本發(fā)明所述的處理器體系結(jié)構(gòu)支持復(fù)數(shù)個(gè)流水線段同時(shí)對(duì)邏輯意義上的同一個(gè) 存儲(chǔ)器進(jìn)行取操作數(shù)或?qū)懟貓?zhí)行結(jié)果的訪問(wèn),可以是同時(shí)進(jìn)行單數(shù)個(gè)或復(fù)數(shù)個(gè)數(shù)據(jù)的讀取 和寫(xiě)回。本發(fā)明所述處理器體系結(jié)構(gòu)中的指令格式可以只支持單數(shù)據(jù)尋址,也可以支持雙 數(shù)據(jù)尋址,還可以支持三數(shù)據(jù)尋址或更多數(shù)據(jù)尋址。所述數(shù)據(jù)尋址包括對(duì)運(yùn)算單元所需的 操作數(shù)的尋址和對(duì)運(yùn)算單元執(zhí)行結(jié)果的尋址。本發(fā)明所述處理器體系結(jié)構(gòu)中的尋址方式可以是通過(guò)指令碼中的立即數(shù)直接尋 址。本發(fā)明所述處理器體系結(jié)構(gòu)中的尋址方式也可以通過(guò)基地址加指令碼中的立即 數(shù)得到的地址尋址。基于本發(fā)明所述的處理器體系結(jié)構(gòu)構(gòu)成的處理器包含零級(jí)存儲(chǔ)器;所述零級(jí)存儲(chǔ) 器具有同時(shí)支持讀取至少兩個(gè)數(shù)據(jù)并寫(xiě)回至少一個(gè)數(shù)據(jù)的功能,可以由一個(gè)單獨(dú)的多端口 存儲(chǔ)器構(gòu)成,也可以由復(fù)數(shù)個(gè)單端口或多端口存儲(chǔ)器構(gòu)成。本發(fā)明所述的零級(jí)存儲(chǔ)器中儲(chǔ)存的是處理器對(duì)應(yīng)的主存儲(chǔ)器中內(nèi)容的子集,即所 述零級(jí)存儲(chǔ)器是部分主存儲(chǔ)器的鏡像,具有同時(shí)進(jìn)行多個(gè)數(shù)據(jù)讀寫(xiě)的功能,具體來(lái)說(shuō),至少 能支持同時(shí)讀取兩個(gè)數(shù)據(jù)并寫(xiě)入一個(gè)數(shù)據(jù)。所述零級(jí)存儲(chǔ)器的工作頻率應(yīng)適應(yīng)運(yùn)算單元工作頻率,指所述零級(jí)存儲(chǔ)器能以運(yùn) 算單元能達(dá)到的最高時(shí)鐘頻率不間斷地提供操作數(shù)并接收?qǐng)?zhí)行結(jié)果。舉例而言,若對(duì)應(yīng)所述體系結(jié)構(gòu)的指令中最多一次用到三個(gè)數(shù)據(jù)尋址,當(dāng)零級(jí)存 儲(chǔ)器支持在同一時(shí)鐘周期內(nèi)完成讀取兩個(gè)數(shù)據(jù)并寫(xiě)入一個(gè)數(shù)據(jù),那么所述零級(jí)存儲(chǔ)器的時(shí) 延應(yīng)當(dāng)小于或等于運(yùn)算單元的時(shí)延。若達(dá)不到所述的時(shí)延,則零級(jí)存儲(chǔ)器即為制約處理器 性能的瓶頸。當(dāng)本發(fā)明所述零級(jí)存儲(chǔ)器由復(fù)數(shù)個(gè)單端口或多端口存儲(chǔ)器構(gòu)成時(shí),所述多端口存 儲(chǔ)器至少由一個(gè)具有單數(shù)個(gè)端口或復(fù)數(shù)個(gè)端口的第一存儲(chǔ)器和一個(gè)具有復(fù)數(shù)個(gè)端口的第 二存儲(chǔ)器構(gòu)成。當(dāng)本發(fā)明所述零級(jí)存儲(chǔ)器由復(fù)數(shù)個(gè)單端口或多端口存儲(chǔ)器構(gòu)成時(shí),所述多端口存 儲(chǔ)器還可以包括一個(gè)具有單數(shù)個(gè)端口或復(fù)數(shù)個(gè)端口的第三存儲(chǔ)器,用于暫存第一存儲(chǔ)器的 輸出數(shù)據(jù),以供運(yùn)算單元獲取操作數(shù)。本發(fā)明所述第一存儲(chǔ)器的端口越少,則第二存儲(chǔ)器的端口就越多以補(bǔ)償。根據(jù)本發(fā)明技術(shù)方案,以三端口零級(jí)存儲(chǔ)器為例,可以有以下幾種構(gòu)成情況的實(shí)施例。此外還可以有更多的構(gòu)成情況,均在本發(fā)明技術(shù)方案的范圍內(nèi)。(1)由一個(gè)具有三個(gè)端口的存儲(chǔ)器構(gòu)成,所述具有三個(gè)端口的存儲(chǔ)器可以同時(shí)支 持兩個(gè)讀數(shù)據(jù)操作和一個(gè)寫(xiě)數(shù)據(jù)操作,以實(shí)現(xiàn)向運(yùn)算單元提供操作數(shù)并寫(xiě)回執(zhí)行結(jié)果的功 能;(2)由一個(gè)具有兩個(gè)端口的第一存儲(chǔ)器和一個(gè)具有三個(gè)端口的第二存儲(chǔ)器構(gòu)成, 所述第一存儲(chǔ)器用于向運(yùn)算單元提供操作數(shù),并接收從第二存儲(chǔ)器來(lái)的寫(xiě)回?cái)?shù)據(jù),所述第 二存儲(chǔ)器用于向運(yùn)算單元提供操作數(shù)并接收?qǐng)?zhí)行結(jié)果,以及將數(shù)據(jù)寫(xiě)回第一存儲(chǔ)器;(3)由一個(gè)具有三個(gè)端口的第一存儲(chǔ)器和一個(gè)具有兩個(gè)端口的第二存儲(chǔ)器構(gòu)成, 所述第一存儲(chǔ)器用于向運(yùn)算單元及所述第二存儲(chǔ)器提供操作數(shù)并接收?qǐng)?zhí)行結(jié)果,所述第二 存儲(chǔ)器用于接收從所述第一存儲(chǔ)器來(lái)的操作數(shù)并向運(yùn)算單元提供操作數(shù)。本發(fā)明所述的第一存儲(chǔ)器或第二存儲(chǔ)器可以由復(fù)數(shù)個(gè)大小相同或不同的存儲(chǔ)器 構(gòu)成;當(dāng)所述第一存儲(chǔ)器由復(fù)數(shù)個(gè)不同大小的存儲(chǔ)器構(gòu)成時(shí),較小的存儲(chǔ)器可以存有較大 的存儲(chǔ)器中的一部分?jǐn)?shù)據(jù)。當(dāng)本發(fā)明所述的第一存儲(chǔ)器或第二存儲(chǔ)器是由復(fù)數(shù)個(gè)存儲(chǔ)器構(gòu)成時(shí),若要寫(xiě)入數(shù) 據(jù),則通過(guò)復(fù)數(shù)個(gè)所述存儲(chǔ)器的端口向相同地址寫(xiě)入同樣的數(shù)據(jù),若要讀出數(shù)據(jù),則可以根 據(jù)地址的不同,通過(guò)復(fù)數(shù)個(gè)所述存儲(chǔ)器的端口讀出不同的復(fù)數(shù)個(gè)數(shù)據(jù),或只通過(guò)復(fù)數(shù)個(gè)所 述存儲(chǔ)器中的一個(gè)的端口讀出數(shù)據(jù)。本發(fā)明所述的第二存儲(chǔ)器具有以下特征(1)用于存儲(chǔ)操作數(shù)及所述操作數(shù)對(duì)應(yīng)的地址信息;所述地址信息可以是地址 值,也可以是基地址值及偏移量;還可以是基指針寄存器號(hào)及偏移量;(2)所述用于存儲(chǔ)操作數(shù)的操作數(shù)存儲(chǔ)單元與用于存儲(chǔ)操作數(shù)地址的地址信息存 儲(chǔ)單元一一對(duì)應(yīng);(3)具有讀、寫(xiě)指針,可以按特定算法寫(xiě)入或讀出操作數(shù);(4)可以將單數(shù)個(gè)或復(fù)數(shù)個(gè)輸入地址信息與存儲(chǔ)的地址信息進(jìn)行匹配,并輸出匹 配成功的單數(shù)個(gè)或復(fù)數(shù)個(gè)對(duì)應(yīng)操作數(shù);所述輸入地址信息可以是地址值,也可以是基地址 值及偏移量,還可以是基指針寄存器號(hào)及偏移量。本發(fā)明所述的第二存儲(chǔ)器還可以具有寫(xiě)融合(write merge)功能,即被寫(xiě)入的數(shù) 據(jù)對(duì)應(yīng)的地址信息在所述第二存儲(chǔ)器中已存在,則可以將所述寫(xiě)入的數(shù)據(jù)替換部分或全部 已存在的數(shù)據(jù)。舉例而言,所述第二存儲(chǔ)器可以由操作數(shù)存儲(chǔ)單元和地址信息存儲(chǔ)單元構(gòu)成。按 循環(huán)順序?qū)懭氩僮鲾?shù)時(shí),將操作數(shù)寫(xiě)入寫(xiě)指針指向的操作數(shù)存儲(chǔ)單元,并將所述操作數(shù)對(duì) 應(yīng)的地址信息寫(xiě)入所述操作數(shù)存儲(chǔ)單元對(duì)應(yīng)的地址信息存儲(chǔ)單元,再將寫(xiě)指針前移,即增 加寫(xiě)指針對(duì)應(yīng)的地址。按循環(huán)順序讀出操作數(shù)時(shí),則將讀指針指向的操作數(shù)存儲(chǔ)單元及其 對(duì)應(yīng)的地址信息讀出,再將讀指針前移。當(dāng)所述寫(xiě)指針或讀指針已指向所述第二存儲(chǔ)器的 最后一項(xiàng)操作數(shù)存儲(chǔ)單元時(shí),若前移指針,則所述寫(xiě)指針或讀指針將指向所述第二存儲(chǔ)器 的第一項(xiàng)操作數(shù)存儲(chǔ)單元。此時(shí),所述第二存儲(chǔ)器類(lèi)似一個(gè)循環(huán)先入先出隊(duì)列(FIFO),具備 循環(huán)先入先出隊(duì)列寫(xiě)入、讀出,及數(shù)據(jù)有效性、隊(duì)列滿(mǎn)、隊(duì)列空等特性。所述寫(xiě)入用于接收運(yùn) 算單元的執(zhí)行結(jié)果。所述讀出,用于將數(shù)據(jù)寫(xiě)回所述第一存儲(chǔ)器。當(dāng)從所述第二存儲(chǔ)器向運(yùn)算單元提供操作數(shù)時(shí),所述第二存儲(chǔ)器中的全部有效地
7址信息存儲(chǔ)單元并行與輸入的地址信息進(jìn)行匹配,并輸出匹配成功的地址信息對(duì)應(yīng)的操作 數(shù)存儲(chǔ)單元中的操作數(shù)。此時(shí),所述第二存儲(chǔ)器的結(jié)構(gòu)形式類(lèi)似一個(gè)內(nèi)容尋址存儲(chǔ)器,特征 是存儲(chǔ)的每一組地址均可以與復(fù)數(shù)組輸入地址并行匹配,輸出所述復(fù)數(shù)組輸入地址匹配成 功時(shí)對(duì)應(yīng)的數(shù)據(jù)。所述匹配成功而輸出的操作數(shù)即運(yùn)算單元所需的操作數(shù)?;诒景l(fā)明所述的處理器體系結(jié)構(gòu)構(gòu)成的處理器還可以包含基指針(BP,Base Pointer)寄存器,用于存儲(chǔ)對(duì)零級(jí)存儲(chǔ)器進(jìn)行的以基地址加偏移量方式尋址時(shí)的基地址。本發(fā)明所述的處理器體系結(jié)構(gòu)中每個(gè)有效的基指針寄存器存儲(chǔ)與所述零級(jí)存儲(chǔ) 器中的一部分?jǐn)?shù)據(jù)存儲(chǔ)單元對(duì)應(yīng)的基地址;若所述第二存儲(chǔ)器存儲(chǔ)的地址信息是基指針寄 存器號(hào)及偏移量、且所述有效的基指針寄存器的內(nèi)容被改寫(xiě)后,第二存儲(chǔ)器中對(duì)應(yīng)于基指 針寄存器原基地址的數(shù)據(jù)存儲(chǔ)單元中的數(shù)據(jù)應(yīng)被無(wú)效化;若所述數(shù)據(jù)存儲(chǔ)單元中的數(shù)據(jù) 應(yīng)該但還沒(méi)有寫(xiě)回第一存儲(chǔ)器時(shí),則需要先將被更改過(guò)的數(shù)據(jù)寫(xiě)回第一存儲(chǔ)器后再被無(wú)效 化。舉例而言,根據(jù)本發(fā)明所述處理器體系結(jié)構(gòu),可以由指令碼中對(duì)應(yīng)操作數(shù)或執(zhí)行 結(jié)果的基指針寄存器號(hào)找到對(duì)應(yīng)的地址寄存器,從而得到該操作數(shù)或執(zhí)行結(jié)果的基地址。 再將該基地址與指令碼中對(duì)應(yīng)操作數(shù)或執(zhí)行結(jié)果的偏移地址相加,從而得到對(duì)應(yīng)操作數(shù)或 執(zhí)行結(jié)果的實(shí)際地址,進(jìn)而完成尋址。本發(fā)明所述處理器體系結(jié)構(gòu)可以具有專(zhuān)門(mén)的基地址裝載指令,通過(guò)所述地址裝載 指令可以將需要用到的基地址裝載到所述基指針寄存器中;也可以以當(dāng)前基地址為指針, 根據(jù)程序運(yùn)行的實(shí)際情況,加上一定的偏移量,從而得到新的基地址,并自動(dòng)將所述新的基 地址裝載到所述基指針寄存器中。根據(jù)本發(fā)明所述技術(shù)方案,使用復(fù)數(shù)個(gè)基指針寄存器,可以使運(yùn)算單元能獲取到 數(shù)據(jù)的地址空間不連續(xù)的,用較少的指令位數(shù)實(shí)現(xiàn)對(duì)位置上分散的數(shù)據(jù)的訪問(wèn),能有效地 縮短所述指令的字長(zhǎng),增大代碼密度。本發(fā)明所述處理器體系結(jié)構(gòu)的指令中不同的操作數(shù)或執(zhí)行結(jié)果可以共用同一組 基指針寄存器,也可以具有各自獨(dú)立或部分獨(dú)立的基指針寄存器。即所述基指針寄存器可 以?xún)H由一組地址寄存器構(gòu)成,用于操作數(shù)一、操作數(shù)二和執(zhí)行結(jié)果的尋址;也可以由三組地 址寄存器構(gòu)成,所述三組地址寄存器分別用于操作數(shù)一、操作數(shù)二和執(zhí)行結(jié)果的尋址。此外 由不同操作數(shù)共用一組基指針寄存器、執(zhí)行結(jié)果用另一組基指針寄存器,或者一個(gè)操作數(shù) 與執(zhí)行結(jié)果共用一組基指針寄存器,另一個(gè)操作數(shù)用另一組基指針寄存器的情況也類(lèi)似。所述基指針寄存器可以全部用來(lái)存儲(chǔ)基地址,也可以有單數(shù)個(gè)或復(fù)數(shù)個(gè)基指針寄 存器用于表示向所述基指針寄存器對(duì)應(yīng)的存儲(chǔ)空間不可寫(xiě)入。舉例而言,當(dāng)對(duì)指令譯碼得到的對(duì)應(yīng)于執(zhí)行結(jié)果的基指針寄存器號(hào)對(duì)應(yīng)的地址寄 存器是用于表示不可寫(xiě)入的,那么所述執(zhí)行結(jié)果不會(huì)被真正寫(xiě)入所述零級(jí)存儲(chǔ)器中,即所 述執(zhí)行結(jié)果被舍棄。本發(fā)明所述的第二存儲(chǔ)器中的一部分可以作為執(zhí)行結(jié)果的暫存空間,對(duì)所述暫存 空間的內(nèi)容不做寫(xiě)回第一存儲(chǔ)器的操作。所述第二存儲(chǔ)器中的暫存空間中的內(nèi)容只供運(yùn)算 單元執(zhí)行后續(xù)指令時(shí)作為操作數(shù)使用。在所述處理器體系結(jié)構(gòu)中,還可以指定單數(shù)個(gè)或復(fù)數(shù)個(gè)基指針寄存器號(hào),使所述 基指針寄存器對(duì)應(yīng)第二存儲(chǔ)器中的存儲(chǔ)空間為暫存空間,對(duì)所述暫存空間的內(nèi)容不做寫(xiě)回第一存儲(chǔ)器的操作。所述第二存儲(chǔ)器中的暫存空間中的內(nèi)容為中間結(jié)果只供運(yùn)算單元執(zhí)行 后續(xù)指令時(shí)作為操作數(shù)使用。所述處理器體系結(jié)構(gòu)也可以具有用于暫存執(zhí)行結(jié)果的計(jì)算/轉(zhuǎn)移/狀態(tài)寄存器。 所述計(jì)算/轉(zhuǎn)移/狀態(tài)寄存器中的內(nèi)容只供執(zhí)行后續(xù)指令時(shí)判斷轉(zhuǎn)移條件、讀寫(xiě)處理器狀 態(tài)或進(jìn)行后續(xù)指令運(yùn)算時(shí)作為操作數(shù)使用。在傳統(tǒng)的處理器體系結(jié)構(gòu)中,用于暫存執(zhí)行結(jié)果的寄存器中的值是可以被寫(xiě)回到 存儲(chǔ)器中的,用于暫存執(zhí)行結(jié)果的存儲(chǔ)器中的內(nèi)容也可以被寫(xiě)回到更低存儲(chǔ)層次的存儲(chǔ)器 中。根據(jù)本發(fā)明技術(shù)方案,所述暫存空間或計(jì)算寄存器的內(nèi)容可以不被寫(xiě)回到第一存儲(chǔ)器, 因此也就不會(huì)被寫(xiě)回到更低存儲(chǔ)層次,可以降低具體設(shè)計(jì)的復(fù)雜度,并提高處理器整體效率。本所述的處理器體系結(jié)構(gòu)中還可以有基指針模式寄存器。所述基指針模式寄存 器也可以作為線程寄存器用于表示當(dāng)前運(yùn)行的線程的號(hào)碼。根據(jù)本發(fā)明技術(shù)方案,可以將 基指針寄存器分為復(fù)數(shù)組供不同的處理器線程使用,所述基指針模式寄存器中的不同值對(duì) 應(yīng)基指針寄存器的不同組別,所述基指針模式寄存器中每個(gè)模式代表一個(gè)線程。此時(shí)所述 基指針模式寄存器中內(nèi)容就是線程號(hào)碼(PID)。在不同線程對(duì)應(yīng)的指令與數(shù)據(jù)都能被明確 區(qū)分的情況下(如發(fā)明“一種低缺失率、低缺失懲罰的緩存方法和裝置”,中國(guó)專(zhuān)利申請(qǐng)?zhí)?200910247204. 4),采用本發(fā)明技術(shù)方案可以實(shí)現(xiàn)線程的快速切換。本所述的復(fù)數(shù)組基指針寄存器的數(shù)量與所述基指針模式寄存器中能表示的模式 的個(gè)數(shù)、即模式寄存器位寬有關(guān)。舉例而言,兩者關(guān)系可以是所述復(fù)數(shù)組的數(shù)量等于以2 為底、以所述基指針模式寄存器位寬為冪的數(shù)。本所述的處理器體系結(jié)構(gòu)中還可以有個(gè)數(shù)等于所述處理器體系結(jié)構(gòu)能支持的最 大線程數(shù)的復(fù)數(shù)組處理器狀態(tài)寄存器組,用于在線程切換時(shí)保存處理器狀態(tài),并提供與新 線程配套的處理器狀態(tài)。所述基指針模式寄存器中的不同值對(duì)應(yīng)不同的處理器狀態(tài)寄存器組。在傳統(tǒng)處理器體系結(jié)構(gòu)中,一旦需要切換線程,必須將原線程的狀態(tài)保存到存儲(chǔ) 器中或?qū)S玫臓顟B(tài)寄存器中,再切換成新的線程,并將事先儲(chǔ)存的狀態(tài)恢復(fù)后才能執(zhí)行新 線程中的指令。本發(fā)明所述體系結(jié)構(gòu)可以在切換線程的同時(shí)保存并更新?tīng)顟B(tài),以滿(mǎn)足快速 線程切換的要求。當(dāng)所述處理器中有所述基指針模式寄存器時(shí),可以具有用于裝載所述基指針模式 寄存器的指令。所述用于裝載所述基指針模式寄存器的指令可以是專(zhuān)門(mén)的基指針模式裝載 指令,也可以是與所述基地址裝載指令相同操作碼、但目標(biāo)寄存器號(hào)不同的指令。根據(jù)本發(fā)明所述技術(shù)方案,使用基指針模式寄存器可以增加對(duì)應(yīng)操作數(shù)或執(zhí)行結(jié) 果的當(dāng)前可用的基地址的數(shù)量,減少基地址的裝載次數(shù)及對(duì)應(yīng)在所述零級(jí)存儲(chǔ)器中數(shù)據(jù)寫(xiě) 回所述存儲(chǔ)層次中較低層次的次數(shù),能提高效率。本發(fā)明所述處理器體系結(jié)構(gòu)中的全部指令可以都不包含存儲(chǔ)數(shù)據(jù)的通用寄存器 號(hào),可以包含基指針寄存器號(hào)和偏移地址,也可以只包含偏移地址。所述指令格式中可以不明示基指針寄存器號(hào),此時(shí)基地址是默認(rèn)的。例如指令中 的基指針寄存器號(hào)和偏移地址的位置可以一同被用于構(gòu)成更長(zhǎng)長(zhǎng)度的偏移地址。但此時(shí)相 應(yīng)的基地址寄存器依然存在并可以被基地址裝載/存儲(chǔ)指令裝載或讀出,此時(shí)在所述基地址寄存器中的基地址就是在讀取操作數(shù)或?qū)懟貓?zhí)行結(jié)果時(shí)默認(rèn)的基地址,不需要在運(yùn)算指 令中明示。本發(fā)明所述體系結(jié)構(gòu)的處理器可應(yīng)用于上海芯豪微電子有限公司的發(fā)明 “基于單一指令集微處理器運(yùn)算單元的可配置多核/眾核系統(tǒng)”(中國(guó)專(zhuān)利申請(qǐng)?zhí)?200810203778. 7)、“針對(duì)多核/眾核處理器程序分割的后編譯系統(tǒng)”(中國(guó)專(zhuān)利申請(qǐng)?zhí)?200810203777. 2)、“一種數(shù)據(jù)處理的方法與裝置”(中國(guó)專(zhuān)利申請(qǐng)?zhí)?00910046117. 2)、“一 種數(shù)據(jù)處理的方法與裝置”(中國(guó)專(zhuān)利申請(qǐng)?zhí)?00910208432. 0),構(gòu)成前一個(gè)處理器的執(zhí)行 結(jié)果直接作為輸入送給后一個(gè)處理器的串行連接多核結(jié)構(gòu),所述串行連接多核結(jié)構(gòu)中的每 個(gè)處理器分別執(zhí)行完整程序的一部分,所有處理器接力實(shí)現(xiàn)完整程序的功能。所述處理器 核均沒(méi)有寄存器堆,也沒(méi)有將操作數(shù)從存儲(chǔ)器裝載到寄存器堆或?qū)?zhí)行結(jié)果從寄存器堆存 儲(chǔ)到存儲(chǔ)器的指令。當(dāng)由基于傳統(tǒng)體系結(jié)構(gòu)的處理器構(gòu)成串行連接多核結(jié)構(gòu)時(shí),數(shù)據(jù)可以由裝載和存 儲(chǔ)指令通過(guò)兩個(gè)處理器核之間的共享存儲(chǔ)器進(jìn)行傳遞,但前一個(gè)處理器核中通用寄存器堆 的值必須通過(guò)額外的存儲(chǔ)、裝載指令,或通過(guò)專(zhuān)門(mén)的數(shù)據(jù)通道傳遞到后一個(gè)處理器核的通 用寄存器堆中,使所述后一個(gè)處理器核能在與前一個(gè)處理器核相同狀態(tài)的前提下進(jìn)行后續(xù) 的程序執(zhí)行。當(dāng)采用基于本發(fā)明所述處理器體系結(jié)構(gòu)的處理器構(gòu)成串行連接多核結(jié)構(gòu)時(shí),由于 處理器內(nèi)部沒(méi)有傳統(tǒng)體系結(jié)構(gòu)中的通用寄存器,每個(gè)處理器的所有執(zhí)行結(jié)果都被直接傳遞 所述處理器與后一個(gè)處理器之間共享的零級(jí)存儲(chǔ)器中,因此能更高效率地實(shí)現(xiàn)所述串行連 接多核結(jié)構(gòu)。本發(fā)明所述處理器體系結(jié)構(gòu)的流水線段可以依次為(1)指令讀取段,從指令存儲(chǔ)器讀取指令;(2)指令譯碼段,指令譯碼,得到操作數(shù)地址信息;(3)數(shù)據(jù)讀取段,根據(jù)指令里包含的操作數(shù)地址信息從零級(jí)存儲(chǔ)器中讀出單數(shù)個(gè) 或復(fù)數(shù)個(gè)操作數(shù);(4)執(zhí)行段,運(yùn)算器執(zhí)行指令定義的運(yùn)算;操作數(shù)可以是從零級(jí)存儲(chǔ)器中讀出的 單數(shù)個(gè)或復(fù)數(shù)個(gè)操作數(shù),或者是從指令譯碼得到的單數(shù)個(gè)或復(fù)數(shù)個(gè)立即數(shù);(5)數(shù)據(jù)寫(xiě)回段,根據(jù)指令指定的地址信息將執(zhí)行結(jié)果寫(xiě)入零級(jí)存儲(chǔ)器。對(duì)于上述任意一種流水線,若零級(jí)存儲(chǔ)器不能在提供操作數(shù)的同時(shí)被寫(xiě)入,則可 以在數(shù)據(jù)寫(xiě)回段將執(zhí)行結(jié)果寫(xiě)入第二存儲(chǔ)器,當(dāng)?shù)谝淮鎯?chǔ)器用來(lái)接收第二存儲(chǔ)器送來(lái)的數(shù) 據(jù)的輸入端口有空閑時(shí),第二存儲(chǔ)器將存儲(chǔ)的數(shù)據(jù)依次寫(xiě)回第一存儲(chǔ)器。根據(jù)本發(fā)明技術(shù)方案,可以直接用基指針寄存器號(hào)與偏移地址對(duì)第一存儲(chǔ)器進(jìn)行 索引尋址,因此可以將上述的指令譯碼段和數(shù)據(jù)讀取段合并為譯碼取數(shù)段,使流水線更為 緊湊。本發(fā)明所述處理器體系結(jié)構(gòu)的流水線段還可以依次為(1)指令讀取段,從指令存儲(chǔ)器讀取指令;(2)譯碼取數(shù)段,指令譯碼,并根據(jù)指令里包含的操作數(shù)地址信息從零級(jí)存儲(chǔ)器中 讀出單數(shù)個(gè)或復(fù)數(shù)個(gè)操作數(shù);(3)執(zhí)行段,運(yùn)算器執(zhí)行指令定義的運(yùn)算;操作數(shù)可以是從零級(jí)存儲(chǔ)器中讀出的單數(shù)個(gè)或復(fù)數(shù)個(gè)操作數(shù),或者是從指令譯碼得到的單數(shù)個(gè)或復(fù)數(shù)個(gè)立即數(shù);(4)數(shù)據(jù)寫(xiě)回段,根據(jù)指令指定的地址信息將執(zhí)行結(jié)果寫(xiě)入零級(jí)存儲(chǔ)器。上述兩種流水線的共性都在于沒(méi)有使用寄存器堆,都支持復(fù)數(shù)個(gè)流水線段同時(shí)對(duì) 同一個(gè)存儲(chǔ)器進(jìn)行取操作數(shù)或?qū)懟貓?zhí)行結(jié)果的訪問(wèn),可以是同時(shí)進(jìn)行單數(shù)個(gè)或復(fù)數(shù)個(gè)數(shù)據(jù) 的讀取和寫(xiě)回。在上述兩種流水線結(jié)構(gòu)的基礎(chǔ)上增加流水線段依然屬于本發(fā)明技術(shù)方案的 一部分。有益效果本發(fā)明所述處理器體系結(jié)構(gòu)及基于所述體系結(jié)構(gòu)實(shí)現(xiàn)的處理器與現(xiàn)有的體系結(jié) 構(gòu)及對(duì)應(yīng)的傳統(tǒng)處理器相比,沒(méi)有對(duì)操作數(shù)的裝載、存儲(chǔ)指令。根據(jù)統(tǒng)計(jì),在傳統(tǒng)處理器的 程序中,裝載和存儲(chǔ)指令占程序中指令總數(shù)30%左右,由于本發(fā)明所述處理器沒(méi)有這類(lèi)指 令,因此能提高程序運(yùn)行效率及程序代碼的密度。
雖然該發(fā)明可以以多種形式的修改和替換來(lái)擴(kuò)展,說(shuō)明書(shū)中也列出了一些具體的 實(shí)施圖例并進(jìn)行詳細(xì)闡述。應(yīng)當(dāng)理解的是,發(fā)明者的出發(fā)點(diǎn)不是將該發(fā)明限于所闡述的特 定實(shí)施例,正相反,發(fā)明者的出發(fā)點(diǎn)在于保護(hù)所有基于由本權(quán)利聲明定義的精神或范圍內(nèi) 進(jìn)行的改進(jìn)、等效轉(zhuǎn)換和修改。圖1是本發(fā)明所述體系結(jié)構(gòu)的基本實(shí)施例。圖2是本發(fā)明所述體系結(jié)構(gòu)的改進(jìn)實(shí)施例。圖3是本發(fā)明所述處理器體系結(jié)構(gòu)中第二存儲(chǔ)器的一種具體實(shí)現(xiàn)的實(shí)施例。圖4是本發(fā)明所述處理器體系結(jié)構(gòu)中處理器運(yùn)算單元與零級(jí)存儲(chǔ)器連接方式的8 種實(shí)施例。圖5是本發(fā)明所述處理器體系結(jié)構(gòu)對(duì)應(yīng)流水線劃分的兩種實(shí)施例。圖6是本發(fā)明所述處理器體系結(jié)構(gòu)指令集中指令格式的實(shí)施例。圖7是基于本發(fā)明所述處理器體系結(jié)構(gòu)的處理器構(gòu)成的串行連接多核結(jié)構(gòu)的實(shí) 施例。
具體實(shí)施例方式圖1是本發(fā)明所述體系結(jié)構(gòu)的基本實(shí)施例。圖1(a)中的零級(jí)存儲(chǔ)器(100)向處 理器核(CPU core) (101)提供兩個(gè)操作數(shù)(111、112),并接受處理器核的執(zhí)行結(jié)果(114), 零級(jí)存儲(chǔ)器(100)由處理器核產(chǎn)生的地址(11 尋址。圖2是本發(fā)明所述體系結(jié)構(gòu)的改進(jìn)實(shí)施例。圖2(a)和圖2(b)中的零級(jí)存儲(chǔ)器 (100)向處理器核(101)提供兩個(gè)操作數(shù)(111、112),并接受處理器核的執(zhí)行結(jié)果(114), 零級(jí)存儲(chǔ)器(100)由處理器核產(chǎn)生的地址(11 尋址。圖2(a)顯示了零級(jí)存儲(chǔ)器重填 (refill)的途徑,其中從更低級(jí)存儲(chǔ)器來(lái)的重填總線(116)將重填數(shù)據(jù)從低級(jí)存儲(chǔ)器傳輸 到零級(jí)存儲(chǔ)器(100),選擇器(115)選擇將重填總線(116)或處理器核給出總線(114)上的 數(shù)據(jù)送給零級(jí)存儲(chǔ)器。圖2(b)與圖2(a)類(lèi)似,差別在零級(jí)存儲(chǔ)器(1001)有兩個(gè)寫(xiě)入,重填 總線(116)與結(jié)果總線(114)各自接到自己的寫(xiě)口。后續(xù)圖例為便于說(shuō)明起見(jiàn),不再列出 重填路徑。大規(guī)模三端口存儲(chǔ)器的成本較高,圖2(c)中零級(jí)存儲(chǔ)器由一個(gè)只有一個(gè)讀口和一個(gè)寫(xiě)口,或者只有一個(gè)讀/寫(xiě)口的第一存儲(chǔ)器(100 與一個(gè)后置的第二存儲(chǔ)器(102)構(gòu) 成,協(xié)作完成如圖1、圖2(a)和圖2(b)中三端口存儲(chǔ)器的同樣功能。此例中處理器核(101) 提供地址(11 供第一存儲(chǔ)器(100 及第二存儲(chǔ)器(10 尋址。處理器核(101)的執(zhí)行 結(jié)果通過(guò)總線(117)存入第二存儲(chǔ)器(102)。第一存儲(chǔ)器(1002)通過(guò)總線(111)提供一個(gè) 操作數(shù)給處理器核(101),第二存儲(chǔ)器(102)通過(guò)總線(112)提供另一個(gè)操作數(shù)(即以前運(yùn) 算的結(jié)果)給處理器核(101)。當(dāng)?shù)谝淮鎯?chǔ)器(1002)的寫(xiě)口有空閑時(shí),暫存在第二存儲(chǔ)器 (102)中的結(jié)果也可通過(guò)總線(112)寫(xiě)回至第一存儲(chǔ)器(1002)。請(qǐng)參閱圖3,本實(shí)施例為本發(fā)明所述處理器體系結(jié)構(gòu)中第二存儲(chǔ)器的一種具體實(shí) 現(xiàn)的實(shí)施例。在本實(shí)施例中,地址通過(guò)寫(xiě)地址總線(1401)寫(xiě)入指定項(xiàng)。兩個(gè)取地址總線(1410、 1402)可同時(shí)輸入兩個(gè)地址與地址存儲(chǔ)器所有項(xiàng)進(jìn)行比較,產(chǎn)生的比較結(jié)果(140 控制數(shù) 據(jù)存儲(chǔ)器的相應(yīng)項(xiàng)將對(duì)應(yīng)數(shù)據(jù)取出到取數(shù)據(jù)總線(1404)和取數(shù)據(jù)總線(1411)上。數(shù)據(jù)通 過(guò)寫(xiě)數(shù)據(jù)總線(1405)寫(xiě)入指定項(xiàng)。指向當(dāng)前寫(xiě)入項(xiàng)的寫(xiě)指示器(1406)為FIFO結(jié)構(gòu),以實(shí) 現(xiàn)多項(xiàng)的連續(xù)寫(xiě)入。數(shù)據(jù)通過(guò)讀數(shù)據(jù)總線(1407)讀出,對(duì)應(yīng)的地址通過(guò)讀地址總線(1409) 讀出。指向當(dāng)前讀出項(xiàng)的讀指示器(1408)亦為FIFO結(jié)構(gòu),以實(shí)現(xiàn)多項(xiàng)的連續(xù)讀出。讀寫(xiě) 機(jī)制保證所有項(xiàng)的讀出值一定為寫(xiě)入的最新值。根據(jù)本發(fā)明技術(shù)方案,對(duì)第二存儲(chǔ)器進(jìn)行寫(xiě)融合匹配需要對(duì)每個(gè)地址額外增加一 個(gè)比較器,所述比較器在本實(shí)施例中被省略。圖4是本發(fā)明所述處理器體系結(jié)構(gòu)中處理器運(yùn)算單元與零級(jí)存儲(chǔ)器連接方式的8 種實(shí)施例。在圖4(a)中,與處理器運(yùn)算單元(30 連接的零級(jí)存儲(chǔ)器由第一存儲(chǔ)器(301)和 第二存儲(chǔ)器(303)組成。運(yùn)算單元(302)需要兩個(gè)操作數(shù),并產(chǎn)生一個(gè)執(zhí)行結(jié)果。在本實(shí) 施例中,第一存儲(chǔ)器(301)支持同時(shí)提供或接收兩個(gè)數(shù)據(jù)。第一存儲(chǔ)器(301)可以是四端 口的存儲(chǔ)器,即具有兩組輸出數(shù)據(jù)總線和兩組輸入數(shù)據(jù)總線,且支持同時(shí)輸出兩組數(shù)據(jù)、或 同時(shí)輸入兩組數(shù)據(jù)、或同時(shí)輸入一組數(shù)據(jù)并輸出一組數(shù)據(jù);第一存儲(chǔ)器(301)也可以是兩 端口的存儲(chǔ)器,即具有兩組輸入/輸出數(shù)據(jù)總線,支持同時(shí)輸出兩組數(shù)據(jù)、或同時(shí)輸入兩組 數(shù)據(jù)、或同時(shí)輸入一組數(shù)據(jù)并輸出一組數(shù)據(jù)。第二存儲(chǔ)器(30 支持同時(shí)提供三個(gè)輸出數(shù) 據(jù)(316、317、318)并接收一個(gè)輸入數(shù)據(jù)(315),是四端口的存儲(chǔ)器。第一存儲(chǔ)器(301)和第 二存儲(chǔ)器(30 所需數(shù)據(jù)尋址地址均由運(yùn)算單元(30 產(chǎn)生。為便于描述,下面將以第一 存儲(chǔ)器(301)是四端口的存儲(chǔ)器為例進(jìn)行說(shuō)明,當(dāng)?shù)谝淮鎯?chǔ)器(301)是兩端口的存儲(chǔ)器時(shí), 情況類(lèi)似。運(yùn)算單元(302)所需的一個(gè)操作數(shù)(313)的來(lái)源可以是第一存儲(chǔ)器(301)的輸出 數(shù)據(jù)(308)或第二存儲(chǔ)器(303)的輸出數(shù)據(jù)(316),經(jīng)多路選擇器(306)選擇得到;另一個(gè) 操作數(shù)(314)的來(lái)源可以是第一存儲(chǔ)器(301)的輸出數(shù)據(jù)(310)或第二存儲(chǔ)器(303)的輸 出數(shù)據(jù)(317),經(jīng)多路選擇器(307)選擇得到。運(yùn)算單元(302)的執(zhí)行結(jié)果(315)作為輸入 數(shù)據(jù)送到第二存儲(chǔ)器(303)。第一存儲(chǔ)器(301)的一個(gè)輸入數(shù)據(jù)(309)的來(lái)源可以是從外部存儲(chǔ)器讀取來(lái)的數(shù) 據(jù)(31 或從第二存儲(chǔ)器(30 來(lái)的輸出數(shù)據(jù)(318),經(jīng)多路選擇器(304)選擇得到;另一 個(gè)輸入數(shù)據(jù)(311)的來(lái)源可以是從外部存儲(chǔ)器讀取來(lái)的數(shù)據(jù)(31 或從第二存儲(chǔ)器(303)來(lái)的輸出數(shù)據(jù)(318),經(jīng)多路選擇器(30 選擇得到。第一存儲(chǔ)器(301)的兩個(gè)輸出數(shù)據(jù) (308,310)分別送往與運(yùn)算單元(30 連接的兩個(gè)多路選擇器(306、307)。第二存儲(chǔ)器(303)的輸入數(shù)據(jù)(31 來(lái)自運(yùn)算單元的輸出。第二存儲(chǔ)器(303) 的一個(gè)輸出數(shù)據(jù)(318)送往與第一存儲(chǔ)器(301)連接的多路選擇器(304)和多路選擇器 (305);另外兩個(gè)輸出數(shù)據(jù)(316、317)分別送往與運(yùn)算單元(30 連接的兩個(gè)多路選擇器 (306,307)。對(duì)所述第二存儲(chǔ)器的尋址是通過(guò)地址信息的匹配來(lái)實(shí)現(xiàn)的,并不是通過(guò)地址進(jìn) 行索引(index)尋址。在本實(shí)施例中,運(yùn)算單元最初只能從第一存儲(chǔ)器(301)獲得操作數(shù),并將執(zhí)行結(jié) 果寫(xiě)入第二存儲(chǔ)器(303)。由于之前運(yùn)算的結(jié)果通常會(huì)被用做后續(xù)運(yùn)算的操作數(shù),因此,之 后的部分運(yùn)算會(huì)從第二存儲(chǔ)器(30 獲得部分或全部操作數(shù),并將執(zhí)行結(jié)果寫(xiě)入第二存儲(chǔ) 器(30 。當(dāng)運(yùn)算單元從第二存儲(chǔ)器(30 取操作數(shù)時(shí),第一存儲(chǔ)器(301)可以進(jìn)行從外部 存儲(chǔ)器獲取新數(shù)據(jù)的操作,或?qū)⒌诙鎯?chǔ)器(30 送來(lái)的數(shù)據(jù)寫(xiě)入第一存儲(chǔ)器(301)。如此 即可根據(jù)本發(fā)明技術(shù)方案,實(shí)現(xiàn)存儲(chǔ)器不經(jīng)過(guò)寄存器堆而直接向運(yùn)算單元提供操作數(shù)并寫(xiě) 回執(zhí)行結(jié)果。圖4(b)與圖4(a)在結(jié)構(gòu)上基本類(lèi)似,差別在于第二存儲(chǔ)器(3031)支持同時(shí)提供 兩個(gè)輸出數(shù)據(jù)(317、3181)并接收一個(gè)輸入數(shù)據(jù)(315),是三端口的存儲(chǔ)器,且外部存儲(chǔ)器 的輸入數(shù)據(jù)(3121)不與第二存儲(chǔ)器(3031)的輸出數(shù)據(jù)(3181)選擇,直接送到第一存儲(chǔ)器 (301)的輸入端口。此外第二存儲(chǔ)器(3031)的輸出數(shù)據(jù)(3181)直接送到第一存儲(chǔ)器(301) 的另一個(gè)輸入端口及與運(yùn)算單元(30 連接的多路選擇器(306)。在本實(shí)施例中,運(yùn)算單元最初只能從第一存儲(chǔ)器(301)獲得操作數(shù),并將執(zhí)行結(jié) 果寫(xiě)入第二存儲(chǔ)器(3031)。之后的部分運(yùn)算會(huì)從第二存儲(chǔ)器(30 獲得部分或全部操作 數(shù),并將執(zhí)行結(jié)果寫(xiě)入第二存儲(chǔ)器(303)。當(dāng)運(yùn)算單元(30 選擇第二存儲(chǔ)器(3031)的輸 出數(shù)據(jù)(3181)為操作數(shù)(313)時(shí),輸出數(shù)據(jù)(3181)同時(shí)被寫(xiě)回第一存儲(chǔ)器(301);當(dāng)運(yùn)算 單元(30 選擇第二存儲(chǔ)器(3031)的輸出數(shù)據(jù)(317)為操作數(shù)(314)時(shí),外部存儲(chǔ)器的輸 入數(shù)據(jù)(3121)可以被同時(shí)寫(xiě)入第一存儲(chǔ)器(301)。如此即可根據(jù)本發(fā)明技術(shù)方案,實(shí)現(xiàn)存 儲(chǔ)器不經(jīng)過(guò)寄存器堆而直接向運(yùn)算單元提供操作數(shù)并寫(xiě)回執(zhí)行結(jié)果。圖4(c)與圖4(a)在結(jié)構(gòu)上基本類(lèi)似,差別在于第一存儲(chǔ)器(3011)支持同時(shí)提供 兩個(gè)數(shù)據(jù),或同時(shí)提供一個(gè)數(shù)據(jù)并接收一個(gè)數(shù)據(jù),且外部存儲(chǔ)器的輸入數(shù)據(jù)(312 和第二 存儲(chǔ)器(30 的輸出數(shù)據(jù)(318 均只送到與第一存儲(chǔ)器(3011)連接的多路選擇器(305), 經(jīng)選擇后作為第一存儲(chǔ)器(301)的輸入數(shù)據(jù)(311)。在本實(shí)施例中,從外部存儲(chǔ)器或第二存儲(chǔ)器(30 寫(xiě)回第一存儲(chǔ)器(3011)的途徑 少了,但第一存儲(chǔ)器(3011)的結(jié)構(gòu)更為簡(jiǎn)單,且能夠?qū)崿F(xiàn)存儲(chǔ)器不經(jīng)過(guò)寄存器堆而直接向 運(yùn)算單元提供操作數(shù)并寫(xiě)回執(zhí)行結(jié)果。圖4(d)與圖4(b)在結(jié)構(gòu)上基本類(lèi)似,差別在于第一存儲(chǔ)器(3012)在一個(gè)時(shí)刻只 支持提供一個(gè)數(shù)據(jù),或接收一個(gè)數(shù)據(jù),且接收的輸入數(shù)據(jù)來(lái)源是從外部存儲(chǔ)器來(lái)的輸入數(shù) 據(jù)(3122),或第二存儲(chǔ)器(3031)的輸出數(shù)據(jù)(3183),經(jīng)多路選擇器(30 選擇得到。此外, 第二存儲(chǔ)器(3031)的輸出數(shù)據(jù)(3171)被分別送往與運(yùn)算單元(30 連接的兩個(gè)多路選擇 器(306、307)作為可能的操作數(shù)。由于處理器支持的指令中有些是單操作數(shù)指令,還有一些指令中只有一個(gè)操作數(shù)
13來(lái)源于存儲(chǔ)器,另一個(gè)來(lái)源于指令解碼得到的立即數(shù),因此并不是每條指令都需要從存儲(chǔ) 器獲取兩個(gè)操作數(shù)。在本實(shí)施例中,運(yùn)算單元(302)最初可以執(zhí)行上述只需要從存儲(chǔ)器獲 取一個(gè)操作數(shù)的指令,即從第一存儲(chǔ)器(3012)獲取一個(gè)操作數(shù),并將執(zhí)行結(jié)果寫(xiě)入第二存 儲(chǔ)器(3031);或通過(guò)運(yùn)算單元(30 將操作數(shù)從第一存儲(chǔ)器(301 移動(dòng)(move)到第二 存儲(chǔ)器(3031),之后的部分運(yùn)算會(huì)從第二存儲(chǔ)器(3031)獲得部分或全部操作數(shù),并將執(zhí)行 結(jié)果寫(xiě)入第二存儲(chǔ)器(3031)。第一存儲(chǔ)器(301 不支持同時(shí)讀寫(xiě)數(shù)據(jù),因此當(dāng)運(yùn)算單元 (302)不需要從第一存儲(chǔ)器(3012)獲取操作數(shù)時(shí),第一存儲(chǔ)器(3012)可以寫(xiě)入從外部存儲(chǔ) 器來(lái)的輸入數(shù)據(jù)(312 或從第二存儲(chǔ)器(3031)來(lái)的輸出數(shù)據(jù)(318 。如此即能實(shí)現(xiàn)存儲(chǔ) 器不經(jīng)過(guò)寄存器堆而直接向運(yùn)算單元提供操作數(shù)并寫(xiě)回執(zhí)行結(jié)果。圖4(e)與圖4(d)在結(jié)構(gòu)上基本類(lèi)似,差別在于第二存儲(chǔ)器(3032)只支持同時(shí) 提供一個(gè)輸出數(shù)據(jù)(3184)并接收一個(gè)輸入數(shù)據(jù)(315),是兩端口的存儲(chǔ)器。此外,第二存 儲(chǔ)器(3032)的輸出數(shù)據(jù)(3184)被送往運(yùn)算單元(302)作為一個(gè)操作數(shù),并被送往與運(yùn)算 單元(30 連接的多路選擇器(307)作為可能的另一個(gè)操作數(shù),以及被送往與第一存儲(chǔ)器 (3012)連接的多路選擇器(305)作為可能的輸入數(shù)據(jù)。在本實(shí)施例中,第二存儲(chǔ)器(303 無(wú)法同時(shí)向運(yùn)算單元(30 提供兩個(gè)不同的操 作數(shù),因此一旦執(zhí)行到需要從存儲(chǔ)器獲取兩個(gè)不同的操作數(shù)的指令時(shí),必須由第一存儲(chǔ)器 (3012)和第二存儲(chǔ)器(3032) —同提供操作數(shù)。這樣減少了數(shù)據(jù)從第二存儲(chǔ)器(3032)寫(xiě)回 第一存儲(chǔ)器(3012)的機(jī)會(huì),但簡(jiǎn)化了設(shè)計(jì)的復(fù)雜度,本實(shí)施例在單操作數(shù)指令出現(xiàn)頻率較 高的情況下是有優(yōu)勢(shì)的。圖4(f)與圖4(e)在結(jié)構(gòu)上基本類(lèi)似,差別在于增加了一個(gè)較小的在功能上類(lèi)似 旁路緩沖(look aside buffer)的第三存儲(chǔ)器(320)。第三存儲(chǔ)器也具有地址匹配功能,根 據(jù)本發(fā)明技術(shù)方案,在從第一存儲(chǔ)器(301 讀取數(shù)據(jù)之前會(huì)先在第三存儲(chǔ)器(320)中進(jìn)行 尋址匹配,只有當(dāng)?shù)谌鎯?chǔ)器(320)中沒(méi)有所需數(shù)據(jù),才會(huì)從第一存儲(chǔ)器(301 讀取。第 三存儲(chǔ)器(320)的尋址地址同樣由運(yùn)算單元(30 產(chǎn)生,接收來(lái)自第一存儲(chǔ)器(301 的輸 出數(shù)據(jù)(310)作為自身的輸入數(shù)據(jù),并將輸出數(shù)據(jù)(3081)送往與運(yùn)算單元(302)連接的多 路選擇器(306)作為可能的操作數(shù)。當(dāng)運(yùn)算單元(302)需要從第一存儲(chǔ)器(3012)獲得兩 個(gè)操作數(shù)時(shí),根據(jù)本發(fā)明技術(shù)方案,將其中一個(gè)操作數(shù)從第一存儲(chǔ)器(301 讀出暫存到第 三存儲(chǔ)器(320),下一周期由第一存儲(chǔ)器(301 和第三存儲(chǔ)器(320) —同提供所需的兩個(gè) 操作數(shù)。這種情況類(lèi)似于處理器流水線等待一個(gè)周期。此外,第二存儲(chǔ)器(303 的輸出數(shù) 據(jù)(318 被分別送往與運(yùn)算單元(30 連接的多路選擇器(306、307)作為可能的操作數(shù), 并被送往與第一存儲(chǔ)器(3012)連接的多路選擇器(305)作為可能的輸入數(shù)據(jù)。本實(shí)施例是對(duì)圖4(e)實(shí)施例的一種改進(jìn)。第三存儲(chǔ)器(320)可以暫存第一存儲(chǔ) 器(3012)的輸出數(shù)據(jù)(310)。之后,當(dāng)指令需要從第一存儲(chǔ)器(3012)獲取同樣操作數(shù)時(shí), 可以從第三存儲(chǔ)器(320)輸出該操作數(shù),使第一存儲(chǔ)器(301 能有空閑寫(xiě)入來(lái)自第二存儲(chǔ) 器(303 的輸出數(shù)據(jù)(3185),從而適應(yīng)更廣泛的程序。圖4(g)與圖4(d)在結(jié)構(gòu)上基本類(lèi)似,差別在于第一存儲(chǔ)器(3012)的輸出數(shù)據(jù) (3101)除了被送往與運(yùn)算單元(30 連接的多路選擇器(307)作為可能的操作數(shù)外,還與 從運(yùn)算單元輸出的執(zhí)行結(jié)果(315 —同被送往與第二存儲(chǔ)器(3031)連接的多路選擇器 (3153),經(jīng)選擇后得到第二存儲(chǔ)器(3031)的輸入數(shù)據(jù)(3151)。
本實(shí)施例是對(duì)圖4(d)和圖4(f)實(shí)施例的一種改進(jìn)。在本實(shí)施例中,第一存儲(chǔ)器 (3012)中的數(shù)據(jù)能夠不經(jīng)過(guò)運(yùn)算單元(30 直接旁路寫(xiě)入第二存儲(chǔ)器(3031),避免了對(duì)運(yùn) 算單元(302)的占用,因此能更好地提高運(yùn)算單元(302)的利用率。此外本實(shí)施例不需要 用到第三存儲(chǔ)器,本質(zhì)上是將第三存儲(chǔ)器合并到第二存儲(chǔ)器(3031)中,簡(jiǎn)化了設(shè)計(jì)并節(jié)省 了面積。圖4(h)與圖4(a)在結(jié)構(gòu)上基本類(lèi)似,差別在于第一存儲(chǔ)器由兩個(gè)大小不同的存 儲(chǔ)器(321)和存儲(chǔ)器(32 構(gòu)成,這兩個(gè)存儲(chǔ)器都只支持同時(shí)提供一個(gè)數(shù)據(jù)或接收一個(gè)數(shù) 據(jù)。存儲(chǔ)器(321)的輸出數(shù)據(jù)(308 被送往與運(yùn)算單元(30 連接的多路選擇器(306) 作為可能的操作數(shù);存儲(chǔ)器(322)的輸出數(shù)據(jù)(310)被送往與運(yùn)算單元(30 連接的另一 個(gè)多路選擇器(307)作為可能的另一個(gè)操作數(shù)。同時(shí)存儲(chǔ)器(321)的輸入數(shù)據(jù)來(lái)源除了從 外部存儲(chǔ)器來(lái)的輸入數(shù)據(jù)(31 和第二存儲(chǔ)器(303)的輸出數(shù)據(jù)(318)外,還可以是存儲(chǔ) 器(32 的輸出數(shù)據(jù)(3101),三者經(jīng)多路選擇器(3041)選擇后得到實(shí)際寫(xiě)入存儲(chǔ)器(321) 的輸入數(shù)據(jù)(3091)。在本實(shí)施例中,存儲(chǔ)器(321)和存儲(chǔ)器(322)結(jié)構(gòu)都比較簡(jiǎn)單,易于實(shí)現(xiàn)。存儲(chǔ)器 (322)儲(chǔ)存了圖4(a)實(shí)施例中第一存儲(chǔ)器(301)中的全部數(shù)據(jù),存儲(chǔ)器(321)通過(guò)從存儲(chǔ) 器(32 寫(xiě)入存儲(chǔ)器(321)的方式儲(chǔ)存了存儲(chǔ)器(322)中當(dāng)前使用率較高的一部分?jǐn)?shù)據(jù), 這樣保證了運(yùn)算單元(302)可以從不同的存儲(chǔ)器中獲取任意需要的操作數(shù)。在本實(shí)施例 中,所述當(dāng)前使用率較高的一部分?jǐn)?shù)據(jù)是當(dāng)前基指針寄存器指向的數(shù)據(jù)段。此時(shí),若要將數(shù) 據(jù)寫(xiě)入第一存儲(chǔ)器,則必須對(duì)存儲(chǔ)器(321)和存儲(chǔ)器(32 各自對(duì)應(yīng)地址寫(xiě)入同樣的數(shù)據(jù), 若要讀出數(shù)據(jù),則可以根據(jù)需要從兩個(gè)存儲(chǔ)器中同時(shí)讀出相同或不同的數(shù)據(jù)。圖5是本發(fā)明所述處理器體系結(jié)構(gòu)對(duì)應(yīng)流水線劃分的兩種實(shí)施例。圖5(a)中,流水線為5段流水線,分別是指令讀取(I) (501)、指令譯碼(D) (502)、 數(shù)據(jù)讀取(R) (503)、執(zhí)行(E) (504)和數(shù)據(jù)寫(xiě)回(W) (505)。在本實(shí)施例中,零級(jí)存儲(chǔ)器由 第一存儲(chǔ)器和第二存儲(chǔ)器構(gòu)成,其中第一存儲(chǔ)器采用與現(xiàn)有緩存類(lèi)似的標(biāo)志(tag)匹配結(jié) 構(gòu)。在指令讀取段(501),進(jìn)行指令標(biāo)志匹配(507),并同時(shí)讀取指令,再根據(jù)指令標(biāo) 志的匹配結(jié)果得到正確的指令。在指令譯碼段(502),在第二存儲(chǔ)器中對(duì)需要讀取的數(shù)據(jù)的地址信息進(jìn)行讀匹配 (512),同時(shí)將所述地址信息中的基地址和偏移地址相加以獲得完整的數(shù)據(jù)地址(513)。在數(shù)據(jù)讀取段(503),如果指令譯碼段(502)的地址信息匹配成功,則可以直接從 第二存儲(chǔ)器中讀取到所需的數(shù)據(jù)(514);如果匹配不成功,則用指令譯碼段(502)產(chǎn)生的完 整數(shù)據(jù)地址進(jìn)行數(shù)據(jù)讀標(biāo)志匹配(515),并對(duì)第一存儲(chǔ)器進(jìn)行索引尋址以讀取所需的數(shù)據(jù) (516),再根據(jù)數(shù)據(jù)標(biāo)志的匹配結(jié)果得到正確的數(shù)據(jù)。在本流水線段中,從第二存儲(chǔ)器中讀 取數(shù)據(jù)的操作(514)與數(shù)據(jù)讀標(biāo)志匹配(515)、從第一存儲(chǔ)器中讀取數(shù)據(jù)的操作(516)也可 以同時(shí)進(jìn)行,在增加一些功耗的情況下提高一些性能。在執(zhí)行段(504),除運(yùn)算器執(zhí)行指令定義的運(yùn)算(517)外,第二存儲(chǔ)器對(duì)執(zhí)行結(jié)果 將被寫(xiě)入的地址進(jìn)行寫(xiě)融合匹配(519),同時(shí)將執(zhí)行結(jié)果地址信息中的基地址和偏移地址 相加以獲得完整的數(shù)據(jù)地址(518)。在寫(xiě)回段(505),執(zhí)行結(jié)果被寫(xiě)入第二存儲(chǔ)器(520)。此后,當(dāng)?shù)谝淮鎯?chǔ)器用來(lái)接收第二存儲(chǔ)器送來(lái)的數(shù)據(jù)的輸入端口有空閑時(shí),第二存儲(chǔ)器將存儲(chǔ)的數(shù)據(jù)依次經(jīng)數(shù)據(jù)標(biāo)志 匹配后寫(xiě)回第一存儲(chǔ)器。根據(jù)本發(fā)明技術(shù)方案,也可以對(duì)所述流水線進(jìn)行部分改進(jìn)??梢栽谥噶钭x取段 (501)之前進(jìn)行指令標(biāo)志匹配、在數(shù)據(jù)讀取段(50 前進(jìn)行數(shù)據(jù)讀標(biāo)志匹配,從而在指令讀 取段(501)和數(shù)據(jù)讀取段(50 有更充分的時(shí)間用于訪問(wèn)第一存儲(chǔ)器。此外,也可以在指 令中不含有基指針寄存器號(hào)、第一存儲(chǔ)器的容量足夠容納所有數(shù)據(jù)的情況下不進(jìn)行數(shù)據(jù)標(biāo) 志的匹配。圖5(b)是將本發(fā)明技術(shù)方案應(yīng)用于發(fā)明“一種低缺失率、低缺失懲罰的緩存方法 和裝置”(中國(guó)專(zhuān)利申請(qǐng)?zhí)?00910M7204. 4)的流水線實(shí)施例。本實(shí)施例的流水線與圖5 (a) 中的流水線類(lèi)似,也分為指令讀取段(501)、指令譯碼段(521)、數(shù)據(jù)讀取段(503)、執(zhí)行段 (522)和數(shù)據(jù)寫(xiě)回段(505)。在指令讀取段(501),從指令存儲(chǔ)器讀取指令。在指令譯碼段(521),在第二存儲(chǔ)器中對(duì)需要讀取的數(shù)據(jù)的地址信息進(jìn)行讀匹配, 同時(shí)用包含基地址和偏移地址的地址信息直接在第一存儲(chǔ)器中進(jìn)行讀數(shù)據(jù)的尋址(523)。在數(shù)據(jù)讀取段(503),如果指令譯碼段(521)的地址信息匹配成功,則可以直接從 第二存儲(chǔ)器中讀取到所需的數(shù)據(jù);如果匹配不成功,則從第一存儲(chǔ)器讀取所需的數(shù)據(jù)。在執(zhí)行段(52 ,除運(yùn)算器執(zhí)行指令定義的運(yùn)算外,第二存儲(chǔ)器對(duì)執(zhí)行結(jié)果將被寫(xiě) 入的地址進(jìn)行寫(xiě)融合匹配,同時(shí)用包含基地址和偏移地址的地址信息直接在第一存儲(chǔ)器中 進(jìn)行寫(xiě)數(shù)據(jù)的尋址(5M)。在寫(xiě)回段(505),執(zhí)行結(jié)果被寫(xiě)入第二存儲(chǔ)器。此后,當(dāng)?shù)谝淮鎯?chǔ)器用來(lái)接收第二 存儲(chǔ)器送來(lái)的數(shù)據(jù)的輸入端口有空閑時(shí),第二存儲(chǔ)器將存儲(chǔ)的數(shù)據(jù)依次根據(jù)基地址和偏移 地址尋址寫(xiě)回第一存儲(chǔ)器。本實(shí)施例與圖5(a)實(shí)施例的差別在于由于采用了不同于傳統(tǒng)緩存結(jié)構(gòu)的第一存 儲(chǔ)器,在指令譯碼段(521)和數(shù)據(jù)讀取段(50 不需要計(jì)算得到完整的地址,而是可以直接 在第一存儲(chǔ)器中用包含基地址和偏移地址的地址信息進(jìn)行尋址(523、5M),使設(shè)計(jì)更為簡(jiǎn)
單、高效。圖6是本發(fā)明所述處理器體系結(jié)構(gòu)指令集中指令格式的實(shí)施例。為了便于說(shuō)明, 本實(shí)施例僅列舉了兩種指令格式,省略了其他幾種可能格式。圖6(a)是三操作數(shù)指令的格式。操作數(shù)一和操作數(shù)二為運(yùn)算單元執(zhí)行的輸入,操 作數(shù)三為運(yùn)算單元執(zhí)行的結(jié)果。所述三操作數(shù)指令由指令碼(601)、第一個(gè)基指針寄存器號(hào) (602)、第一個(gè)偏移地址(603)、第二個(gè)基指針寄存器號(hào)(604)、第二個(gè)偏移地址(605)、第三 個(gè)基指針寄存器號(hào)(606)和第三個(gè)偏移地址(607)構(gòu)成,其中基指針寄存器號(hào)(602)中對(duì) 應(yīng)的基地址加上偏移地址(60 可以得到操作數(shù)一的地址,基指針寄存器號(hào)(604)中對(duì)應(yīng) 的基地址加上偏移地址(60 可以得到操作數(shù)二的地址,基指針寄存器號(hào)(606)中對(duì)應(yīng)的 基地址加上偏移地址(607)可以得到執(zhí)行結(jié)果的地址。對(duì)于兩操作數(shù)指令,也可以具有類(lèi) 似的、但少一組基指針寄存器號(hào)和偏移地址的指令格式。圖6(b)是立即數(shù)指令或條件轉(zhuǎn)移指令的格式。在本實(shí)施例中,立即數(shù)指令的指 令格式與三操作數(shù)指令格式的差別在于前者只需要從存儲(chǔ)器獲取一個(gè)操作數(shù)并寫(xiě)入執(zhí)行 結(jié)果,另一個(gè)操作數(shù)來(lái)源于指令中的立即數(shù),因此立即數(shù)指令由立即數(shù)(608)、第二個(gè)基指針寄存器號(hào)(604)、第二個(gè)偏移地址(605)、第三個(gè)基指針寄存器號(hào)(606)和第三個(gè)偏移地 址(607)構(gòu)成,操作數(shù)和執(zhí)行結(jié)果地址的產(chǎn)生與圖6(a)實(shí)施例相同。條件轉(zhuǎn)移指令只需 要從存儲(chǔ)器獲取兩個(gè)操作數(shù),而不必有寫(xiě)回操作,因此指令格式也由立即數(shù)(即轉(zhuǎn)移偏移 量)(608)、第二個(gè)基指針寄存器號(hào)(604)、第二個(gè)偏移地址(605)、第三個(gè)基指針寄存器號(hào) (606)和第三個(gè)偏移地址(607)構(gòu)成,操作數(shù)和執(zhí)行結(jié)果地址的產(chǎn)生與圖6(a)實(shí)施例相同。 對(duì)于無(wú)條件轉(zhuǎn)移指令,可以有專(zhuān)門(mén)的指令格式,也可以將其視為條件轉(zhuǎn)移指令的特例,即轉(zhuǎn) 移條件始終成立的條件轉(zhuǎn)移指令,在具體的指令格式上,可以對(duì)第二和第三個(gè)基指針寄存 器號(hào)給予同樣的值,并對(duì)第二和第三個(gè)偏移地址給予同樣的值。對(duì)于基地址裝載指令,可以用一組基指針寄存器號(hào)及偏移地址對(duì)存儲(chǔ)器尋址得到 的數(shù)據(jù)寫(xiě)入另一個(gè)基指針寄存器號(hào)對(duì)應(yīng)的基指針寄存器中。根據(jù)本發(fā)明所述技術(shù)方案,還 可以有同時(shí)裝載兩組基地址的基地址裝載指令,即在指令格式中包含四個(gè)基指針寄存器號(hào) 和兩個(gè)偏移地址,同時(shí)用兩組基指針寄存器號(hào)及偏移地址對(duì)存儲(chǔ)器尋址得到兩組數(shù)據(jù)寫(xiě)入 另外兩個(gè)基指針寄存器號(hào)對(duì)應(yīng)的基指針寄存器中,所述另外兩個(gè)基指針寄存器號(hào)在指令中 的位置可以是圖6(b)指令格式中的立即數(shù)(608)的位置。此外,所述指令格式中可以不明示基指針寄存器號(hào),此時(shí)基地址是默認(rèn)的。例如圖 6(b)指令格式中第三個(gè)基指針寄存器號(hào)(606)和第三個(gè)偏移地址(607)的位置可以全部用 于構(gòu)成更長(zhǎng)長(zhǎng)度的偏移地址。但此時(shí)基地址寄存器依然是存在并可以被基地址裝載/存儲(chǔ) 指令裝載或讀出,只是沒(méi)有在指令中被明示。需要注意的是,本發(fā)明所述處理器體系結(jié)構(gòu)指令集中的指令格式并不僅限于本實(shí) 施例中列舉的指令格式,其他的指令格式也與此相似。圖7是基于本發(fā)明所述處理器體系結(jié)構(gòu)的處理器構(gòu)成的串行連接多核結(jié)構(gòu)的實(shí) 施例。處理器核(1101)由本地指令存儲(chǔ)器(1103)、運(yùn)算單元(1105)、數(shù)據(jù)地址產(chǎn)生模塊 (1107)、程序計(jì)數(shù)器(1108)、輸出緩沖(1110)以及零級(jí)存儲(chǔ)器組成。所述零級(jí)存儲(chǔ)器由第 一存儲(chǔ)器(110 和第二存儲(chǔ)器(1109)組成。第一存儲(chǔ)器(1104)是接在處理器核(1101) 后一級(jí)的處理器核對(duì)應(yīng)的零級(jí)存儲(chǔ)器的一部分。本地指令存儲(chǔ)器(110 存儲(chǔ)有處理器核(1101)執(zhí)行所需的指令。處理器核 (1101)中運(yùn)算單元(1105)所需的操作數(shù)可以來(lái)自第一存儲(chǔ)器(1102)、第二存儲(chǔ)器(1109)、 第一存儲(chǔ)器(1104),或來(lái)自指令中的立即數(shù);執(zhí)行結(jié)果寫(xiě)回第二存儲(chǔ)器(1109)。在本實(shí)施例中,處理器核對(duì)應(yīng)的第一存儲(chǔ)器(110 中的數(shù)據(jù)、第二存儲(chǔ)器(1109) 中的數(shù)據(jù)(1115)、后一個(gè)處理器核對(duì)應(yīng)的第一存儲(chǔ)器(1104)中的數(shù)據(jù)和外部的共享存 儲(chǔ)器中的數(shù)據(jù)(1111)通過(guò)多路選擇器(1116、1117)選擇后,作為操作數(shù)輸入到運(yùn)算單元 (1105)中。第二存儲(chǔ)器(1109)接收的數(shù)據(jù)有三個(gè)來(lái)源從運(yùn)算單元(110 來(lái)的數(shù)據(jù)、從第 一存儲(chǔ)器(110 來(lái)的數(shù)據(jù)、以及從外部的共享存儲(chǔ)器來(lái)的數(shù)據(jù)(1111)。所述從運(yùn)算單 元(110 來(lái)的數(shù)據(jù)、從第一存儲(chǔ)器(110 來(lái)的數(shù)據(jù)、以及從外部的共享存儲(chǔ)器來(lái)的數(shù)據(jù) (1111)通過(guò)多路選擇器(1112)選擇后輸入到第二存儲(chǔ)器(1109)。在本實(shí)施例中,第一存儲(chǔ)器只接收從前一處理器核中的第二存儲(chǔ)器來(lái)的數(shù)據(jù)輸 入。如第一存儲(chǔ)器(1104)接收來(lái)自處理器核(1101)中第二存儲(chǔ)器(1109)來(lái)的數(shù)據(jù)輸入 (1118)。
第一存儲(chǔ)器(110 接收的地址也有三個(gè)來(lái)源從前級(jí)處理器核第二存儲(chǔ)器中地 址存儲(chǔ)部分來(lái)的用于存儲(chǔ)數(shù)據(jù)的地址、從前級(jí)處理器核數(shù)據(jù)地址產(chǎn)生模塊來(lái)的用于讀取數(shù) 據(jù)的地址、從本級(jí)處理器核數(shù)據(jù)地址產(chǎn)生模塊(1107)來(lái)的用于讀取數(shù)據(jù)的地址。上述地址 通過(guò)多路選擇器選擇后,輸入到第一存儲(chǔ)器(110 中的地址接收模塊。相應(yīng)地,第一存儲(chǔ)器(1104)接收的地址有三個(gè)來(lái)源從前級(jí)處理器核第二存儲(chǔ) 器(1109)中地址存儲(chǔ)部分來(lái)的用于存儲(chǔ)數(shù)據(jù)的地址、從前級(jí)處理器核數(shù)據(jù)地址產(chǎn)生模塊 (1107)來(lái)的用于讀取數(shù)據(jù)的地址、從本級(jí)處理器核數(shù)據(jù)地址產(chǎn)生模塊來(lái)的用于讀取數(shù)據(jù)的 地址(111 。上述地址通過(guò)多路選擇器(1114)選擇后,輸入到第一存儲(chǔ)器(1104)中的地 址接收模塊。根據(jù)本發(fā)明技術(shù)方案,在本實(shí)施例中,處理器核(1101)的前一級(jí)處理器核的執(zhí)行 結(jié)果會(huì)被寫(xiě)入第一存儲(chǔ)器(110 ;第一存儲(chǔ)器(110 能夠直接向處理器核(1101)的運(yùn) 算單元(110 提供操作數(shù),或直接將數(shù)據(jù)旁路到第二存儲(chǔ)器(1109);運(yùn)算單元(1105)的 執(zhí)行結(jié)果可以被直接寫(xiě)入第二存儲(chǔ)器(1109)。第二存儲(chǔ)器(1109)能根據(jù)地址產(chǎn)生模塊 (1107)產(chǎn)生的地址輸出數(shù)據(jù)(1115)作為操作數(shù)供運(yùn)算單元(1105)使用。本實(shí)施例實(shí)現(xiàn)的 是多個(gè)處理器核構(gòu)成的串行連接多核結(jié)構(gòu),因此第二存儲(chǔ)器(1109)并不需要將數(shù)據(jù)寫(xiě)回 處理器核(1101)對(duì)應(yīng)的第一存儲(chǔ)器(1102),而是將數(shù)據(jù)寫(xiě)入后一個(gè)處理器核對(duì)應(yīng)的第一 存儲(chǔ)器(1104),從而實(shí)現(xiàn)數(shù)據(jù)的傳遞。
權(quán)利要求
1.一種處理器體系結(jié)構(gòu),其特征在于運(yùn)算單元直接從存儲(chǔ)器取得操作數(shù)、并將執(zhí)行結(jié) 果寫(xiě)回存儲(chǔ)器,此外還包含下列部分特征或全部特征(1)沒(méi)有寄存器堆(RegisterFile);(2)沒(méi)有將操作數(shù)從存儲(chǔ)器裝載(load)到寄存器堆的指令;(3)沒(méi)有將執(zhí)行結(jié)果從寄存器堆存儲(chǔ)(store)到存儲(chǔ)器中的指令;(4)對(duì)存儲(chǔ)器的尋址方式包括立即數(shù)直接尋址、基地址加偏移量方式尋址。
2.根據(jù)權(quán)利要求1所述的處理器體系結(jié)構(gòu),其特征在于支持復(fù)數(shù)個(gè)流水線段同時(shí)對(duì)邏 輯意義上的同一個(gè)存儲(chǔ)器進(jìn)行取操作數(shù)或?qū)懟貓?zhí)行結(jié)果的訪問(wèn),可以是同時(shí)進(jìn)行單數(shù)個(gè)或 復(fù)數(shù)個(gè)數(shù)據(jù)的讀取和寫(xiě)回。
3.根據(jù)權(quán)利要求1所述的處理器體系結(jié)構(gòu),其特征在于基于所述處理器體系結(jié)構(gòu)構(gòu)成 的處理器包含零級(jí)存儲(chǔ)器;所述零級(jí)存儲(chǔ)器具有同時(shí)支持讀取至少兩個(gè)數(shù)據(jù)并寫(xiě)回至少一 個(gè)數(shù)據(jù)的功能,可以由一個(gè)單獨(dú)的多端口存儲(chǔ)器構(gòu)成,也可以由復(fù)數(shù)個(gè)單端口或多端口存 儲(chǔ)器構(gòu)成。
4.根據(jù)權(quán)利要求3所述的處理器體系結(jié)構(gòu),其特征在于當(dāng)所述零級(jí)存儲(chǔ)器由復(fù)數(shù)個(gè)單 端口或多端口存儲(chǔ)器構(gòu)成時(shí),所述多端口存儲(chǔ)器至少由一個(gè)具有單數(shù)個(gè)端口或復(fù)數(shù)個(gè)端口 的第一存儲(chǔ)器和一個(gè)具有復(fù)數(shù)個(gè)端口的第二存儲(chǔ)器構(gòu)成。
5.根據(jù)權(quán)利要求3所述的處理器體系結(jié)構(gòu),其特征在于當(dāng)所述零級(jí)存儲(chǔ)器由復(fù)數(shù)個(gè)單 端口或多端口存儲(chǔ)器構(gòu)成時(shí),所述多端口存儲(chǔ)器還可以包括一個(gè)具有單數(shù)個(gè)端口或復(fù)數(shù)個(gè) 端口的第三存儲(chǔ)器,用于暫存第一存儲(chǔ)器的輸出數(shù)據(jù),以供運(yùn)算單元獲取操作數(shù)。
6.根據(jù)權(quán)利要求4所述的處理器體系結(jié)構(gòu),其特征在于所述第一存儲(chǔ)器或第二存儲(chǔ)器 可以由復(fù)數(shù)個(gè)大小相同或不同的存儲(chǔ)器構(gòu)成;當(dāng)所述第一存儲(chǔ)器由復(fù)數(shù)個(gè)不同大小的存儲(chǔ) 器構(gòu)成時(shí),較小的存儲(chǔ)器可以存有較大的存儲(chǔ)器中的一部分?jǐn)?shù)據(jù)。
7.根據(jù)權(quán)利要求4所述的處理器體系結(jié)構(gòu),其特征在于所述第二存儲(chǔ)器具有以下特征(1)用于存儲(chǔ)操作數(shù)及所述操作數(shù)對(duì)應(yīng)的地址信息;所述地址信息可以是地址值,也 可以是基地址值及偏移量;還可以是基指針寄存器號(hào)及偏移量;(2)所述用于存儲(chǔ)操作數(shù)的操作數(shù)存儲(chǔ)單元與用于存儲(chǔ)操作數(shù)地址的地址信息存儲(chǔ)單 元--對(duì)應(yīng);(3)具有讀、寫(xiě)指針,可以按特定算法寫(xiě)入或讀出操作數(shù);(4)可以將單數(shù)個(gè)或復(fù)數(shù)個(gè)輸入地址信息與存儲(chǔ)的地址信息進(jìn)行匹配,并輸出匹配成 功的單數(shù)個(gè)或復(fù)數(shù)個(gè)對(duì)應(yīng)操作數(shù);所述輸入地址信息可以是地址值,也可以是基地址值及 偏移量,還可以是基指針寄存器號(hào)及偏移量。
8.根據(jù)權(quán)利要求4所述的處理器體系結(jié)構(gòu),其特征在于所述第二存儲(chǔ)器還可以具有寫(xiě) 融合(write merge)功能,即被寫(xiě)入的數(shù)據(jù)對(duì)應(yīng)的地址信息在所述第二存儲(chǔ)器中已存在,則 可以將所述寫(xiě)入的數(shù)據(jù)替換部分或全部已存在的數(shù)據(jù)。
9.根據(jù)權(quán)利要求1所述的處理器體系結(jié)構(gòu),其特征在于基于所述處理器體系結(jié)構(gòu)構(gòu)成 的處理器還可以包含基指針(BP,Base Pointer)寄存器,用于存儲(chǔ)對(duì)零級(jí)存儲(chǔ)器進(jìn)行的以 基地址加偏移量方式尋址時(shí)的基地址。
10.根據(jù)權(quán)利要求3、9所述的處理器體系結(jié)構(gòu),其特征在于每個(gè)有效的基指針寄存器存儲(chǔ)與所述零級(jí)存儲(chǔ)器中的一部分?jǐn)?shù)據(jù)存儲(chǔ)單元對(duì)應(yīng)的基地址;若所述第二存儲(chǔ)器存儲(chǔ)的 地址信息是基指針寄存器號(hào)及偏移量、且所述有效的基指針寄存器的內(nèi)容被改寫(xiě)后,第二 存儲(chǔ)器中對(duì)應(yīng)于基指針寄存器原基地址的數(shù)據(jù)存儲(chǔ)單元中的數(shù)據(jù)應(yīng)被無(wú)效化;若所述數(shù)據(jù) 存儲(chǔ)單元中的數(shù)據(jù)應(yīng)該但還沒(méi)有寫(xiě)回第一存儲(chǔ)器時(shí),則需要先將被更改過(guò)的數(shù)據(jù)寫(xiě)回第一 存儲(chǔ)器后再被無(wú)效化。
11.根據(jù)權(quán)利要求9所述的處理器體系結(jié)構(gòu),其特征在于所述處理器體系結(jié)構(gòu)的指令 中不同的操作數(shù)或執(zhí)行結(jié)果可以共用同一組基指針寄存器,也可以具有各自獨(dú)立或部分獨(dú) 立的基指針寄存器;所述基指針寄存器可以全部用來(lái)存儲(chǔ)基地址,也可以有單數(shù)個(gè)或復(fù)數(shù) 個(gè)基指針寄存器用于表示向所述基指針寄存器對(duì)應(yīng)的存儲(chǔ)空間不可寫(xiě)入。
12.根據(jù)權(quán)利要求3、9所述的處理器體系結(jié)構(gòu),其特征在于所述第二存儲(chǔ)器中的一部 分可以作為執(zhí)行結(jié)果的暫存空間,對(duì)所述暫存空間的內(nèi)容不做寫(xiě)回第一存儲(chǔ)器的操作;在 所述處理器體系結(jié)構(gòu)中,還可以指定單數(shù)個(gè)或復(fù)數(shù)個(gè)基指針寄存器號(hào),使所述基指針寄存 器對(duì)應(yīng)第二存儲(chǔ)器中的存儲(chǔ)空間為暫存空間,對(duì)所述暫存空間的內(nèi)容不做寫(xiě)回第一存儲(chǔ)器 的操作;所述第二存儲(chǔ)器中的暫存空間的內(nèi)容只供運(yùn)算單元執(zhí)行后續(xù)指令時(shí)作為操作數(shù)使 用;所述處理器體系結(jié)構(gòu)也可以具有用于暫存執(zhí)行結(jié)果的計(jì)算/轉(zhuǎn)移/狀態(tài)寄存器;所述 計(jì)算/轉(zhuǎn)移/狀態(tài)寄存器中的內(nèi)容只供執(zhí)行后續(xù)指令時(shí)判斷轉(zhuǎn)移條件、讀寫(xiě)處理器狀態(tài)或 進(jìn)行后續(xù)指令運(yùn)算時(shí)作為操作數(shù)使用。
13.根據(jù)權(quán)利要求3所述的處理器體系結(jié)構(gòu),其特征在于還可以有基指針模式寄存器; 當(dāng)基指針寄存器被分為復(fù)數(shù)組供不同的處理器線程使用時(shí),所述基指針模式寄存器中的不 同值對(duì)應(yīng)基指針寄存器的不同組別;所述基指針模式寄存器中每個(gè)模式代表一個(gè)線程。
14.根據(jù)權(quán)利要求13所述的處理器體系結(jié)構(gòu),其特征在于還可以有個(gè)數(shù)等于所述 處理器體系結(jié)構(gòu)能支持的最大線程數(shù)的復(fù)數(shù)組處理器狀態(tài)寄存器組(processor status registers),用于在線程切換時(shí)保存處理器狀態(tài),并提供與新線程配套的處理器狀態(tài);所述 基指針模式寄存器中的不同值對(duì)應(yīng)不同的處理器狀態(tài)寄存器組。
15.根據(jù)權(quán)利要求3、9所述的處理器體系結(jié)構(gòu),其特征在于所述處理器體系結(jié)構(gòu)中的 全部指令可以都不包含存儲(chǔ)數(shù)據(jù)的通用寄存器號(hào),可以包含基指針寄存器號(hào)和偏移地址, 也可以只包含偏移地址。
16.根據(jù)權(quán)利要求1所述的處理器體系結(jié)構(gòu),其特征在于基于所述體系結(jié)構(gòu)的處理器 可以構(gòu)成前一個(gè)處理器核的執(zhí)行結(jié)果直接作為輸入送給后一個(gè)處理器核的串行連接多核 結(jié)構(gòu),所述串行連接多核結(jié)構(gòu)中的每個(gè)處理器核分別執(zhí)行完整程序的一部分,所有處理器 接力實(shí)現(xiàn)完整程序的功能;所述處理器核均沒(méi)有寄存器堆,也沒(méi)有將操作數(shù)從存儲(chǔ)器裝載 到寄存器堆或?qū)?zhí)行結(jié)果從寄存器堆存儲(chǔ)到存儲(chǔ)器的指令。
17.根據(jù)權(quán)利要求1所述的處理器體系結(jié)構(gòu),其特征在于流水線段可以依次為(1)指令讀取段,從指令存儲(chǔ)器讀取指令;(2)指令譯碼段,指令譯碼,得到操作數(shù)地址信息;(3)數(shù)據(jù)讀取段,根據(jù)指令里包含的操作數(shù)地址信息從零級(jí)存儲(chǔ)器中讀出單數(shù)個(gè)或復(fù) 數(shù)個(gè)操作數(shù);(4)執(zhí)行段,運(yùn)算器執(zhí)行指令定義的運(yùn)算;操作數(shù)可以是從零級(jí)存儲(chǔ)器中讀出的單數(shù) 個(gè)或復(fù)數(shù)個(gè)操作數(shù),或者是從指令譯碼得到的單數(shù)個(gè)或復(fù)數(shù)個(gè)立即數(shù);(5)數(shù)據(jù)寫(xiě)回段,根據(jù)指令指定的地址信息將執(zhí)行結(jié)果寫(xiě)入零級(jí)存儲(chǔ)器。
18.根據(jù)權(quán)利要求1所述的處理器體系結(jié)構(gòu),其特征在于流水線段還可以依次為(1)指令讀取段,從指令存儲(chǔ)器讀取指令;(2)譯碼取數(shù)段,指令譯碼,并根據(jù)指令里包含的操作數(shù)地址信息從零級(jí)存儲(chǔ)器中讀出 單數(shù)個(gè)或復(fù)數(shù)個(gè)操作數(shù);(3)執(zhí)行段,運(yùn)算器執(zhí)行指令定義的運(yùn)算;操作數(shù)可以是從零級(jí)存儲(chǔ)器中讀出的單數(shù) 個(gè)或復(fù)數(shù)個(gè)操作數(shù),或者是從指令譯碼得到的單數(shù)個(gè)或復(fù)數(shù)個(gè)立即數(shù);(4)數(shù)據(jù)寫(xiě)回段,根據(jù)指令指定的地址信息將執(zhí)行結(jié)果寫(xiě)入零級(jí)存儲(chǔ)器。
全文摘要
一種可以從存儲(chǔ)器直接向運(yùn)算單元提供操作數(shù),并將運(yùn)算單元執(zhí)行結(jié)果寫(xiě)回存儲(chǔ)器的處理器體系結(jié)構(gòu),沒(méi)有對(duì)操作數(shù)的裝載(load)、存儲(chǔ)(store)指令,能提高程序運(yùn)行效率及程序代碼的密度。
文檔編號(hào)G06F9/34GK102141905SQ201010104030
公開(kāi)日2011年8月3日 申請(qǐng)日期2010年1月29日 優(yōu)先權(quán)日2010年1月29日
發(fā)明者任浩琪, 林正浩 申請(qǐng)人:上海芯豪微電子有限公司