專(zhuān)利名稱(chēng):復(fù)雜指令集微控制器的譯碼方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及半導(dǎo)體集成電路設(shè)計(jì)領(lǐng)域,尤其是一種復(fù)雜指令集(Complex Instruction Set Computer,簡(jiǎn)稱(chēng)CISC)微控制器的譯碼方法和裝置。
背景技術(shù):
微控制器(Microcontroller Unit,簡(jiǎn)稱(chēng)MCU)是將微型計(jì)算機(jī)的主要部 分集成在一個(gè)芯片上的單芯片微型計(jì)算機(jī)。微控制器誕生于20世紀(jì)70年代 中期,經(jīng)過(guò)20多年的發(fā)展,其成本越來(lái)越低,而性能越來(lái)越強(qiáng)大,這使其應(yīng) 用已經(jīng)遍及各個(gè)領(lǐng)域。
微控制器可從不同方面進(jìn)行分類(lèi),根據(jù)指令結(jié)構(gòu)可分為精簡(jiǎn)指令集 (Reduced Instruction Set Computer,簡(jiǎn)稱(chēng)RISC )和CISC孩i控制器。RSIC 指令集的指令相對(duì)較少,執(zhí)行速度快,但通常需要多個(gè)指令組合才能完成功 能的實(shí)現(xiàn),這樣就需要較多的編譯時(shí)間來(lái)執(zhí)行。CISC指令集的指令豐富,功 能較為強(qiáng)大,讀取指令和執(zhí)行指令采用單指令流水線結(jié)構(gòu)。CISC體系的豐富 的指令集^更于應(yīng)用,能實(shí)現(xiàn)較復(fù)雜的功能任務(wù)。
在CISC微控制器中,程序的各條指令是按順序串行執(zhí)行的,每條指令中 的各個(gè)操作也是按順序串行執(zhí)行的。程序執(zhí)行首先讀取指令碼,然后譯碼。 根據(jù)譯碼后得到的指令的類(lèi)型,將操作數(shù)或者需要計(jì)算的地址送入算術(shù)邏輯
單元(Arithmetic Logic Unit,簡(jiǎn)稱(chēng)ALU)進(jìn)行運(yùn)算。然后,存儲(chǔ)運(yùn)算的結(jié) 果,寫(xiě)入寄存器或者內(nèi)存單元。然后再讀入下一字節(jié)的指令,進(jìn)^"澤碼、ALU 運(yùn)算、回寫(xiě)存儲(chǔ)數(shù)據(jù),以此類(lèi)推,直到指令結(jié)束。CISC微控制器的一條指令 通常需要執(zhí)行多個(gè)機(jī)器周期, 一個(gè)機(jī)器周期為4個(gè)時(shí)鐘周期。在指令的譯碼結(jié)構(gòu)上也為按順序串行執(zhí)行。雖然上述順序執(zhí)行控制簡(jiǎn)單,但是計(jì)算機(jī)各部 分的利用率不高,執(zhí)行速度較慢。
因此,上述現(xiàn)有技術(shù)的CISC微控制器指令的譯碼方法較為簡(jiǎn)單, 一個(gè)機(jī)
器周期只能執(zhí)行一次取指、譯碼結(jié)構(gòu),造成指令執(zhí)行的機(jī)器周期較多,計(jì)算 機(jī)各部分的利用率不高,執(zhí)行速度較慢。
發(fā)明內(nèi)容
本發(fā)明的目的是提供一種復(fù)雜指令集微控制器的譯碼方法和裝置,用以 減少指令執(zhí)行的機(jī)器周期,提高譯碼效率和微控制器的運(yùn)行速度。
為實(shí)現(xiàn)上述目的,本發(fā)明提供了一種復(fù)雜指令集微控制器的譯碼方法,
包括
將預(yù)先讀取的指令送入第一指令寄存器中,并對(duì)所述指令進(jìn)行預(yù)先譯碼, 產(chǎn)生在整個(gè)指令周期內(nèi)有效的功能代碼;
將經(jīng)過(guò)預(yù)先譯碼后的指令送入第二指令寄存器中,在第一個(gè)時(shí)鐘周期內(nèi) 對(duì)所述指令進(jìn)行第一次譯碼,產(chǎn)生在當(dāng)前機(jī)器周期內(nèi)有效的功能代碼,以及 在當(dāng)前機(jī)器周期的第三個(gè)時(shí)鐘周期或者其他機(jī)器周期的第一個(gè)時(shí)鐘周期或第 三個(gè)時(shí)鐘周期對(duì)所述指令進(jìn)行第二次譯碼,產(chǎn)生在下一個(gè)時(shí)鐘周期內(nèi)有效的 功能代碼。
為實(shí)現(xiàn)上述目的,本發(fā)明還提供了一種復(fù)雜指令集微控制器的譯碼裝置, 包括
第一指令寄存器,用于存儲(chǔ)從程序存儲(chǔ)器中預(yù)先讀取的指令; 預(yù)譯碼模塊,用于對(duì)所述第一指令寄存器中的指令進(jìn)行預(yù)先譯碼,產(chǎn)生
在整個(gè)指令周期內(nèi)有效的功能代碼;
第二指令寄存器,用于存儲(chǔ)從預(yù)譯碼模塊中讀取的指令;
第 一譯碼模塊,用于在第 一個(gè)時(shí)鐘周期內(nèi)對(duì)所述第二指令寄存器中的指
令進(jìn)行第 一次譯碼,產(chǎn)生在當(dāng)前機(jī)器周期內(nèi)有效的功能代碼;
4第二譯碼模塊,用于在當(dāng)前機(jī)器周期的第三個(gè)時(shí)鐘周期或者其他機(jī)器周 期的第一個(gè)時(shí)鐘周期或第三個(gè)時(shí)鐘周期對(duì)所述第二指令寄存器中的指令進(jìn)行 第二次譯碼,產(chǎn)生在下一個(gè)時(shí)鐘周期內(nèi)有效的功能代碼。
由上述技術(shù)方案可知,本發(fā)明通過(guò)在指令隊(duì)列的不同階段,根據(jù)指令代 碼實(shí)現(xiàn)功能的時(shí)間長(zhǎng)度不同進(jìn)行分別譯碼,從而提高了譯碼效率,減少了指 令執(zhí)行的機(jī)器周期數(shù),減少了指令的運(yùn)行時(shí)間,提高了執(zhí)行速度。
圖1為本發(fā)明復(fù)雜指令集微控制器的譯碼方法的實(shí)施例的流程示意圖; 圖2為本發(fā)明復(fù)雜指令集微控制器的譯碼裝置的實(shí)施例的結(jié)構(gòu)示意圖。
具體實(shí)施例方式
下面通過(guò)附圖和實(shí)施例,對(duì)本發(fā)明的技術(shù)方案做進(jìn)一步的詳細(xì)描述。
CISC微控制器的一條指令通常需要執(zhí)行多個(gè)機(jī)器周期,即一個(gè)指令周期 包含有多個(gè)機(jī)器周期, 一個(gè)機(jī)器周期則為四個(gè)時(shí)鐘周期,即CO、 Cl、 C2和C3。
如圖1所示,為本發(fā)明復(fù)雜指令集微控制器的譯碼方法的實(shí)施例的流程 示意圖。本實(shí)施例包括以下步驟
步驟IOI、將預(yù)先讀取的指令送入第一指令寄存器中,并對(duì)上述指令進(jìn)行 預(yù)先譯碼,產(chǎn)生在整個(gè)指令周期內(nèi)有效的功能代碼。
在一條指令執(zhí)行前一個(gè)時(shí)鐘周期C3,譯碼裝置先通過(guò)程序數(shù)據(jù)總線從程
序存儲(chǔ)器中讀取指令,將其放入指令隊(duì)列單元的第一指令寄存器IRO中,此 階段為指令的預(yù)取階段,完成指令部分功能的譯碼,并由譯碼裝置的控制電 路根據(jù)譯碼結(jié)果進(jìn)行操作。在IRO中的指令譯碼產(chǎn)生的是在整個(gè)指令周期內(nèi) 都有效的功能代碼,即用于整個(gè)指令周期內(nèi);
步驟102、將經(jīng)過(guò)預(yù)先譯碼后的指令送入第二指令寄存器中,在第一個(gè)時(shí) 鐘周期內(nèi)對(duì)上述指令進(jìn)行第一次譯碼,產(chǎn)生在當(dāng)前機(jī)器周期內(nèi)有效的功能代
5碼,以及在當(dāng)前機(jī)器周期的第三個(gè)時(shí)鐘周期或者其他機(jī)器周期的第一個(gè)時(shí)鐘 周期或第三個(gè)時(shí)鐘周期對(duì)上述指令進(jìn)行第二次譯碼,產(chǎn)生在下一個(gè)時(shí)鐘周期 內(nèi)有效的功能代碼。
在隨后的時(shí)鐘周期C0,指令進(jìn)入到譯碼裝置隊(duì)列單元的指令寄存器IR 中,在此階段完成指令的其他功能的譯碼,并由控制電路根據(jù)譯碼結(jié)果進(jìn)行 操作。根據(jù)指令實(shí)現(xiàn)功能的不同,在指令譯碼的第二階段,即指令寄存器IR 中譯碼階段,對(duì)指令譯碼分為兩個(gè)部分PARTI和PART2。在每個(gè)機(jī)器周期的 時(shí)鐘周期CO階段,對(duì)指令進(jìn)行PARTI譯碼,產(chǎn)生在當(dāng)前機(jī)器周期有效的功能 代碼,即用于當(dāng)前機(jī)器周期內(nèi);在每個(gè)機(jī)器周期的偶數(shù)次時(shí)鐘周期C0或C2, 對(duì)指令進(jìn)行PART2譯碼,產(chǎn)生在下個(gè)時(shí)鐘周期Cl或C3有效的功能代碼,即 用于下個(gè)時(shí)鐘周期Cl或C3內(nèi)。譯碼裝置通過(guò)三個(gè)階段的譯碼完成指令譯碼 工作,并根據(jù)譯碼結(jié)果控制中央控制單元內(nèi)其他模塊的工作。
本實(shí)施例的譯碼方法通過(guò)在指令隊(duì)列的不同階段,根據(jù)指令代碼實(shí)現(xiàn)功 能的時(shí)間長(zhǎng)度不同進(jìn)行分別譯碼,從而提高了譯碼效率,減少了指令執(zhí)行的 機(jī)器周期數(shù),減少了指令的運(yùn)行時(shí)間,提高了執(zhí)行速度。
以加法指令A(yù)DD rrr,n為例對(duì)應(yīng)用本實(shí)施例的指令執(zhí)行作進(jìn)一步的說(shuō)明, 其中rrr為通用寄存器代表多個(gè)工作寄存器,n為立即數(shù)。
首先在前一個(gè)機(jī)器周期的時(shí)鐘周期C3進(jìn)行IRO譯碼,預(yù)取指令A(yù)DD rrr, n送入IRO中,將指令中的rrr譯碼為A (A為一個(gè)工作寄存器),以供指令 執(zhí)行中使用;
其次在當(dāng)前機(jī)器周期的時(shí)鐘周期CO進(jìn)行IR PARTI譯碼,將IRO中的指 令A(yù)DD A, n送入IR中,時(shí)鐘周期Cl取A中數(shù)據(jù),送入ALU的寄存器0P1中, 取立即數(shù)n,送入ALU的寄存器0P2中;
隨后在當(dāng)前機(jī)器周期的時(shí)鐘周期C2進(jìn)行IR PART2譯碼,時(shí)鐘周期C3在 ALU中進(jìn)行加法計(jì)算0P1+0P2;
最后在下一個(gè)機(jī)器周期的時(shí)鐘周期CO進(jìn)行IR PARTI譯碼,將ALU結(jié)果回寫(xiě)到寄存器A中。
至此,可以看出,完成上述加法指令A(yù)DD rrr, n的機(jī)器周期數(shù)為兩個(gè), 與現(xiàn)有技術(shù)完成上述加法指令A(yù)DD rrr, n的機(jī)器周期數(shù)三個(gè)相比,本實(shí)施例 可以減少該指令執(zhí)行的機(jī)器周期數(shù),減少了指令的運(yùn)行時(shí)間,提高了執(zhí)行速 度。
如圖2所示,為本發(fā)明復(fù)雜指令集微控制器的譯碼裝置的實(shí)施例的結(jié)構(gòu) 示意圖。本實(shí)施例包括第一指令寄存器10,用于存儲(chǔ)從程序存儲(chǔ)器中預(yù)先 讀取的指令;預(yù)譯碼模塊20,與第一指令寄存器10連接,用于對(duì)第一指令寄 存器10中的指令進(jìn)行預(yù)先譯碼,產(chǎn)生在整個(gè)指令周期內(nèi)有效的功能代碼;第 二指令寄存器30,與預(yù)譯碼模塊20連接,用于存儲(chǔ)從預(yù)譯碼模塊中讀取的指 令;第一譯碼模塊40,與第二指令寄存器30連接,用于在第一個(gè)時(shí)鐘周期內(nèi) 對(duì)第二指令寄存器30中的指令進(jìn)行第一次譯碼,產(chǎn)生在當(dāng)前機(jī)器周期內(nèi)有效 的功能代碼;第二譯碼模塊50,與第二指令寄存器30連接,用于在當(dāng)前機(jī)器 周期的第三個(gè)時(shí)鐘周期或者其他機(jī)器周期的第一個(gè)時(shí)鐘周期或第三個(gè)時(shí)鐘周 期對(duì)第二指令寄存器30中的指令進(jìn)行第二次譯碼,產(chǎn)生在下一個(gè)時(shí)鐘周期內(nèi) 有效的功能代碼。
本發(fā)明通過(guò)在指令隊(duì)列的不同階段,根據(jù)指令代碼實(shí)現(xiàn)功能的時(shí)間長(zhǎng)度 不同,預(yù)譯碼模塊對(duì)第一指令寄存器中的指令、以及第一譯碼模塊和第二譯 碼模塊分別對(duì)第二指令寄存器中的指令進(jìn)行了譯碼,從而提高了譯碼效率, 減少了指令執(zhí)行的機(jī)器周期數(shù),減少了指令的運(yùn)行時(shí)間,提高了執(zhí)行速度。
最后應(yīng)說(shuō)明的是以上實(shí)施例僅用以說(shuō)明本發(fā)明的技術(shù)方案,而非對(duì)其 限制;盡管參照前述實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)的說(shuō)明,本領(lǐng)域的普通技術(shù) 人員應(yīng)當(dāng)理解其依然可以對(duì)前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或 者對(duì)其中部分技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技
術(shù)方案的本質(zhì)脫離本發(fā)明各實(shí)施例技術(shù)方案的精神和范圍。
權(quán)利要求
1、一種復(fù)雜指令集微控制器的譯碼方法,其特征在于包括將預(yù)先讀取的指令送入第一指令寄存器中,并對(duì)所述指令進(jìn)行預(yù)先譯碼,產(chǎn)生在整個(gè)指令周期內(nèi)有效的功能代碼;將經(jīng)過(guò)預(yù)先譯碼后的指令送入第二指令寄存器中,在第一個(gè)時(shí)鐘周期內(nèi)對(duì)所述指令進(jìn)行第一次譯碼,產(chǎn)生在當(dāng)前機(jī)器周期內(nèi)有效的功能代碼,以及在當(dāng)前機(jī)器周期的第三個(gè)時(shí)鐘周期或者其他機(jī)器周期的第一個(gè)時(shí)鐘周期或第三個(gè)時(shí)鐘周期對(duì)所述指令進(jìn)行第二次譯碼,產(chǎn)生在下一個(gè)時(shí)鐘周期內(nèi)有效的功能代碼。
2、 一種復(fù)雜指令集微控制器的譯碼裝置,其特征在于包括 第一指令寄存器,用于存儲(chǔ)從程序存儲(chǔ)器中預(yù)先讀取的指令; 預(yù)譯碼模塊,用于對(duì)所述第一指令寄存器中的指令進(jìn)行預(yù)先譯碼,產(chǎn)生在整個(gè)指令周期內(nèi)有效的功能代碼;第二指令寄存器,用于存儲(chǔ)從預(yù)譯碼模塊中讀取的指令;第一譯碼模塊,用于在第一個(gè)時(shí)鐘周期內(nèi)對(duì)所述第二指令寄存器中的指令進(jìn)行第 一次譯碼,產(chǎn)生在當(dāng)前機(jī)器周期內(nèi)有效的功能代碼;第二譯碼模塊,用于在當(dāng)前機(jī)器周期的第三個(gè)時(shí)鐘周期或者其他機(jī)器周期的第一個(gè)時(shí)鐘周期或第三個(gè)時(shí)鐘周期對(duì)所述第二指令寄存器中的指令進(jìn)行第 二次譯碼,產(chǎn)生在下一個(gè)時(shí)鐘周期內(nèi)有效的功能代碼。
全文摘要
本發(fā)明涉及一種復(fù)雜指令集微控制器的譯碼方法和裝置,該方法包括將預(yù)先讀取的指令送入第一指令寄存器中,并對(duì)所述指令進(jìn)行預(yù)先譯碼,產(chǎn)生在整個(gè)指令周期內(nèi)有效的功能代碼;將經(jīng)過(guò)預(yù)先譯碼后的指令送入第二指令寄存器中,在第一個(gè)時(shí)鐘周期內(nèi)對(duì)所述指令進(jìn)行第一次譯碼,產(chǎn)生在當(dāng)前機(jī)器周期內(nèi)有效的功能代碼,以及在當(dāng)前機(jī)器周期的第三個(gè)時(shí)鐘周期或者其他機(jī)器周期的第一個(gè)時(shí)鐘周期或第三個(gè)時(shí)鐘周期對(duì)所述指令進(jìn)行第二次譯碼,產(chǎn)生在下一個(gè)時(shí)鐘周期內(nèi)有效的功能代碼。本發(fā)明通過(guò)在指令隊(duì)列的不同階段,根據(jù)指令代碼實(shí)現(xiàn)功能的時(shí)間長(zhǎng)度不同進(jìn)行分別譯碼,從而提高了譯碼效率,減少了指令執(zhí)行的機(jī)器周期數(shù),減少了指令的運(yùn)行時(shí)間,提高了執(zhí)行速度。
文檔編號(hào)G06F9/22GK101488082SQ20081003264
公開(kāi)日2009年7月22日 申請(qǐng)日期2008年1月15日 優(yōu)先權(quán)日2008年1月15日
發(fā)明者史衛(wèi)東, 張曉詩(shī), 漪 許, 谷志坤, 趙啟山 申請(qǐng)人:上海海爾集成電路有限公司