專利名稱:存儲(chǔ)器子系統(tǒng)的多字元儲(chǔ)存/讀取方法以及其電路的制作方法
技術(shù)領(lǐng)域:
本發(fā)明有關(guān)于在處理器寄存器群組(processor register file)和存儲(chǔ)器子系統(tǒng) 之間的多字元搬移的方法與其電路。
背景技術(shù):
在存儲(chǔ)器子系統(tǒng)里,公用編譯或組合語(yǔ)言程序設(shè)計(jì)經(jīng)常需要把一大塊存儲(chǔ) 器由一個(gè)位置復(fù)制到另一個(gè)位置,來(lái)存取連續(xù)的存儲(chǔ)器位置,例如函數(shù)堆棧推 進(jìn)和推出(function stack pushing and popping)等,存儲(chǔ)器子系統(tǒng)的最小可選址 單元是一個(gè)字節(jié)。目前,大多數(shù)處理器經(jīng)由一個(gè)指令存取一個(gè)存儲(chǔ)器位置。因 此,多字元的搬移只能借由一串的單字元搬移指令群來(lái)達(dá)成。舉例來(lái)說(shuō), 一個(gè) 字元載入指令一次只能夠把具有4個(gè)字節(jié)的單字元,從一存儲(chǔ)器位置移動(dòng)至處 理器寄存器中。三個(gè)這類的字元載入指令可以如下的格式, 一起完成3個(gè)字元的搬移。ld一wordrl, [BASE]. Id—word r2, [BASE+4]. Id—word r 14, [BASE+8],在以上的例子里,kLword代表字元載入指令;rl, r2和rl4皆代表用以接 收已選址存儲(chǔ)器位置值的處理器寄存器索引;而B(niǎo)ASE代表內(nèi)容當(dāng)作存儲(chǔ)器位 置基址的處理器寄存器索引?;吠ǔ?huì)加入偏移值(offset),以構(gòu)成最終的存 儲(chǔ)器地址。在常見(jiàn)的程序設(shè)計(jì)實(shí)務(wù)上,當(dāng)多個(gè)存儲(chǔ)器位置被存取時(shí),所涉及到 的寄存器通常有連續(xù)索引。再者,經(jīng)常涉及到特殊的寄存器,比如通用數(shù)據(jù) 指標(biāo)(dp),框架指標(biāo)(fp),函數(shù)調(diào)用返回指標(biāo)(rp),以及堆棧指標(biāo)(sp)。然而,使用一連串的單字元搬移指令去實(shí)現(xiàn)多字元搬移,也許會(huì)導(dǎo)致大量 程序碼和低效能。一些含有少量寄存器群組的處理器可借由指定在存儲(chǔ)器存取所涉及到的寄存器的選擇遮罩(selection mask),以能夠用單一指令來(lái)存取多個(gè)字元。在存 儲(chǔ)器存取中, 一個(gè)存儲(chǔ)器字元的存取需要一個(gè)寄存器當(dāng)作其來(lái)源(用于存儲(chǔ)器儲(chǔ) 存)或當(dāng)作其目的地(用于存儲(chǔ)器載入)。舉例來(lái)說(shuō),在具有16個(gè)寄存器(編號(hào)為r0 rl5)的處理器里,多字元搬移指 令可定義為ld_multi—word 0b0100000000000110, [BASE].在這個(gè)例子里,0b00000000000110是一個(gè)全16位元選擇遮罩,用以定義 在搬移中要使用寄存器rl, r2和r14。然而,對(duì)于含有N個(gè)寄存器和M-位元指令格式的處理器來(lái)說(shuō),如果N大 于等于M,這種指令規(guī)格是不可行的。因?yàn)榧拇嫫鬟x擇遮罩本身便需要N個(gè) 字元,故而沒(méi)有剩余的空間去對(duì)該指令格式里的其余信息編碼。如果M-N為小 的正整數(shù)(M-N值代表保留在指令格式內(nèi)以對(duì)其它信息進(jìn)行編碼的位元數(shù)),這 對(duì)此種處理器是無(wú)效率的。舉例來(lái)說(shuō),32位元的大多數(shù)處理器都含有32個(gè)通 用處理器寄存器,而此種指令格式不可能使用全寄存器選擇遮罩。因此,最好能有一種應(yīng)用于多寄存器處理器的存儲(chǔ)器搬移指令機(jī)制,期能 在連續(xù)存儲(chǔ)器位置和處理器寄存器之間移動(dòng)多字元,以減少程序碼,增進(jìn)指令 存取頻寬,以及達(dá)成高效能。發(fā)明內(nèi)容為解決上述問(wèn)題,本發(fā)明提出一種多字元搬移指令,用以在連續(xù)存儲(chǔ)器位 置和處理器寄存器群組之間移動(dòng)多個(gè)字元。本發(fā)明還提出一種存儲(chǔ)器搬移方法和其電路實(shí)施,用以在連續(xù)存儲(chǔ)器位置 和處理器寄存器群組之間移動(dòng)多字元。本發(fā)明中,多字元搬移指令定義存取類型(載入或儲(chǔ)存);處理器寄存器群組中的具有連續(xù)索引的寄存器組(group);選擇遮罩,用以在處理器寄存器 群組中選擇特殊寄存器;以及基底寄存器索引,用于存儲(chǔ)器子系統(tǒng)的相對(duì)應(yīng)存 儲(chǔ)器位置的起始地址。本發(fā)明的在一存儲(chǔ)器子系統(tǒng)和一處理器寄存器群組之間的存儲(chǔ)器搬移方 法包括產(chǎn)生一多字元搬移指令,其中,該多字元搬移指令指定 一存取類型 信息,基于一對(duì)信息的一連續(xù)寄存器組信息, 一遮罩選擇信息,以及用于該存 儲(chǔ)器子系統(tǒng)內(nèi)的相應(yīng)存儲(chǔ)器位置的一起始地址的一基底寄存器信息;以及回應(yīng) 于該多字元搬移指令,在該存儲(chǔ)器子系統(tǒng)和該處理器寄存器群組之間移動(dòng)多個(gè) 字元。本發(fā)明的一種回應(yīng)于一多字元搬移指令而在一存儲(chǔ)器子系統(tǒng)和一處理器 寄存器群組之間移動(dòng)多個(gè)字元的電路包括 一寄存器索引計(jì)算器,用以根據(jù)該 連續(xù)寄存器組信息,該遮罩選擇信息和該基底暫存信息而產(chǎn)生一寄存器索引和 一基底修改指定信號(hào); 一讀/寫控制器,回應(yīng)于該存取類型信息和該基底修改指 定信號(hào),產(chǎn)生一存儲(chǔ)器存取控制信號(hào)并送至該存儲(chǔ)器,產(chǎn)生一寄存器存取控制 信號(hào)并送至該處理器寄存器群組;以及一雙向選擇單元,根據(jù)該存儲(chǔ)器存取控 制信號(hào)和該寄存器存取控制信號(hào),在該存儲(chǔ)器子系統(tǒng)和該處理器寄存器之間雙 向地傳送該多字元。另外,經(jīng)由多字元搬移指令所存取的字元總數(shù)量等同于該連續(xù)寄存器組里 所定義的寄存器數(shù)量加上被該選擇遮罩所定義的寄存器數(shù)量。除此之外,附加 的信息,比如地址更新模式,順序模式,以及修改模式,可指定于多字元搬移 指令中,以達(dá)成不同存儲(chǔ)器選址模式。
為讓本發(fā)明的上述目的、特征和優(yōu)點(diǎn)能更明顯易懂,以下結(jié)合附圖對(duì)本發(fā) 明的具體實(shí)施方式
作詳細(xì)說(shuō)明,其中圖1顯示根據(jù)本發(fā)明實(shí)施例的實(shí)現(xiàn)多字元搬移指令的電路圖,其用于在存 儲(chǔ)器子系統(tǒng)160和處理器寄存器群組120間搬移多字元。主要元件符號(hào)說(shuō)明110:寄存器索引計(jì)算器120:寄存器群組130:讀/寫控制器140:存儲(chǔ)器次地址NEXT_ADDR寄存器150:雙向選擇單元跳存儲(chǔ)器子系統(tǒng)170:多路傳輸器175:多路傳輸器176:命令控制單元180:算術(shù)運(yùn)算單元190:邏輯運(yùn)算單元具體實(shí)施方式
本發(fā)明的一實(shí)施例提供多字元搬移指令,用以在連續(xù)存儲(chǔ)器位置和多個(gè)處 理器寄存器之間進(jìn)行多字元的移動(dòng)。除此之外,本發(fā)明還提供一電路實(shí)施例, 用以在存儲(chǔ)器子系統(tǒng)和該處理器寄存器之間進(jìn)行多字元搬移。在該實(shí)施例中,揭露多字元搬移指令的存取類型指標(biāo)(specifier)TYPE的兩 個(gè)值。當(dāng)TYPE是載入時(shí),其定義了多字元載入指令(lmw),用來(lái)把多個(gè)字元從 存儲(chǔ)器子系統(tǒng)中搬移至處理器寄存器群組中。當(dāng)TYPE是儲(chǔ)存時(shí),其定義了多 字元儲(chǔ)存指令(smw),用來(lái)把多個(gè)字元從處理器寄存器群組中搬移至存儲(chǔ)器子 系統(tǒng)中。除此之外,該多字元搬移指令還定義如下的一些信息處理器寄存器群組 中的連續(xù)寄存器組的初始寄存器索引START以及結(jié)束寄存器索引END;遮罩 指標(biāo)MASK,用以在此處理器寄存器群組中選擇特殊的寄存器;以及基底寄存 器指標(biāo)BASE,用于對(duì)應(yīng)存儲(chǔ)器的起始地址。寄存器組被START END和MASK 所定義,且被稱為搬移寄存器列表。其被用作來(lái)源(用于儲(chǔ)存)或目的地(用 于載入)。在該搬移寄存器列表中的寄存器的順序?yàn)榫咦钚〖拇嫫魉饕募?存器會(huì)位于該列表的開(kāi)頭,具最大寄存器索引的寄存器則位于該列表的結(jié)束。再者,該多字元搬移指令可定義附加的信息,例如地址更新模式(address update mode),順序模式(order mode),以及修改模式(modification mode)。該地址更新模式INC決定對(duì)于每一個(gè)存儲(chǔ)器字元搬移,是否要對(duì)該基底地址增加4 或減少4。假如該更新模式是"increment",則位于該搬移寄存器列表中的寄 存器從該列表的開(kāi)始處啟用;假如該更新模式是"decrement",則位于該搬移 寄存器列表中的寄存器將從該列表的結(jié)束處啟用。該順序模式BE決定在地址 更新之前或之后來(lái)存取存儲(chǔ)器。該修改模式MOD決定是否要在指令執(zhí)行結(jié)束 時(shí),將基底寄存器修改成最后更新的地址。所以,在多字元搬移指令中,有兩個(gè)階段。第一個(gè)階段稱為存儲(chǔ)器搬移階 段,是用以在已選址的存儲(chǔ)器位置與寄存器搬移列表之中移動(dòng)數(shù)據(jù)。第二階段 稱為基底修改階段,當(dāng)指定該修改模式MOD時(shí),在指令執(zhí)行結(jié)束,更新該基 底寄存器。舉例來(lái)說(shuō),常見(jiàn)的32位元指令處理器的通用目的寄存器(general purpose register, GPR)群組會(huì)具有32個(gè)寄存器,其可能被編碼為r0 r31 。假設(shè)最后4 個(gè)GPR (r28 r31)分別被定成寄存器dp, fp, rp和sp。該寄存器索引/指標(biāo)START, END和BASE各占據(jù)5個(gè)位元,共需使用15 個(gè)位元,每一個(gè)寄存器索引/指標(biāo)會(huì)指定32個(gè)寄存器中的一個(gè)寄存器。指標(biāo) MASK占據(jù)4個(gè)位元,用以指定4個(gè)特殊寄存器(dp, fp , rp和sp)。附加信 息,如該地址更新模式,該順序模式,以及該修改模式,分別占據(jù)l個(gè)位元, 總共占據(jù)3個(gè)位元。所以,在這種具有32個(gè)寄存器的處理器的多字元搬移指令中,可被運(yùn)算 碼和選擇遮罩所用的位元總和是-32-15-4-3=10。該存儲(chǔ)器載入和儲(chǔ)存指令的格式可能如下lmw.mode START, END, MASK, [BASE]smw.mode START,END,MASK, [BASE] 其中,"lmw"表示"載入多字元";"smw"表示"儲(chǔ)存多字元";且 "mode"定義上述的附加信息BE/INC/MOD。舉例來(lái)說(shuō),存儲(chǔ)器載入指令可能會(huì)有如下的格式lmw.bimrl,r3,勵(lì)0110, [r31]其中,寄存器rl被指定為起始地址,r3被指定為結(jié)束地址,遮罩糾b0110 指定寄存器r29和r30,而r31則被指定為基底寄存器,而且"bim"定義在基 底地址增加4之前來(lái)存取該存儲(chǔ)器,以及在該指令執(zhí)行結(jié)束時(shí)要修改該基底寄 存器。該"Imw.bimrl,r3,#0b0110,[r31],,的相對(duì)應(yīng)運(yùn)算如下所示addr= register[r31]; /* addr is the initial address */ register[rl] <= memory [addr]; addr- addr+4; register[r2] <= memory [addr]; addr= addr+4; register[r3] <= memory [addr]; addr= addr+4; register[r29] <= memory [addr]; add產(chǎn)addr+4; register[r30] <= memory [addr]; addr= addr+4; register[r31] <= addr; /* addr equals to register[31]+4*5 */在以上的運(yùn)算中,"addr-registerlr31"表示將臨時(shí)值addr初始化成 registerr311的值;"register[rxl<=memoryaddif,表示將地址為臨時(shí)值addr 的存儲(chǔ)器位置內(nèi)容載入寄存器rx中,其中rx^1, r2, r3, r29和r30; "addr= addr+4"表示增加該地址,且在這個(gè)實(shí)施例中,存儲(chǔ)器存取要在地址更新前完 成;"register[r311《addr"表示,在該指令執(zhí)行結(jié)束時(shí),將基底寄存器r31修改 成最后更新的地址。另舉例來(lái)說(shuō),存儲(chǔ)器儲(chǔ)存指令可能會(huì)有如下的格式smw.adm r2, r4, #0bl001, [r31]其中,寄存器r2被指定為起始寄存器,r4被指定為結(jié)束寄存器,遮罩 #0bl001指定寄存器r31和r28,且"adm"進(jìn)一步指定,在基底地址減少4 之后才存取存儲(chǔ)器,以及在指令執(zhí)行結(jié)束,要修改基底寄存器。"smw.adm r2, r4, #0bl001, [r31]"的相對(duì)應(yīng)運(yùn)算如下所示addr= register[r31];/* addr is the initial address */addr= addr-4; memory [addr] <= register[r31];addr= addr-4; memory [addr] <= register[r28];addr= addr-4; memory [addr] <= register[r4];addr= addr-4;memory [addr] <= register[r3];addr= addr-4;memory [addr] <= register[r2];register[r31] <= addr; /* addr equals to register[31]-4*5 */在以上的運(yùn)算中,"addr-register[r31"表示將臨時(shí)值addr初始化成 registerr31的值;"memoryaddr<=registerrx"表示將寄存器rx的值儲(chǔ)存 到地址為臨時(shí)值addr的存儲(chǔ)器位置中,其中rx=r31, r28, r4, r3和r2; "addr= addr-4"表示減少該地址,且在這個(gè)實(shí)例中,在地址更新后才完成存儲(chǔ) 器存?。?register[r31H-addr"表示在指令執(zhí)行結(jié)束后,將基底寄存器r31修改 至最后更新的地址。在習(xí)慣用法上,寄存器r31當(dāng)作堆棧指標(biāo)(sp),且上例用于函數(shù)堆棧復(fù)原。 多字元搬移指令的語(yǔ)意如下所定義,其中如果該地址更新模式INC是 "increment",那么inc_or_dec是"+ "(增加);而如果該地址更新模式INC是 "decrement",那么inc—or—dec是"-"(減少)。addr=register[base];for each register index reg—idx in the order specified by [START, END, MASK, INC] {if(order mode is "after") addr=addr inc—or—dec 4; if (access mode is "load")register[reg—idx]=memory[addr]; else /* store */<formula>formula see original document page 11</formula>在此實(shí)施例中,由單個(gè)指令所存取的字元總數(shù)量等于由寄存器索引/指標(biāo) START, END和MASK所定義的寄存器數(shù)量。舉例來(lái)說(shuō),由上述的多字元搬 移指令(i.e. 1mw.bimrl,r3,糾b0110, [r31])所存取的字元總數(shù)是5,因?yàn)榧拇?器指標(biāo)START和END定義了 3個(gè)寄存器(rl r3)而寄存器指標(biāo)MASK則定 義2個(gè)寄存器(r29及r30)。根據(jù)函數(shù)調(diào)用的通用程序設(shè)計(jì)實(shí)務(wù),寄存器通常可做下列的分組函數(shù)引 數(shù)和回傳值,函數(shù)調(diào)用者保存寄存器,函數(shù)被調(diào)用者保存寄存器,臨時(shí)寄存器, 以及特殊寄存器(如sp, fp, dp, rp,等等)。通常,除特殊寄存器以外, 其它寄存器的索引是連續(xù)的。該實(shí)施例能儲(chǔ)存/復(fù)原任何寄存器組與特殊寄存 器。在該實(shí)施例中,在執(zhí)行多字元載入指令lmw之后執(zhí)行多字元儲(chǔ)存指令 smw,可將多個(gè)字元的內(nèi)容從某一存儲(chǔ)器地址復(fù)制到另一個(gè)存儲(chǔ)器地址。圖1顯示根據(jù)本發(fā)明實(shí)施例的實(shí)現(xiàn)多字元搬移指令的電路圖,其用于在存 儲(chǔ)器子系統(tǒng)160和處理器寄存器群組120間搬移多字元。該電路包括寄存器索引計(jì)算器110,讀/寫控制器130,存儲(chǔ)器次地址 NEXT—ADDR寄存器140,雙向選擇單元150,多路傳輸器170與175,命令控 制單元176,算術(shù)運(yùn)算單元180,以及邏輯運(yùn)算單元190。寄存器索引計(jì)算器110,存儲(chǔ)器次地址NEXT一ADDR寄存器140,存儲(chǔ)器 子系統(tǒng)160,以及處理器寄存器群組120按照外部時(shí)鐘脈沖信號(hào) STEP—CONTROL的控制來(lái)運(yùn)作。眾所周知的,外部時(shí)鐘脈沖信號(hào) STEP—CONTROL可為簡(jiǎn)單的電路時(shí)鐘脈沖信號(hào),其在多字元搬移指令的操作 周期內(nèi)才會(huì)有效。在開(kāi)始執(zhí)行多字元搬移指令時(shí),在信號(hào)STEP—CONTRAL的一個(gè)周期內(nèi), 會(huì)出現(xiàn)另一信號(hào)FIRST_STEP,以控制寄存器索引計(jì)算器110和多路傳輸器 175。當(dāng)信號(hào)FIRST—STEP出現(xiàn)時(shí),多路傳輸器175能從BASE—REG得到一串 存儲(chǔ)器地址的初始值,此初始值是利用寄存器索引BASE而從寄存器群組120 中讀出,其經(jīng)由在此實(shí)施例中所假設(shè)的另一個(gè)不同寄存器讀取端口所讀出。關(guān) 于取得BASE—REG值的詳細(xì)運(yùn)作是公知的,故將細(xì)節(jié)略過(guò)。當(dāng)信號(hào)FIRST—STEP 未出現(xiàn)時(shí),多路傳輸器175會(huì)選擇存儲(chǔ)器次地址NEXT_ADDR寄存器140的輸 出信號(hào)。一旦接收到已出現(xiàn)的信號(hào)FIRST—STEP ,對(duì)于各STEP—CONTROL周期, 寄存器索引計(jì)算器110根據(jù)索弓l/指標(biāo)START, END, MASK和BASE而開(kāi)始 產(chǎn)生寄存器索引REG—IDX。再者,寄存器索引計(jì)算器IIO更基于該地址更新 模式INC而產(chǎn)生寄存器索引REG一IDX,其中,地址更新模式在該寄存器索引 計(jì)算器110的運(yùn)算中是可選擇的。當(dāng)?shù)刂犯履J絀NC代表"增加"時(shí),在信 號(hào)STEP—CONTROL的一個(gè)周期內(nèi),根據(jù)索弓l/指標(biāo)START END (由START 至END的方向)和MASK所定義的搬移寄存器列表的開(kāi)頭,寄存器索引計(jì)算 器UO會(huì)借由輸出寄存器索引REG—IDX來(lái)指定寄存器。當(dāng)該地址更新模式INC 代表"減少"時(shí),在信號(hào)STEP—CONTROL的一個(gè)周期內(nèi),根據(jù)索引/指標(biāo)MASK 禾口END START (由END至START)所定義的搬移寄存器列表的結(jié)尾,寄 存器索引計(jì)算器IIO會(huì)輸出寄存器索引REGJDX來(lái)指定寄存器。如果修改模 式被啟動(dòng),那么在指令執(zhí)行結(jié)束時(shí),寄存器索引計(jì)算器IIO會(huì)輸出索引BASE。 舉例來(lái)說(shuō),對(duì)于格式為"lmw.bim rl, r3, #0b0110, [r31]"的多字元載入指令, 該寄存器索引REG—IDX相繼地指定rl, r2, r3 (基于START END) , r29, r30 (基于MASK),以及r31 (BASE)。同樣地,對(duì)于格式為"smw.bdm rl, r3, 柳blOOl, [r31]"格式的多字元儲(chǔ)存指令,該寄存器索引REGJDX相繼地指定 r31, r28(基于MASK) , r3, r2, rl (基于END START),以及r31 (BASE)。再者,在寄存器索引計(jì)算器110已產(chǎn)生多字元搬移指令的搬移寄存器列表 中的所有寄存器索引后且正在產(chǎn)生寄存器BASE的索引時(shí),寄存器索引計(jì)算器 IIO輸出指示信號(hào)IS BASE。當(dāng)IS—BASE未出現(xiàn)時(shí),此電路是處于存儲(chǔ)器搬移階段;而當(dāng)IS一BASE出現(xiàn)且MOD為真時(shí),此電路是處于修改階段。寄存器群組120接收來(lái)自寄存器索引計(jì)算器110的寄存器索引REGJDX,用以定義哪個(gè)寄存器要被讀取或是寫入。回應(yīng)于存儲(chǔ)器存取類型信號(hào)TYPE,指示信號(hào)IS_BASE以及修改模式 MOD,讀/寫控制器RW一CTL 130控制存儲(chǔ)器子系統(tǒng)160和寄存器群組120的 讀寫運(yùn)算??刂菩盘?hào)MEM一R, MEM_W, REG_R和REG_W分別用于啟動(dòng)存 儲(chǔ)器讀取運(yùn)算,存儲(chǔ)器寫入運(yùn)算,寄存器讀取運(yùn)算,以及寄存器寫入運(yùn)算。讀 /寫控制器130的詳細(xì)運(yùn)作解釋如下。雙向選擇單元SEL 150決定,是否數(shù)據(jù)是由REG_VALUE流至 MEM—VALUE(在存儲(chǔ)器搬移階段的存儲(chǔ)器寫入中,例如當(dāng)REG一R為真且信 號(hào)191為假);或數(shù)據(jù)是由MEM—VALUE流至REG—VALUE(在存儲(chǔ)器搬移階段 的存儲(chǔ)器讀取,例如當(dāng)REG—W為真且信號(hào)191為假);亦或數(shù)據(jù)是由MEM一AD 流至REG—VALUE(在基底修改階段,例如當(dāng)REG—W和信號(hào)191都是為)。存儲(chǔ)器次地址NEXT_ADDR寄存器140可暫存地址增減后的更新后存儲(chǔ) 器地址(信號(hào)181),并在下一個(gè)STEP—CONTROL的周期時(shí),把其輸出成信號(hào) 141并輸入至多路傳輸器175。在命令控制單元176的輸出信號(hào)177的控制下,回應(yīng)于順序模式BE和 IS_BASE,多路傳輸器170從更新后基底地址181和182中選一。如果該順序 模式指定,,先前模式(before)"(此模式表示在增減該存儲(chǔ)器地址之前做存儲(chǔ)器存 取),那么多路傳輸器170選擇輸入182,否則,多路傳輸器170選擇輸入181。 然而,如果修改模式MOD為真,那么多路傳輸器170總是在信號(hào) STEP—CONTROL的最后一個(gè)周期中選擇輸入182。信號(hào)177的產(chǎn)生的定義如下if(IS—BASE) signal 177= before; elsesignal 177= BE; /* BE can be before or after */算術(shù)運(yùn)算單元180接收由BASE所定義的基底寄存器或接收存儲(chǔ)器次地址 NEXT一ADDR寄存器140的輸出141,且該算術(shù)運(yùn)算單元180產(chǎn)生更新后基底 地址181,以回應(yīng)于地址更新模式INC,例如,增加4或減少4?,F(xiàn)在,請(qǐng)?jiān)倩氐綀Dl來(lái)解釋在寄存器群組120和存儲(chǔ)器子系統(tǒng)160之間的 數(shù)據(jù)搬移。在此,格式為"lmw.bim rl, r3,勵(lì)OllO, [r31]"的多字元載入指令 只是用于舉例說(shuō)明而已。如上所述,在STEP—CONTROL的各別周期內(nèi),源自 寄存器索引計(jì)算器110的寄存器索引REG—IDX相繼地指定rl, r2, r3, r29, r30和r31。在指令的第一個(gè)STEP—CONTROL周期中,信號(hào)FIRST—STEP會(huì)出現(xiàn)。用 來(lái)指定rl的寄存器索引REGJDX被送至該寄存器群組120。讀/寫控制器130 產(chǎn)生存儲(chǔ)器讀取信號(hào)MEM—R并送至該存儲(chǔ)器子系統(tǒng)160,以及產(chǎn)生寄存器寫 入信號(hào)REG_W并送至該寄存器群組120。接著,該存儲(chǔ)器子系統(tǒng)160送出由 存儲(chǔ)器地址MEM—AD所定義的存儲(chǔ)器內(nèi)容MEM—VALUE;在多路傳輸器175 從端口 "first"選擇其輸入BASE—REG下的情形下,存儲(chǔ)器地址MEM_AD的 值為r31,多路傳輸器170從端口 "before"處選擇其輸入182,而且雙向選擇 單元150將該存儲(chǔ)器內(nèi)容MEM一VALUE當(dāng)作寄存器值REG_VALUE而傳送至 寄存器群組120中的寄存器rl內(nèi)。同時(shí),基底寄存器的值增加4,且其值r31+4 被儲(chǔ)存在存儲(chǔ)器次地址NEXT—ADDR寄存器140中。在下一個(gè)STEP_CONTROL周期中,指定r2的寄存器索引REG—IDX被送 至寄存器群組120。讀/寫控制器130產(chǎn)生存儲(chǔ)器讀取信號(hào)MEM—R并送至存儲(chǔ) 器子系統(tǒng)160中,以及產(chǎn)生寄存器寫入信號(hào)REG_W并送至寄存器群組120。 接著,由存儲(chǔ)器地址MEM_AD所定義的存儲(chǔ)器子系統(tǒng)160的內(nèi)容被寫入至寄 存器群組120中的寄存器r2。在多路傳輸器175從端口 "later"處選擇其輸入 141以及多路傳輸器170從端口 "before"處選擇其輸入182的情況下,存儲(chǔ)器 地址MEM—AD指定此存儲(chǔ)器次地址NEXT—ADDR寄存器140的輸出值,且此 值等于r3i+4。同時(shí),算術(shù)運(yùn)算單元180將其輸入(也就是存儲(chǔ)器次地址 NEXT_ADDR寄存器140的輸出,其值為r31+4)增加4,而算術(shù)運(yùn)算單元180 的輸出會(huì)再增加4(等于r31+8)并再次存入存儲(chǔ)器次地址NEXT—ADDR寄存器 140中。借由以上操作,存儲(chǔ)器地址MEM一AD,分別為(r31+8), (r31 + 12),及 (r31 + 16),的存儲(chǔ)器內(nèi)容會(huì)被分別載入至該寄存器r3, r29和r30中。在指令執(zhí) 行結(jié)束時(shí),由于要改變?cè)摶准拇嫫髦笜?biāo)BASE,所以寄存器索引計(jì)算器110 輸出寄存器索引REG—IDX作為BASE,并輸出IS_BASE;同時(shí),多路傳輸器 170從端口 "after"處選擇其輸入181來(lái)當(dāng)成存儲(chǔ)器地址MEM—AD(其值為 r31+20);并且,雙向選擇單元150選擇存儲(chǔ)器地址MEM_AD作為寄存器值 REG_VALUE,用以更新由BASE所定義的基底寄存器,亦即令r31=r31+20。在上例中,經(jīng)由上述的多字元搬移指令,連續(xù)存儲(chǔ)器位置的5個(gè)字元可利 用單一指令而載入至該處理器寄存器中。以下列出圖1的該讀/寫控制器130在多字元搬移指令中的詳細(xì)運(yùn)作。If(IS_BASE is false) { /*memory transfer phase*/If(TYPE == "load") { assert REG—W; assert MEMR;} else { /*TYPE==,,store,,*/ assert REGR; assert MEM一W;} else if(both IS—BASE and MOD are true) { /*base modification phase*/ assert REG—W;當(dāng)信號(hào)IS—BASE是假時(shí)(如存儲(chǔ)器搬移階段),如果存儲(chǔ)器存取類型 信號(hào)TYPE是載入("load"),那么讀/寫控制器130產(chǎn)生該存儲(chǔ)器讀取信號(hào) MEM—R和寄存器寫入信號(hào)REG_W;如果該存儲(chǔ)器存取類型信號(hào)TYPE是儲(chǔ)存 ("store"),那么該讀/寫控制器130產(chǎn)生該寄存器讀取信號(hào)REG一R和該存儲(chǔ)器寫 入信號(hào)MEM—W。當(dāng)信號(hào)IS—BASE和MOD都為真時(shí)(基底修改階段),讀/ 寫控制器130只產(chǎn)生寄存器寫入信號(hào)REG_W。在另一個(gè)實(shí)施例中,該處理器搬移寄存器列表可由START, NUMREG和 MASK來(lái)定義,其中START和MASK的定義同于先前實(shí)施例,且NUMREG 代表在連續(xù)寄存器組中的寄存器的編號(hào)。因此,在此實(shí)施例中的"lmw START, NUMREG, MASK, [BASE]"等同于在先前實(shí)施例中的"lmw START, END, MASK, [BASE]",其中END=START+NUMREG-1 。綜上所述,單一的多字元搬移指令足以在連續(xù)存儲(chǔ)器位置和多個(gè)處理器寄 存器之間移動(dòng)多個(gè)字元,且仍有數(shù)個(gè)可用位元能用于次運(yùn)算碼(sub-opcode)和 選擇遮罩指標(biāo)。雖然本發(fā)明已以較佳實(shí)施例揭示如上,然其并非用以限定本發(fā)明,任何本 領(lǐng)域技術(shù)人員,在不脫離本發(fā)明的精神和范圍內(nèi),當(dāng)可作些許的修改和完善, 因此本發(fā)明的保護(hù)范圍當(dāng)以權(quán)利要求書(shū)所界定的為準(zhǔn)。
權(quán)利要求
1.一種在一存儲(chǔ)器子系統(tǒng)和一處理器寄存器群組之間的存儲(chǔ)器搬移方法,該方法包括產(chǎn)生一多字元搬移指令,其中,該多字元搬移指令指定一存取類型信息,基于一對(duì)信息的一連續(xù)寄存器組信息,一遮罩選擇信息,以及用于該存儲(chǔ)器子系統(tǒng)內(nèi)的相應(yīng)存儲(chǔ)器位置的一起始地址的一基底寄存器信息;以及回應(yīng)于該多字元搬移指令,在該存儲(chǔ)器子系統(tǒng)和該處理器寄存器群組之間移動(dòng)多個(gè)字元。
2. 如權(quán)利要求1所述的存儲(chǔ)器搬移方法,其特征在于,該存取類型信息定 義一存儲(chǔ)器載入類型和一存儲(chǔ)器儲(chǔ)存類型之一。
3. 如權(quán)利要求1所述的存儲(chǔ)器搬移方法,其特征在于,所搬移的字元總數(shù) 量等同于,由該連續(xù)寄存器組所定義的寄存器數(shù)量加上由該遮罩選擇信息所定 義的寄存器數(shù)量。
4. 如權(quán)利要求1所述的存儲(chǔ)器搬移方法,其特征在于,該多字元搬移指令進(jìn)一步定義一地址更新模式,用以指定根據(jù)該存儲(chǔ)器位置的該起始地址來(lái)更 新各存儲(chǔ)器搬移的該存儲(chǔ)器地址。
5. 如權(quán)利要求4所述的存儲(chǔ)器搬移方法,其特征在于,該多字元搬移指 令迸一步定義一順序模式,用以指定在該存儲(chǔ)器地址每次更新之前或之后,來(lái) 執(zhí)行該存儲(chǔ)器存取。
6. 如權(quán)利要求5所述的存儲(chǔ)器搬移方法,其特征在于,該多字元搬移指 令進(jìn)一步定義一修改模式,用以指定在該指令執(zhí)行結(jié)束時(shí),是否要依據(jù)最后更 新的存儲(chǔ)器地址來(lái)修改該基底寄存器信息。
7. —種回應(yīng)于一多字元搬移指令而在一存儲(chǔ)器子系統(tǒng)和一處理器寄存器 群組之間移動(dòng)多個(gè)字元的電路,其中該指令定義 一存取類型信息;根據(jù)一對(duì) 信息的一連續(xù)寄存器組; 一遮罩選擇信息;以及用于該存儲(chǔ)器子系統(tǒng)內(nèi)的相應(yīng) 存儲(chǔ)器位置的一起始地址的一基底寄存器信息,該電路包括一寄存器索引計(jì)算器,用以根據(jù)該連續(xù)寄存器組信息,該遮罩選擇信息和 該基底暫存信息而產(chǎn)生一寄存器索引和一基底修改指定信號(hào);一讀/寫控制器,回應(yīng)于該存取類型信息和該基底修改指定信號(hào),產(chǎn)生一存 儲(chǔ)器存取控制信號(hào)并送至該存儲(chǔ)器,產(chǎn)生一寄存器存取控制信號(hào)并送至該處理 器寄存器群組;以及一雙向選擇單元,根據(jù)該存儲(chǔ)器存取控制信號(hào)和該寄存器存取控制信號(hào), 在該存儲(chǔ)器子系統(tǒng)和該處理器寄存器之間雙向地傳送該多字元。
8. 如權(quán)利要求7所述的電路,其特征在于,該多字元搬移指令進(jìn)一步定義-一地址更新模式,用以指定連續(xù)更新該存儲(chǔ)器地址的方式; 一順序模式,用以指定在該存儲(chǔ)器地址更新之前或之后來(lái)執(zhí)行該存儲(chǔ)器存取;以及一修改模式,用以指定是否在該指令執(zhí)行結(jié)束時(shí),將該基底寄存器修改成 最后更新的存儲(chǔ)器地址。
9. 如權(quán)利要求8所述的電路,其特征在于,還包括 一算術(shù)運(yùn)算單元,回應(yīng)該地址更新模式而更新該存儲(chǔ)器地址。
10. 如權(quán)利要求9所述的電路,其特征在于,還包括一次地址寄存器,用以暫時(shí)地儲(chǔ)存來(lái)自該算術(shù)運(yùn)算單元更新后的該存儲(chǔ)器 地址。
11. 如權(quán)利要求IO所述的電路,其特征在于,還包括一第一多路傳輸器,用以在該存儲(chǔ)器位置的一初始存儲(chǔ)器地址和該次地址 寄存器的一輸出之間選擇。
12. 如權(quán)利要求11所述的電路,其特征在于,還包括一第二多路傳輸器,用以在該算術(shù)運(yùn)算單元的一輸出和該第一多路傳輸器 的一輸出之間選擇。
全文摘要
本發(fā)明提供一種多字元搬移指令,利用此多字元搬移指令的存儲(chǔ)器搬移方法,以及在存儲(chǔ)器子系統(tǒng)與處理器寄存器群組之間進(jìn)行多字元搬移的一種電路。多字元搬移指令定義存取類型(載入或儲(chǔ)存),連續(xù)寄存器組,選擇遮罩,以及用于存儲(chǔ)器位置起始地址的基底寄存器。因此,由此指令所存取的字元總數(shù)等于,由連續(xù)寄存器組所定義的寄存器數(shù)量連同由選擇遮罩所規(guī)定的寄存器數(shù)量。除此之外,多字元搬移指令還定義地址更新模式,順序模式,以及修改模式。
文檔編號(hào)G06F9/34GK101236487SQ200810003158
公開(kāi)日2008年8月6日 申請(qǐng)日期2008年1月11日 優(yōu)先權(quán)日2007年1月12日
發(fā)明者張傳華, 曾仁志, 蘇泓萌 申請(qǐng)人:晶心科技股份有限公司