專利名稱:一種指令分配和預(yù)處理指令譯碼的裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)字信號(hào)處理領(lǐng)域,特別涉及一種指令分配和預(yù)處理指令譯碼的裝置。
背景技術(shù):
DSP(Digital Signal Processor,數(shù)字信號(hào)處理器)是一種獨(dú)特的微處理器,其工 作原理是接收模擬信號(hào),轉(zhuǎn)換為數(shù)字信號(hào),再對(duì)數(shù)字信號(hào)進(jìn)行修改、刪除、強(qiáng)化,并在其他系 統(tǒng)芯片中把數(shù)字?jǐn)?shù)據(jù)解譯回模擬數(shù)據(jù)或?qū)嶋H環(huán)境格式。它不僅具有可編程性,而且其實(shí)時(shí) 運(yùn)行速度可達(dá)每秒數(shù)以千萬(wàn)條復(fù)雜指令程序,遠(yuǎn)遠(yuǎn)超過(guò)通用微處理器,是數(shù)字化電子世界 中日益重要的電腦芯片。DSP的強(qiáng)大數(shù)據(jù)處理能力和高運(yùn)行速度,是最值得稱道的兩大特 點(diǎn)ο由于DSP能夠?qū)崟r(shí)快速地實(shí)現(xiàn)各種數(shù)字信號(hào)處理算法實(shí)時(shí)處理等特點(diǎn),數(shù)字信 號(hào)處理器被廣泛應(yīng)用于語(yǔ)音處理、圖形圖像處理、通信設(shè)備、多媒體設(shè)備、儀器儀表、自動(dòng) 控制、醫(yī)療儀器、家用電器、汽車工業(yè)和軍事武器裝備等領(lǐng)域。當(dāng)前科學(xué)技術(shù)迅速發(fā)展,各 種應(yīng)用對(duì)DSP處理器的要求越來(lái)越高,需要快速的處理大量數(shù)據(jù)和信息。應(yīng)對(duì)這種性能 上的需求,現(xiàn)代數(shù)字信號(hào)處理器硬件部分均采用了高性能的超長(zhǎng)指令字(VLIW,Very Long Instruction Words)的體系結(jié)構(gòu)。VLIW結(jié)構(gòu)是由耶魯大學(xué)的J. A Fisher于1983年首次 提出的一種計(jì)算機(jī)體系結(jié)構(gòu)。該結(jié)構(gòu)通過(guò)編譯器來(lái)發(fā)現(xiàn)指令間的并行性,通過(guò)調(diào)度將能夠 并行執(zhí)行的指令合并在一起組成一個(gè)超長(zhǎng)的指令,由執(zhí)行部件的多個(gè)功能單元同時(shí)執(zhí)行。 VLIW把許多條指令連在一起,增加了運(yùn)算的速度。超長(zhǎng)指令字是處理器設(shè)計(jì)領(lǐng)域中的一種 越來(lái)越流行的技術(shù)。在VLIW體系下,DSP每次取回的指令由多個(gè)功能單元執(zhí)行,所以必須使指令能夠 正確的分配到目標(biāo)功能單元。指令分配單元同步功能單元同時(shí)執(zhí)行的各種操作,并把長(zhǎng)指 令中的各個(gè)字段分配給對(duì)應(yīng)的功能單元,然后在功能單元內(nèi)進(jìn)行譯碼,產(chǎn)生控制信號(hào)控制 功能單元實(shí)現(xiàn)指令規(guī)定的功能。指令分配單元的設(shè)計(jì)是基于該體系結(jié)構(gòu)的微處理器設(shè)計(jì)的 一個(gè)重要環(huán)節(jié)。高速正確地實(shí)現(xiàn)指令分配,可以避免指令分配階段成為整個(gè)處理器設(shè)計(jì)的 瓶頸。在目前的VLIW體系結(jié)構(gòu)下,指令分配單元主要存在如下問(wèn)題需要解決1、正確的指令分配。DSP每次取指取回8條32位的指令,這個(gè)指令包稱為一個(gè)取 指包。這8條指令可以全部并行執(zhí)行,也可以全部串行執(zhí)行,也可以分為任意組,其中每組 中的指令并行執(zhí)行,每組之間串行執(zhí)行。并行執(zhí)行的一組指令稱為一個(gè)執(zhí)行包,一個(gè)取指包 可以分割為1到8個(gè)執(zhí)行包。2、在確定分配幾條指令之后,判斷出執(zhí)行包的這幾條指令分別需要由哪個(gè)功能單 元執(zhí)行,將它們分配到相應(yīng)的功能單元中。另外,如果執(zhí)行包中包含多周期停頓指令,還要 輸出多周期停頓指令的停頓周期數(shù)。3、由于一個(gè)取指包中可能包含1到8個(gè)執(zhí)行包,將這些執(zhí)行包分配完需要多個(gè)周期。在每個(gè)周期,如果取指包中有還沒(méi)分配的執(zhí)行包,那么在接下來(lái)的周期中要停止前面的 幾級(jí)流水線,而分配部分對(duì)取指包中還沒(méi)分配的執(zhí)行包繼續(xù)進(jìn)行分配,直到所有的執(zhí)行包 都分配完,前面的流水線再繼續(xù)前進(jìn)。對(duì)流水線的暫停通過(guò)控制器進(jìn)行控制。這是流水線 正常運(yùn)轉(zhuǎn)所必需的要求,否則程序執(zhí)行的正確性無(wú)從保證。4、分支指令進(jìn)入取指階段后,會(huì)沖掉正在分配階段的指令,而分配單元需要從分 支指令所指示的位置開(kāi)始分配。所以在這種情況下將會(huì)打斷正常指令分配的過(guò)程,而是直 接開(kāi)始新的指令分配。5指令分配階段結(jié)束以后,指令將被譯碼執(zhí)行。據(jù)統(tǒng)計(jì)DSP的性能分析表明,指令 譯碼和準(zhǔn)備操作數(shù)階段是導(dǎo)致DSP時(shí)鐘頻率不能進(jìn)一步提升的瓶頸。所以在DSP的實(shí)際設(shè) 計(jì)考慮里面,為了盡量使系統(tǒng)具備提升性能的可能,需要在指令分配階段對(duì)指令譯碼做一 些預(yù)操作處理。綜上所述,分配指令階段事件的復(fù)雜性使得分配邏輯的設(shè)計(jì)非常復(fù)雜,與此相對(duì) 應(yīng)的電路面積和功耗成為VLIW架構(gòu)下的嚴(yán)重缺點(diǎn)。
發(fā)明內(nèi)容
本發(fā)明的目的旨在至少解決上述技術(shù)缺陷之一,特別針對(duì)適用于超長(zhǎng)指令字架構(gòu) 下的數(shù)字信號(hào)處理器,具有高效的性能和較小的面積功耗的平衡,提出了一種指令分配和 預(yù)處理指令譯碼的裝置。為實(shí)現(xiàn)上述目的,本發(fā)明實(shí)施例提出了一種指令分配和預(yù)處理指令譯碼的裝置, 包括指令分配模塊,用于生成指令分配使能信號(hào)和下一個(gè)周期的指令分配信號(hào);指令判斷及選擇模塊,用于根據(jù)來(lái)自所述指令分配模塊的指令分配使能信號(hào),生 成各個(gè)功能單元的指令選擇信號(hào),選擇并輸出相應(yīng)的功能單元指令;和指令預(yù)處理模塊,用于對(duì)來(lái)自所述指令判斷及選擇模塊的各個(gè)功能單元的指令進(jìn) 行預(yù)處理譯碼,輸出各個(gè)相應(yīng)功能單元的指令預(yù)處理信號(hào)。本發(fā)明實(shí)施例提供的指令分配和預(yù)處理指令譯碼的裝置根據(jù)輸入的指令產(chǎn)生指 令分配使能信號(hào)和分配標(biāo)志信號(hào),生成目的單元選擇信號(hào),并根據(jù)上述目的單元選擇信號(hào) 選擇與各功能單元匹配的指令,進(jìn)一步將指令送給指令預(yù)處理單元,最后將選擇出的功能 單元指令和指令預(yù)處理結(jié)果信號(hào)作為輸出給下一級(jí)電路。本發(fā)明的裝置相對(duì)于現(xiàn)有的VLIW 體系結(jié)構(gòu)下的指令分配單元,查找表占用的硬件面積小、速度快,實(shí)現(xiàn)了高效的性能和較小 的面積功耗的平衡。本發(fā)明附加的方面和優(yōu)點(diǎn)將在下面的描述中部分給出,部分將從下面的描述中變 得明顯,或通過(guò)本發(fā)明的實(shí)踐了解到。
本發(fā)明上述的和/或附加的方面和優(yōu)點(diǎn)從下面結(jié)合附圖對(duì)實(shí)施例的描述中將變 得明顯和容易理解,其中圖1為根據(jù)本發(fā)明實(shí)施例的指令分配和預(yù)處理指令譯碼的裝置的結(jié)構(gòu)示意圖;圖2為圖1中指令分配和預(yù)處理指令譯碼的裝置的整體結(jié)構(gòu)框圖3為一個(gè)取指包的8條指令的存儲(chǔ)格式示意圖;圖4為一條指令的存儲(chǔ)格式示意圖;圖5為指令的目的單元信號(hào)格式示意圖;圖6為功能單元的指令選擇信號(hào)格式示意圖;圖7為圖1中指令分配和預(yù)處理指令譯碼的裝置的工作示意圖。
具體實(shí)施例方式下面詳細(xì)描述本發(fā)明的實(shí)施例,所述實(shí)施例的示例在附圖中示出,其中自始至終 相同或類似的標(biāo)號(hào)表示相同或類似的元件或具有相同或類似功能的元件。下面通過(guò)參考附 圖描述的實(shí)施例是示例性的,僅用于解釋本發(fā)明,而不能解釋為對(duì)本發(fā)明的限制。本發(fā)明主要在于,根據(jù)目的單元選擇信號(hào),選擇與各功能單元匹配的指令,進(jìn)一步 將指令送給指令預(yù)處理單元,最后將選擇出的功能單元指令和指令預(yù)處理結(jié)果信號(hào)作為輸 出給下一級(jí)電路。為實(shí)現(xiàn)上述目的,本發(fā)明的目的是提供一種指令分配和預(yù)處理指令譯碼的裝置, 該裝置適用于超長(zhǎng)指令字架構(gòu)下的數(shù)字信號(hào)處理器,具有高效的性能和較小的面積功耗的 平衡。圖1示出了該裝置的結(jié)構(gòu)示意圖。如圖1所示,該裝置包括指令分配模塊110、指令 判斷及選擇模塊120和指令預(yù)處理模塊130。具體的說(shuō),指令分配模塊110進(jìn)一步包括分配標(biāo)志處理單元、指令分配使能單元 和分配標(biāo)志寄存單元。結(jié)合圖2所示,分配標(biāo)志處理單元將上一個(gè)周期的指令分配信號(hào),即 分配指令的記錄信息pre_flag(n),其中η = 1,2,3. . . 8,即pre_flagl至pre_flag8、指示 新的取指包指令進(jìn)入分配單元的信號(hào)NEW_FP,以及指示從取指包的8條指令那一條開(kāi)始分 配的指示信號(hào)PC_v3作為輸入信號(hào)輸入,通過(guò)邏輯處理,生成用于指示本周期的指令分配 信號(hào) fix_flag(n),其中,η = 1,2,3···8。其中,pre_flag指示前面周期的指令分配情況,pre_flag(n) = 1 (η = 1, 2. . . 8) 表示第η條指令已經(jīng)被分配過(guò),pre_flag(n) = 0表示第η條指令還沒(méi)有被分配。每次新 指令進(jìn)入分配單元會(huì)指示分配單元從新的取指包開(kāi)始分配,并且從哪條指令開(kāi)始分配根據(jù) PC_v3指示來(lái)設(shè)定。這是為了在分支指令進(jìn)入分配單元的時(shí)候,從分支指令所指示的位置開(kāi) 始分配指令進(jìn)入譯碼和執(zhí)行。具體的說(shuō),上一個(gè)時(shí)鐘周期分配標(biāo)志pre_f Iagl至pre_f IagS信號(hào)根據(jù)是否有新 指令進(jìn)入,是否有分配起始指令來(lái)調(diào)整輸出為合適的本周期的分配標(biāo)志信號(hào)fiX_flagl至 fix_flag80其中,fx_flag(n)= NEff_FP ? (PC_v3 >= η) :pre_flag(η),當(dāng)NEW_FP為真時(shí),則判斷PC_v3是否大于等于n,當(dāng)PC_v3 >= η 時(shí),則 fx_flag(η)為 1 ;當(dāng) PC_v3 小于 1 時(shí),則 fix_flag(η)為 0 ;當(dāng) NEff_FP 為假時(shí),則 fix_flag(η) = pre_flag(η),其中 η = 1,2,3· · · 8。具體的說(shuō),fix_flagl= NEff_FP ? (PC_v3 >=1) :pre_flagl ;表示如果NEW_FP為真,則判斷PC_v3是否大于等于1,如果PC_v3 > = 1則fix_ flagl = 1 ;如果 PC_v3 < 1 則 fix_flagl = 0 ;如果 NEff_FP 為假,則將 pre_flagl 賦值給 fx_flagl,艮口 fix_fIagl = pre_flagl。
fix_flag2 = NEff_FP ? (PC_v3 >=2) :pre_flag2 ;表示如果NEW_FP為真,則判斷PC_v3是否大于等于2,如果PC_v3 > = 2則f ix_ flag2 = 1,如果 PC_v3 < 2 則 fix_flag2 = 0,如果 NEff_FP 為假,則將 pre_flag2 賦值給 fix_flag2,艮口 fix_flag2 = pre_flag2。fx_flag3 = NEff_FP ? (PC_v3 >=3) :pre_flag3 ;表示如果NEW_FP為真,則判斷PC_v3是否大于等于3,如果PC_v3 > = 3則f ix_ flag3 = 1,如果 PC_v3 < 1 則 fix_flag3 = 0 ;如果 NEff_FP 為假,則將 pre_flag3 賦值給 fix_flag3,艮口 fix_flag3 pre_flag3。fix_flag4 = NEff_FP ? (PC_v3 >=4) :pre_flag4 ;表示如果NEW_FP為真,則判斷PC_v3是否大于等于1,如果PC_v3 > = 4則fix_ flag4 = 1 ;如果 PC_v3 < 4 則 fix_flag4 = 0 ;如果 NEff_FP 為假,則將 pre_flag4 賦值給 fix_flag4,艮口 fix_flag4 = pre_flag4。fix_flag5 = NEff_FP ? (PC_v3 >=5) :pre_flag5 ;表示如果NEW_FP為真,則判斷PC_v3是否大于等于1,如果PC_v3 > = 5則fix_ flag5 = 1 ;如果 PC_v3 < 5 則 fix_flag5 = 0 ;如果 NEff_FP 為假,則將 pre_flag5 賦值給 fix_flag5,艮口 fix_flag5 = pre_flag5。fix_flag6 = NEff_FP ? (PC_v3 >=6) :pre_flag6 ;表示如果NEW_FP為真,則判斷PC_v3是否大于等于1,如果PC_v3 > = 6則fix_ flag6 = 1 ;如果 PC_v3 < 6 則 fix_flag6 = 0 ;如果 NEff_FP 為假,則將 pre_flag6 賦值給 fx_f lag6,艮口 f ix_f lag6 = pre_flag6。fix_flag7 = NEff_FP ? (PC_v3 >=7) :pre_flag7 ;表示如果NEW_FP為真,則判斷PC_v3是否大于等于1,如果PC_v3 > = 7則fix_ flag7 = 1 ;如果 PC_v3 < 7 則 fix_flag7 = 0 ;如果 NEff_FP 為假,則將 pre_flag7 賦值給 fix_flag7,艮口 fix_flag7 = pre_flag7。fix_flag8 = NEff_FP ? (PC_v3 >=8) :pre_flag8 ;表示如果NEW_FP為真,則判斷PC_v3是否大于等于1,如果PC_v3 > = 8則fix_ flag8 = 1 ;如果 PC_v3 < 8 則 fix_flag8 = 0 ;如果 NEff_FP 為假,則將 pre_flag8 賦值給 fix_flag8,艮口 fix_flag8 = pre_flag8。在以上公式中,“Α ? B:C”為三目運(yùn)算符,表示如果A成立則執(zhí)行B,如果不成立則 執(zhí)行C。將上述本周期的分配標(biāo)志信號(hào)fix_flagl至fix_flag8以及8條32位功能單元 的指令的P位,Pl至P8輸入到指令分配使能單元。上述8條32位功能單元的指令分別位 instl 至 inst8。其中,DSP每次取指取回8條32位的指令,在每一條指令中都有1位,即ρ位用于 指示本條指令是否與下一條指令并行執(zhí)行。每條指令中還有幾位用于指示本條指令要在哪 個(gè)功能單元中執(zhí)行,稱為特征碼。圖3示出了每個(gè)取指包的8條指令的存儲(chǔ)格式。如圖3中所示,每條指令的指令長(zhǎng) 度為32位。指令1 :0 31位;指令2 32 63位;指令3 64 95位;指令4 96 127 位;指令5 128 159位;指令6 160 191位;指令7 192 223位;指令8 224 255
7位。圖4進(jìn)一步示出了一條指令的存儲(chǔ)格式。上述指令包括兩種類型非NOP指令和NOP 指令。其中,非NOP指令表示非空操作指令,即分配到功能單元的指令。NOP指令表示空操 作指令。如圖4中所示,非NOP指令包括1位用于指示本條指令是否與下一條指令并行執(zhí)行 的P位、特征碼、5位源1寄存器地址、5位源2寄存器地址和5位目標(biāo)寄存器地址。NOP指 令包括1位用于指示本條指令是否與下一條指令并行執(zhí)行的P位、特征碼和5位N0P_num。其中,對(duì)于ρ位,p(n) = l(n= 1,2... 7)表示第η條指令和第n+1條指令并行執(zhí) 行,P (η) = 0表示第n+1條指令在第η條指令的后一個(gè)周期執(zhí)行。指令分配使能單元對(duì)上述輸入信號(hào)進(jìn)行邏輯處理,輸出指示每條指令的分配使能 信號(hào) inst (n)_dispatch,其中,η = 1, 2, 3…8,即 instl_dispatch 至 inst8_dispatch、用 于指示下次分配指令的標(biāo)志信號(hào)next_flag(n),其中,η = 1,2,3. . . 8,即next_flagl至 next_flag8和用于指示流水線停頓的信號(hào)ST0P_DP_0UT。具體的說(shuō),通過(guò)一下邏輯處理生成指示下次分配指令的標(biāo)志信號(hào)neXt_flag(n) =(next_flag(n-1)&p(n-1))|fix_flag (n_l)。具體的說(shuō),next_flagl = 1 ;表示第1條指令一定是已經(jīng)分配過(guò)或者正要分配;next_flag2 = (next_flagl&pl) | fix_fIagl ;表示如果第 1 條指令在上一個(gè)周期 分配過(guò),或者第1條指令本周期分配并且第2條指令和第1條指令并行,那么第2條指令一 定是已經(jīng)分配過(guò)或者正要分配;next_flag3 = (next_fIag2&p2) | fix_flag2 ;表示如果第 2 條指令在上一個(gè)周期 分配過(guò),或者第2條指令本周期分配并且第3條指令和第2條指令并行,那么第3條指令一 定是已經(jīng)分配過(guò)或者正要分配;next_flag4 = (next_fIag3&p3) | fix_flag3 ;表示如果第 3 條指令在上一個(gè)周期 分配過(guò),或者第3條指令本周期分配并且第4條指令和第3條指令并行,那么第4條指令一 定是已經(jīng)分配過(guò)或者正要分配;next_flag5 = (next_fIag4&p4) | fix_flag4 ;表示如果第 4 條指令在上一個(gè)周期 分配過(guò),或者第4條指令本周期分配并且第5條指令和第4條指令并行,那么第5條指令一 定是已經(jīng)分配過(guò)或者正要分配;next_flag6 = (next_fIag5&p5) | fix_flag5 ;表示如果第 5 條指令在上一個(gè)周期 分配過(guò),或者第5條指令本周期分配并且第6條指令和第5條指令并行,那么第6條指令一 定是已經(jīng)分配過(guò)或者正要分配;next_flag7 = (next_fIag6&p6) | fix_flag6 ;表示如果第 6 條指令在上一個(gè)周期 分配過(guò),或者第6條指令本周期分配并且第7條指令和第6條指令并行,那么第7條指令一 定是已經(jīng)分配過(guò)或者正要分配;next_flag8 = (next_fIag7&p7) | fix_flag7 ;表示如果第 7 條指令在上一個(gè)周期 分配過(guò),或者第7條指令本周期分配并且第8條指令和第7條指令并行,那么第8條指令一 定是已經(jīng)分配過(guò)或者正要分配;在以上公式中,“&”表示邏輯與,“ I ”表示邏輯或。信號(hào)nextjagN指示前面周期 已經(jīng)分配過(guò)的指令和本周期被分配的指令,next_flag(n) = 1 (η = 1,2... 8)表示第η條 指令已經(jīng)被分配過(guò)或者本周期被分配,flag(n) =0表示第η條指令要等到后面的周期才 能被分配。neXt_flagl到neXt_flag8的值在時(shí)鐘上升沿存入分配標(biāo)志寄存器。
在每周期的分配過(guò)程中,如果neXt_flagl到neXt_flag8不都等于1,說(shuō)明在本 周期分配后取指包中還有沒(méi)被分配的指令,則需要產(chǎn)生信號(hào)ST0P_DP_0UT = 1來(lái)指示前面 的流水線需要停止,控制器根據(jù)這個(gè)信號(hào)將前面幾級(jí)流水線暫停,而分配繼續(xù)進(jìn)行。直到 next_flagl到next_flag8都等于1,說(shuō)明所有的指令都分配完了,此時(shí)令ST0P_DP_0UT = 0,控制器會(huì)停止對(duì)流水線的暫停。同時(shí),寄存器pre_fagl到pre_flag8的值也會(huì)被清零。 在下一周期,一個(gè)新的取指包進(jìn)入分配階段,重新開(kāi)始分配。其中,ST0P_DP_0UT = (next_flag8&next_flag7&next_flag6&next_ flag5&next_flag4&next_flag3&next_flag2&next_flagl);在以上公式中,“&”表示邏輯與,“ ”表示邏輯取反。ST0P_DP_0UT來(lái)指示前面的
流水線是否需要停止。通過(guò)信號(hào)f ix_f Iagl 到 fix_flag8 和 next_flagl 到 next_flag8,就可以判斷出本 周期要分配的執(zhí)行包包含哪些指令,產(chǎn)生指示信號(hào)inSt(n)_diSpatCh,其中,η = 1,2...8, 即instl_dispatch到inst8_dispatch,用于控制是否對(duì)instl至inst8進(jìn)行目的單元檢 測(cè)。其中,inst(n)_dispatch= next_flag(n) &( fix_flag(n)),表示當(dāng)?shù)?N 條指令 在上一個(gè)周期沒(méi)有分配過(guò),而在本周期的分配標(biāo)志為完成分配,則第N條指令在本周期分 配,其中,“&”表示邏輯與,“ ”表示邏輯取反。具體的說(shuō),instl_dispatch= next_flagl&( fix_flagl);表示如果第 1 條指令 在上一個(gè)周期沒(méi)有分配過(guò),但本周期的分配標(biāo)志是完成分配,那么第1條指令一定是在本 周期分配的;mst2_dispatch = next_flag2&( fix_flag2);表示如果第 2 條指令在上一個(gè)周 期沒(méi)有分配過(guò),但本周期的分配標(biāo)志是完成分配,那么第2條指令一定是在本周期分配的;inst3_dispatch = next_flag3&( fix_flag3);表示如果第 3 條指令在上一個(gè) 周期沒(méi)有分配過(guò),但本周期的分配標(biāo)志是完成分配,那么第3條指令一定是在本周期分配 的;inst4_dispatch = next_flag4&( fix_flag4);表示如果第 4 條指令在上一個(gè) 周期沒(méi)有分配過(guò),但本周期的分配標(biāo)志是完成分配,那么第4條指令一定是在本周期分配 的;inst5_dispatch = next_flag5&( fix_flag5);表示如果第 5 條指令在上一個(gè) 周期沒(méi)有分配過(guò),但本周期的分配標(biāo)志是完成分配,那么第5條指令一定是在本周期分配 的;inst6_dispatch = next_flag6&( fix_flag6);表示如果第 6 條指令在上一個(gè) 周期沒(méi)有分配過(guò),但本周期的分配標(biāo)志是完成分配,那么第6條指令一定是在本周期分配 的;inst7_dispatch = next_flag7&( fix_flag7);表示如果第 7 條指令在上一個(gè) 周期沒(méi)有分配過(guò),但本周期的分配標(biāo)志是完成分配,那么第7條指令一定是在本周期分配 的;inst8_dispatch = next_flag8&( fix_flag8);表示如果第 8 條指令在上一個(gè)周期沒(méi)有分配過(guò),但本周期的分配標(biāo)志是完成分配,那么第8條指令一定是在本周期分配 的;ST0P_DP_0UT = (next_flag8&next_flag7&next_flag6&next_flag5&next_ flag4&next_flag3&next_flag2&next_flagl);表示如果指令1至指令8只要還有一條沒(méi)有 分配,就需要停止掉前面的流水線;在以上公式中,“&”表示邏輯與,“|”表示邏輯或,“ ”表示邏輯取反。inst_ diapatch指示本周期要分配的執(zhí)行包包含的指令,inst (n),dispatch = 1 (η = 1,2· · · 8) 表示第η條指令要在本周期分配,inSt(n)_diSpatCh = 0表示第η條指令不是在本周期分 配。inSt(n)_diSpatCh信號(hào)被送到判斷指令的目的單元電路,用于產(chǎn)生分配選擇信號(hào)。分配邏輯要根據(jù)特征碼指示位來(lái)進(jìn)行分配。指令分配使能模塊用于判斷本周期 要分配的執(zhí)行包,實(shí)現(xiàn)這個(gè)功能除了需要知道取指包中的哪些指令要并行執(zhí)行以外,還需 要知道哪些指令已經(jīng)分配過(guò)了,哪些指令不需要分配。所以,需要分配標(biāo)志寄存單元記錄 每條指令是否已經(jīng)分配過(guò)。結(jié)合圖2所示,分配標(biāo)志寄存單元保存了前面周期的指令分配 情況,在每個(gè)周期結(jié)束的時(shí)候保存本次分配情況,在下一個(gè)分配周期輸出pre_fagl至pre_ flag80分配標(biāo)志寄存單元根據(jù)輸入的指示下次分配指令的標(biāo)志信號(hào)neXt_flagl至 neXt_flag8,輸出信號(hào)用于下個(gè)時(shí)鐘周期的指令分配的標(biāo)志信息pre_flagl至pre_flag8 ;指令判斷及選擇模塊進(jìn)一步包括判斷指令的目的單元、指令選擇信號(hào)生成單元和 指令選擇單元。其中,將8條32位的指令instl到instS以及來(lái)自上述指令分配使能單元的 instl_dispatch至inst8_dispatch輸入到判斷指令的目的單元中,用于控制是否對(duì)instl 至instS進(jìn)行目的單元檢測(cè)。根據(jù)指令中的特征碼位判斷出每一條指令是在哪個(gè)功能單元 中執(zhí)行,分別產(chǎn)生指示信號(hào)instl_unit到inst8_unit。判斷指令的目的單元根據(jù)不同的輸入指令又分為判斷指令1的目的單元、判斷指 令2的目的單元、判斷指令3的目的單元、判斷指令4的目的單元、判斷指令5的目的單元、 判斷指令5的目的單元、判斷指令6的目的單元、判斷指令7的目的單元和判斷指令8的目 的單元。結(jié)合圖2所示,判斷指令1的目的單元用于判斷輸入的指令1應(yīng)該分配給哪個(gè)單 元執(zhí)行,輸入信號(hào)為一條32位指令1,即instl,和指令分配使能電路產(chǎn)生的分配使能信號(hào), 即instldispatch。如果分配使能信號(hào)有效,則根據(jù)指令的特征碼位來(lái)判斷指令的目的單 元,如果分配使能信號(hào)無(wú)效或者特征碼位非法,則判斷目的單元為不分配,輸出信號(hào)為指令 的目的單元信號(hào),即instl_unit。判斷指令2目的單元用于判斷輸入的指令2應(yīng)該分配給哪個(gè)單元執(zhí)行,輸入信 號(hào)為一條32位指令2,即inst2,和指令分配使能電路產(chǎn)生的分配使能信號(hào),S卩inst2_ dispatch。如果分配使能信號(hào)有效,則根據(jù)指令的特征碼位來(lái)判斷指令的目的單元,如果分 配使能信號(hào)無(wú)效或者特征碼位非法,則判斷目的單元為不分配,輸出信號(hào)為指令的目的單 元信號(hào),艮口 inst2_unit。判斷指令3的目的單元用于判斷輸入的指令3應(yīng)該分配給哪個(gè)單元執(zhí)行,輸入 信號(hào)為一條32位指令3,即inst3,和指令分配使能電路產(chǎn)生的分配使能信號(hào),即inst3_dispatch。如果分配使能信號(hào)有效,則根據(jù)指令的特征碼位來(lái)判斷指令的目的單元,如果分 配使能信號(hào)無(wú)效或者特征碼位非法,則判斷目的單元為不分配,輸出信號(hào)為指令的目的單 兀信號(hào),艮口 inst3_unit0判斷指令4的目的單元用于判斷輸入的指令4應(yīng)該分配給哪個(gè)單元執(zhí)行,輸入 信號(hào)為一條32位指令4,即inst4,和指令分配使能電路產(chǎn)生的分配使能信號(hào),即inst4_ dispatch。如果分配使能信號(hào)有效,則根據(jù)指令的特征碼位來(lái)判斷指令的目的單元,如果分 配使能信號(hào)無(wú)效或者特征碼位非法,則判斷目的單元為不分配,輸出信號(hào)為指令的目的單 元信號(hào),艮口 inst4_unito判斷指令5的目的單元用于判斷輸入的指令5應(yīng)該分配給哪個(gè)單元執(zhí)行,輸入 信號(hào)為一條32位指令5,即inst5,和指令分配使能電路產(chǎn)生的分配使能信號(hào),即inst5_ dispatch。如果分配使能信號(hào)有效,則根據(jù)指令的特征碼位來(lái)判斷指令的目的單元,如果分 配使能信號(hào)無(wú)效或者特征碼位非法,則判斷目的單元為不分配,輸出信號(hào)為指令的目的單 兀信號(hào),艮口 inst5_unit0判斷指令6的目的單元,用于判斷輸入的指令6應(yīng)該分配給哪個(gè)單元執(zhí)行,輸入 信號(hào)為一條32位指令6,即inst6,和指令分配使能電路產(chǎn)生的分配使能信號(hào),即inst6_ dispatch。如果分配使能信號(hào)有效,則根據(jù)指令的特征碼位來(lái)判斷指令的目的單元,如果分 配使能信號(hào)無(wú)效或者特征碼位非法,則判斷目的單元為不分配,輸出信號(hào)為指令的目的單 兀信號(hào),艮口 inst6—unit。判斷指令7的目的單元用于判斷輸入的指令7應(yīng)該分配給哪個(gè)單元執(zhí)行,輸入 信號(hào)為一條32位指令7,即inst7,和指令分配使能電路產(chǎn)生的分配使能信號(hào),即inst7_ dispatch。如果分配使能信號(hào)有效,則根據(jù)指令的特征碼位來(lái)判斷指令的目的單元,如果分 配使能信號(hào)無(wú)效或者特征碼位非法,則判斷目的單元為不分配,輸出信號(hào)為指令的目的單 兀信號(hào),艮口 inst7_unit0判斷指令8的目的單元用于判斷輸入的指令8應(yīng)該分配給哪個(gè)單元執(zhí)行,輸入 信號(hào)為一條32位指令8,即instS,和指令分配使能電路產(chǎn)生的分配使能信號(hào),即inst8_ dispatch。如果分配使能信號(hào)有效,則根據(jù)指令的特征碼位來(lái)判斷指令的目的單元,如果分 配使能信號(hào)無(wú)效或者特征碼位非法,則判斷目的單元為不分配,輸出信號(hào)為指令的目的單 元信號(hào),艮口 inst8_unit。上述判斷指令的目的單元的輸出信號(hào)inStl_imit到inSt_8imit的格式如圖5所 示。對(duì)于功能單元而言,由于每條指令的目的單元信號(hào)格式相同,需要把每條指令相同的位 進(jìn)行組合就形成功能單元的指令選擇信號(hào)和NOP指令選擇信號(hào)。上述轉(zhuǎn)換過(guò)程由指令選擇 信號(hào)生成單元完成,其輸出信號(hào)分別為inst_Ll_sel、inst_Dl_sel、inst_Ml_sel、inst_Sl_ sel、inst_L2_sel、inst_D2_sel、inst_M2_sel、inst_S2_sel 禾口 inst_N0P_sel。指令選擇信號(hào)生成單元生成上述指令選擇信號(hào)的邏輯為inst_L_lsel = {inst8_unit
,inst7_unit
,inst6_unit
,inst5_ unit
, inst4_unit
, inst3_unit
, inst2_unit
, instl_unit
} ; ^ ^ inst8—unit,inst7—unit,inst6—unit,inst5—unit,inst4—unit,inst3—unit,inst2—unit, instl_unit這8個(gè)信號(hào)的第0位按順序組合起來(lái),然后就形成功能單元的指令選擇信號(hào);inst_Dl_sel = {inst8_unit [1],inst7_unit [1],inst6_unit [1],inst5_unit [1], inst4_unit [1],inst3_unit [1],inst2_unit [1],instl_unit [1]};表不將 inst8_unit,inst7_unit,inst6_unit,inst5_unit,inst4_unit,inst3_unit,inst2_unit, instl_unit這8個(gè)信號(hào)的第1位按順序組合起來(lái),然后就形成功能單元的指令選擇信號(hào);inst_Ml_sel = {inst8_unit [2], inst7_unit [2], inst6_unit [2], inst5_ unit[2], inst4_unit[2], inst3_unit[2], inst2_unit[2], instl_unit[2]} ; ^ τ^ M inst8_unit,inst7_unit,inst6_unit,inst5u_nit,inst4_unit,inst3_unit,inst2_unit, instl_unit這8個(gè)信號(hào)的第2位按順序組合起來(lái),然后就形成功能單元的指令選擇信號(hào);inst_Sl_sel = {inst8_unit [3],inst7_unit [3],inst6_unit [3],inst5_ unit[3],inst4—unit[3],inst3—unit[3],inst2—unit[3],instl—unit[3]};表不將 inst8—unit,inst7—unit,inst6—unit,inst5—unit,inst4—unit,inst3—unit,inst2—unit, instl_unit這8個(gè)信號(hào)的第3位按順序組合起來(lái),然后就形成功能單元的指令選擇信號(hào);inst_L2_sel = {inst8_unit[4], inst7_unit [4], inst6_unit[4], inst5_ unit[4], inst4_unit[4], inst3_unit[4], inst2_unit[4], instl_unit[4]} ; ^ τ^ M inst8_unit, inst7_unit,inst6_unit,inst5_unit,inst4_unit,inst3_unit,inst2_unit, instl_unit這8個(gè)信號(hào)的第4位按順序組合起來(lái),然后就形成功能單元的指令選擇信號(hào);inst_D2_sel = {inst8_unit [5],inst7_unit [5],inst6_unit [5],inst5_ unit[5],inst4—unit [5],inst3—unit [5],inst2—unit[5],instl—unit[5]};表不將 inst8—unit,inst7—unit,inst6—unit,inst5—unit,inst4—unit,inst3—unit,inst2—unit, instl_unit這8個(gè)信號(hào)的第5位按順序組合起來(lái),然后就形成功能單元的指令選擇信號(hào);inst_M2_sel = {inst8_unit [6],inst7_unit [6],inst6_unit [6],inst5_ unit [6],inst4—unit[6],inst3—unit[6],inst2—unit[6],instl—unit[6]};表不將 inst8—unit,inst7—unit,inst6—unit,inst5—unit,inst4—unit,inst3—unit,inst2—unit, instl_unit這8個(gè)信號(hào)的第6位按順序組合起來(lái),然后就形成功能單元的指令選擇信號(hào);inst_S2_sel = {inst8_unit [7],inst7_unit [7],inst6_unit [7],inst5_ unit[7],inst4—unit[7],inst3—unit[7],inst2—unit[7],instl—unit[7]};表不將 inst8—unit,inst7—unit,inst6—unit,inst5—unit,inst4—unit,inst3—unit,inst2—unit, instl_unit這8個(gè)信號(hào)的第7位按順序組合起來(lái),然后就形成功能單元的指令選擇信號(hào);inst_N0P_sel = {inst8_unit[8], inst7_unit [8], inst6_unit [8], inst5_ unit[8], inst4_unit[8], inst3_unit[8], inst2_unit[8], instl一unit[8]} ; ^ M inst8_unit,inst7_unit,inst6_unit,inst5_unit,inst4_unit,inst3_unit,inst2_unit, instl_unit這8個(gè)信號(hào)的第8位按順序組合起來(lái),然后就形成功能單元的指令選擇信號(hào)。在以上公式中,“{}”表示將括號(hào)內(nèi)的信號(hào)按照位組合起來(lái),形成邏輯值賦值給等 號(hào)左邊的信號(hào)。圖6示出了功能單元的指令選擇信號(hào)inst_Ll_sel、inst_Dl_sel、inst_Ml_ sel、 inst_Sl_sel、 inst_L2_sel、 inst_D2_sel、 inst_M2_sel、 inst_S2_sel 禾口 inst_N0P_ sel的信號(hào)格式。指令選擇單元,用于根據(jù)來(lái)自指令選擇信號(hào)生成單元的指令選擇信號(hào),選擇并輸 出與各個(gè)功能單元相匹配的功能單元指令。指令選擇單元進(jìn)一步包括Ll功能單元的指令 選擇器、Dl功能單元的指令選擇器、Ml功能單元的指令選擇器、Sl功能單元的指令選擇器、 L2功能單元的指令選擇器、D2功能單元的指令選擇器、M2功能單元的指令選擇器、S2功能單元的指令選擇器和NOP指令選擇器。上述各個(gè)功能單元的指令選擇器根據(jù)指令選擇信號(hào)的格式,對(duì)功能單元的指令進(jìn) 行選擇。當(dāng)指令選擇信號(hào)的第i位為1時(shí),選擇第i+ι條指令作為該功能單元匹配的指令, 其中,0≤i≤n-1, i為整數(shù),η = 1,2,...8 ;當(dāng)指令選擇信號(hào)的第8位為1或者不是以上 任何一種情況,則選擇單周期NOP指令。具體的說(shuō),Ll功能單元的指令選擇器用于從輸入的8條指令里面給Ll功能單元 選擇合適的指令。其輸入包括8條指令,即instl至instS,以及Ll功能單元的指令選則 擇信號(hào)inst_Ll_sel。根據(jù)指令選擇信號(hào)的格式進(jìn)行選擇,如果第0位為1則選擇指令1, 如果第1位為1則選擇指令2,如果第2位為1則選擇指令3,如果第3位為1則選擇指令 4,如果第4位為1則選擇指令5,如果第5位為1則選擇指令6,如果第6位為1則選擇指 令7,如果第7位為1則選擇指令8,如果第8位為1或者不是以上任何一種情況則選擇單 周期NOP指令,輸出信號(hào)即為選擇出的送給功能單元的指令,即Ll_inst ;Dl功能單元的指令選擇電路,用于從輸入的八條指令里面給Dl功能單元選擇合 適的指令,電路的輸入包括8條指令,即instl至instS,以及Dl功能單元的指令選則擇信 號(hào)inst_Dl_sel。根據(jù)指令選擇信號(hào)的格式進(jìn)行選擇,如果第0位為1則選擇指令1,如果 第1位為1則選擇指令2,如果第2位為1則選擇指令3,如果第3位為1則選擇指令4,如 果第4位為1則選擇指令5,如果第5位為1則選擇指令6,如果第6位為1則選擇指令7, 如果第7位為1則選擇指令8,如果第8位為1或者不是以上任何一種情況則選擇單周期 NOP指令,輸出信號(hào)即為選擇出的送給功能單元的指令,即Dl_inst ;Ml功能單元的指令選擇電路,用于從輸入的八條指令里面給Ml功能單元選擇合 適的指令,電路的輸入包括8條指令,即instl至instS,以及Ml功能單元的指令選則擇信 號(hào)inst_Ml_sel。根據(jù)指令選擇信號(hào)的格式進(jìn)行選擇,如果第0位為1則選擇指令1,如果 第1位為1則選擇指令2,如果第2位為1則選擇指令3,如果第3位為1則選擇指令4,如 果第4位為1則選擇指令5,如果第5位為1則選擇指令6,如果第6位為1則選擇指令7, 如果第7位為1則選擇指令8,如果第8位為1或者不是以上任何一種情況則選擇單周期 NOP指令,輸出信號(hào)即為選擇出的送給功能單元的指令,即Ml_inst ;Sl功能單元的指令選擇電路,用于從輸入的八條指令里面給Sl功能單元選擇合 適的指令,電路的輸入包括8條指令,即instl至instS,以及Sl功能單元的指令選則擇信 號(hào)inst_Sl_sel。根據(jù)指令選擇信號(hào)的格式進(jìn)行選擇,如果第0位為1則選擇指令1,如果 第1位為1則選擇指令2,如果第2位為1則選擇指令3,如果第3位為1則選擇指令4,如 果第4位為1則選擇指令5,如果第5位為1則選擇指令6,如果第6位為1則選擇指令7, 如果第7位為1則選擇指令8,如果第8位為1或者不是以上任何一種情況則選擇單周期 NOP指令,輸出信號(hào)即為選擇出的送給功能單元的指令,即Sl_inst ;L2功能單元的指令選擇電路,用于從輸入的八條指令里面給L2功能單元選擇合 適的指令,電路的輸入包括8條指令,即instl至instS,以及L2功能單元的指令選則擇信 號(hào)inst_L2_sel。根據(jù)指令選擇信號(hào)的格式進(jìn)行選擇,如果第0位為1則選擇指令1,如果 第1位為1則選擇指令2,如果第2位為1則選擇指令3,如果第3位為1則選擇指令4,如 果第4位為1則選擇指令5,如果第5位為1則選擇指令6,如果第6位為1則選擇指令7, 如果第7位為1則選擇指令8,如果第8位為1或者不是以上任何一種情況則選擇單周期NOP指令,輸出信號(hào)即為選擇出的送給功能單元的指令,即L2_inst ;D2功能單元的指令選擇電路,用于從輸入的八條指令里面給D2功能單元選擇合 適的指令,電路的輸入包括8條指令,即instl至instS,以及D2功能單元的指令選則擇信 號(hào)inst_D2_sel。根據(jù)指令選擇信號(hào)的格式進(jìn)行選擇,如果第0位為1則選擇指令1,如果 第1位為1則選擇指令2,如果第2位為1則選擇指令3,如果第3位為1則選擇指令4,如 果第4位為1則選擇指令5,如果第5位為1則選擇指令6,如果第6位為1則選擇指令7, 如果第7位為1則選擇指令8,如果第8位為1或者不是以上任何一種情況則選擇單周期 NOP指令,輸出信號(hào)即為選擇出的送給功能單元的指令,即D2_inst ;M2功能單元的指令選擇電路,用于從輸入的八條指令里面給M2功能單元選擇合 適的指令,電路的輸入包括8條指令,即instl至instS,以及M2功能單元的指令選則擇信 號(hào)inst_M2_sel。根據(jù)指令選擇信號(hào)的格式進(jìn)行選擇,如果第0位為1則選擇指令1,如果 第1位為1則選擇指令2,如果第2位為1則選擇指令3,如果第3位為1則選擇指令4,如 果第4位為1則選擇指令5,如果第5位為1則選擇指令6,如果第6位為1則選擇指令7, 如果第7位為1則選擇指令8,如果第8位為1或者不是以上任何一種情況則選擇單周期 NOP指令,輸出信號(hào)即為選擇出的送給功能單元的指令,即M2_inst ;S2功能單元的指令選擇電路,用于從輸入的八條指令里面給S2功能單元選擇合 適的指令,電路的輸入包括8條指令,即instl至instS,以及S2功能單元的指令選則擇信 號(hào)inst_S2_sel。根據(jù)指令選擇信號(hào)的格式進(jìn)行選擇,如果第0位為1則選擇指令1,如果 第1位為1則選擇指令2,如果第2位為1則選擇指令3,如果第3位為1則選擇指令4,如 果第4位為1則選擇指令5,如果第5位為1則選擇指令6,如果第6位為1則選擇指令7, 如果第7位為1則選擇指令8,如果第8位為1或者不是以上任何一種情況則選擇單周期 NOP指令,輸出信號(hào)即為選擇出的送給功能單元的指令,即S2_inst ;NOP指令選擇電路,用于從輸入的八條指令里面選擇出NOP指令,電路的輸入包括 8條指令,即instl至instS,以及NOP指令選則擇信號(hào)N0P_sel。根據(jù)指令選擇信號(hào)的格 式進(jìn)行選擇,如果第0位為1則選擇指令1,如果第1位為1則選擇指令2,如果第2位為1 則選擇指令3,如果第3位為1則選擇指令4,如果第4位為1則選擇指令5,如果第5位為 1則選擇指令6,如果第6位為1則選擇指令7,如果第7位為1則選擇指令8,如果第8位 為1或者不是以上任何一種情況則選擇單周期NOP指令,輸出信號(hào)即為NOP指令,即Ν0Ρ_ inst ο8個(gè)多路選擇器分別根據(jù)相應(yīng)的選擇信號(hào)從8條指令中選擇出分配到每個(gè)功能單 元的指令。由于在每個(gè)周期中不一定所有8個(gè)功能單元都需要執(zhí)行指令操作,對(duì)于不需要 執(zhí)行指令的功能單元就分配一條代表空操作的指令。每個(gè)功能單元分配到的指令Ll_inst、 Dl_inst、Ml_inst、Sl_inst、L2_inst、D2_inst、M2_inst 和 S2_inst 被送到指令分配單元 的最終輸出,N0P_inst被送到NOP指令預(yù)處理中,以便進(jìn)行后面流水線的操作。指令預(yù)處理模塊130接收上述來(lái)自指令判斷及選擇模塊的各個(gè)功能單元的指令 進(jìn)行預(yù)處理譯碼,輸出各個(gè)相應(yīng)功能單元的指令預(yù)處理信號(hào)。其中,指令預(yù)處理模塊130進(jìn) 一步包括Ll功能單元的指令預(yù)處理器、Dl功能單元的指令預(yù)處理器、Ml功能單元的指令預(yù) 處理器、Sl功能單元的指令預(yù)處理器、L2功能單元的指令預(yù)處理器、D2功能單元的指令預(yù) 處理器、M2功能單元的指令預(yù)處理器、S2功能單元的指令預(yù)處理器和NOP指令預(yù)處理器。
圖7進(jìn)一步示出了指令分配和預(yù)處理指令譯碼的裝置的工作示意圖。具體的說(shuō), Ll功能單元的指令預(yù)處理器,用于對(duì)分配給Ll功能單元的指令進(jìn)行預(yù)處理譯碼,其輸入為 送給Ll功能單元的指令Ll_inst。根據(jù)圖3中所示的指令格式,從指令的某些位選擇出地 址信號(hào)作為預(yù)處理的輸出,輸出為L(zhǎng)l功能單元的指令預(yù)處理信號(hào),包括源1寄存器地址Ll_ srcl,源2寄存器地址Ll_src2,和目的寄存器地址Ll_dst。Dl功能單元的指令預(yù)處理器,用于對(duì)分配給Dl功能單元的指令進(jìn)行預(yù)處理譯碼, 其輸入為送給Dl功能單元的指令Dl_inst。根據(jù)指令格式,從指令的某些位選擇出地址 信號(hào)作為預(yù)處理的輸出,輸出為Dl功能單元的指令預(yù)處理信號(hào),包括源1寄存器地址Dl_ srcl,源2寄存器地址Dl_src2,和目的寄存器地址Dl_dst。Ml功能單元的指令預(yù)處理器,用于對(duì)分配給Ml功能單元的指令進(jìn)行預(yù)處理譯碼, 其輸入為送給Ml功能單元的指令Ml_inst。根據(jù)指令格式,從指令的某些位選擇出地址 信號(hào)作為預(yù)處理的輸出,輸出為Ml功能單元的指令預(yù)處理信號(hào),包括源1寄存器地址Ml_ srcl,源2寄存器地址Ml_src2,和目的寄存器地址Ml_dst。Sl功能單元的指令預(yù)處理電路,用于對(duì)分配給Sl功能單元的指令進(jìn)行預(yù)處理譯 碼,其輸入為送給Sl功能單元的指令Sl_inst。根據(jù)指令格式,從指令的某些位選擇出地址 信號(hào)作為預(yù)處理的輸出,輸出為Sl功能單元的指令預(yù)處理信號(hào),包括源1寄存器地址Sl_ srcl,源2寄存器地址Sl_src2,和目的寄存器地址Sl_dst。L2功能單元的指令預(yù)處理器,用于對(duì)分配給L2功能單元的指令進(jìn)行預(yù)處理譯碼, 其輸入為送給L2功能單元的指令L2_inst。根據(jù)指令格式,從指令的某些位選擇出地址 信號(hào)作為預(yù)處理的輸出,輸出為L(zhǎng)2功能單元的指令預(yù)處理信號(hào),包括源1寄存器地址L2_ srcl,源2寄存器地址L2_src2,和目的寄存器地址L2_dst。D2功能單元的指令預(yù)處理器,用于對(duì)分配給D2功能單元的指令進(jìn)行預(yù)處理譯碼, 其輸入為送給D2功能單元的指令D2_inst。根據(jù)指令格式,從指令的某些位選擇出地址 信號(hào)作為預(yù)處理的輸出,輸出為D2功能單元的指令預(yù)處理信號(hào),包括源1寄存器地址D2_ srcl,源2寄存器地址D2_src2,和目的寄存器地址D2_dst。M2功能單元的指令預(yù)處理器,用于對(duì)分配給M2功能單元的指令進(jìn)行預(yù)處理譯碼, 其輸入為送給M2功能單元的指令M2_inst,。根據(jù)指令格式,從指令的某些位選擇出地址 信號(hào)作為預(yù)處理的輸出,輸出為M2功能單元的指令預(yù)處理信號(hào),包括源1寄存器地址M2_ srcl,源2寄存器地址M2_src2,和目的寄存器地址M2_dst。S2功能單元的指令預(yù)處理器,用于對(duì)分配給S2功能單元的指令進(jìn)行預(yù)處理譯碼, 其輸入為送給S2功能單元的指令S2_inst。根據(jù)指令格式,從指令的某些位選擇出地址 信號(hào)作為預(yù)處理的輸出,輸出為S2功能單元的指令預(yù)處理信號(hào),包括源1寄存器地址S2_ srcl,源2寄存器地址S2_src2,和目的寄存器地址S2_dst。NOP指令預(yù)處理器,用于對(duì)NOP指令進(jìn)行預(yù)處理譯碼,電路模塊的輸入N0P_inst。 根據(jù)指令格式,從指令選擇出NOP操作的指令需要停頓的周期數(shù)N0P_num,輸出為N0P_num。指令分配完成本級(jí)的操作之后,將每個(gè)功能單元的指令和每個(gè)功能單元的指令預(yù) 處理輸出信號(hào)輸出,送給后續(xù)的電路操作處理。由于執(zhí)行包中可能包含多周期停頓指令,另外一個(gè)多路選擇器根據(jù)選擇信號(hào) inst_N0P_sel選擇出執(zhí)行包中的多周期停頓指令和停頓的周期數(shù),這個(gè)停頓的周期數(shù)
15N0P_num也被存到段間寄存器,以便接下來(lái)控制器來(lái)控制流水線的停頓。本發(fā)明的指令分配和預(yù)處理指令譯碼的裝置可以得到每周期分配給功能單元的 指令,以及為加快后續(xù)指令譯碼的速度而做的指令預(yù)處理,用相對(duì)較小的面積和較快的速 度實(shí)現(xiàn)的。由于本電路結(jié)構(gòu)將8條指令的分配和預(yù)處理并行處理,可以達(dá)到較快的速度。本 發(fā)明可以用在數(shù)字信號(hào)處理器的指令譯碼電路之前,得到分配給8個(gè)功能單元的指令,輸 入后面的電路結(jié)構(gòu)。盡管已經(jīng)示出和描述了本發(fā)明的實(shí)施例,對(duì)于本領(lǐng)域的普通技術(shù)人員而言,可以 理解在不脫離本發(fā)明的原理和精神的情況下可以對(duì)這些實(shí)施例進(jìn)行多種變化、修改、替換 和變型,本發(fā)明的范圍由所附權(quán)利要求及其等同限定。
權(quán)利要求
一種指令分配和預(yù)處理指令譯碼的裝置,其特征在于,包括指令分配模塊,用于生成指令分配使能信號(hào)和下一個(gè)周期的指令分配信號(hào);指令判斷及選擇模塊,用于根據(jù)來(lái)自所述指令分配模塊的指令分配使能信號(hào),生成各個(gè)功能單元的指令選擇信號(hào),選擇并輸出相應(yīng)的功能單元指令;和指令預(yù)處理模塊,用于對(duì)來(lái)自所述指令判斷及選擇模塊的各個(gè)功能單元的指令進(jìn)行預(yù)處理譯碼,輸出各個(gè)相應(yīng)功能單元的指令預(yù)處理信號(hào)。
2.如權(quán)利要求1所述的裝置,其特征在于,所述指令分配模塊進(jìn)一步包括分配標(biāo)志處 理單元、指令分配使能單元和分配標(biāo)志寄存單元,所述分配標(biāo)志處理單元,用于將輸入的上一個(gè)周期指令分配信號(hào)pre_flag(n) (η = 1, 2,3. . . 8)、指示新的取指包指令進(jìn)入分配單元的信號(hào)NEW_FP以及分配指示信號(hào)PC_v3進(jìn)行 邏輯處理,生成指示本周期的指令分配信號(hào)fix_flag(n) (η = 1,2,3.. . 8);所述指令分配使能單元,用于根據(jù)根據(jù)輸入的各個(gè)功能單元的指令的P位和來(lái)自所述 分配標(biāo)志處理單元的的本周期指令分配信號(hào),判斷本周期需要分配的執(zhí)行包,生成指令分 配使能信號(hào)inSt(n)_diSpatCh、下一個(gè)周期的指令分配信號(hào)next_flag(n)以及流水線停 頓指示信號(hào);所述分配標(biāo)志寄存單元,用于記錄本周期分配指令的標(biāo)志信息。
3.如權(quán)利要求2所述的裝置,其特征在于,所述分配標(biāo)志單元生成指示本次分配指令 的標(biāo)志信號(hào)fiX_flag(n)的邏輯處理進(jìn)一步包括fix_flag (η) = NEff_FP ? (PC_v3 >= η) :pre_flag (η), 當(dāng)NEW_FP為真時(shí),則判斷PC_v3是否大于等于n,當(dāng) PC_v3 >= η 時(shí),則 fix_flag(η)為 1 ;當(dāng) PC_v3 小于 1 時(shí),則 fix_flag(η)為 0 ; 當(dāng) NEW_FP 為假時(shí),則 fix_flag(n) = pre_flag(η),其中 η = 1,2,3···8。
4.如權(quán)利要求2所述的裝置,其特征在于,所述指令分配使能單元生成指令分配使能 信號(hào)inst(n)_dispatch進(jìn)一步包括inst(n)_dispatch = next_flag(η)&( fix_flag(η)),當(dāng)?shù)讦菞l指令在上一個(gè)周期沒(méi)有分配過(guò),而在本周期的分配標(biāo)志為完成分配,則第η條 指令在本周期分配,其中,“&”表示邏輯與,“ ”表示邏輯取反。
5.如權(quán)利要求2所述的裝置,其特征在于,所述指令分配使能單元生成下一個(gè)周期的 指令分配信號(hào)neXt_flag(n)進(jìn)一步包括next_flag(η) = (next_flag(n-1)&p(n-1))|f ix_flag(n-1), 當(dāng)?shù)趎-1條指令在上一個(gè)周期分配過(guò),或者n-1條指令本周期分配并且第η條指令和 第n-1條指令并行,則第η條指令已經(jīng)分配過(guò)或者正要分配,其中η = 1,2,3. . . 8, 當(dāng)η = 1時(shí),next_flagl = 1,表示第1條指令已經(jīng)分配過(guò)或者正要分配, 其中,“I”表示邏輯或。
6.如權(quán)利要求1所述的裝置,所述指令判斷及選擇模塊進(jìn)一步包括判斷指令的目的 單元、指令選擇信號(hào)生成單元和指令選擇單元,所述判斷指令的目的單元,用于根據(jù)輸入的功能單元的指令集合和來(lái)自所述指令分 配模塊的指令分配使能信號(hào),判斷所述功能單元的指令集合中與各個(gè)功能單元相匹配的指令,輸出指令的目的單元信號(hào);所述指令選擇信號(hào)生成單元,用于將來(lái)自所述判斷指令的目的單元的指令的目的單元 信號(hào)轉(zhuǎn)換為各個(gè)功能單元的指令選擇信號(hào)以及NOP指令選擇信號(hào);所述指令選擇單元,用于根據(jù)來(lái)自所述指令選擇信號(hào)生成單元的指令選擇信號(hào),選擇 并輸出與各個(gè)功能單元相匹配的功能單元指令。
7.如權(quán)利要求6所述的裝置,其特征在于,所述判斷指令的目的單元判斷所述功能單 元的指令集合中與各個(gè)功能單元相匹配的指令進(jìn)一步包括當(dāng)所述指令分配使能信號(hào)有效,則根據(jù)指令的特征碼位判斷與所述功能單元的指令集 合中各條功能指令的相匹配的目的功能單元;當(dāng)所述指令分配使能信號(hào)無(wú)效或者特征碼位非法,則判斷所述功能單元的指令與目的 功能單元不匹配。
8.如權(quán)利要求6所述的裝置,其特征在于,所述指令選擇單元進(jìn)一步包括Ll功能單元 的指令選擇器、Dl功能單元的指令選擇器、Ml功能單元的指令選擇器、Sl功能單元的指令 選擇器、L2功能單元的指令選擇器、D2功能單元的指令選擇器、M2功能單元的指令選擇器、 S2功能單元的指令選擇器和NOP指令選擇器,所述各個(gè)功能單元的指令選擇器根據(jù)所述指令選擇信號(hào)的格式,對(duì)功能單元的指令進(jìn) 行選擇,當(dāng)所述指令選擇信號(hào)的第i位為1時(shí),選擇第i+Ι條指令作為該功能單元匹配的指 令,其中,0彡i彡N-l,i為整數(shù),N= 1,2,···8;當(dāng)所述指令選擇信號(hào)的第8位為1或者不是以上任何一種情況,則選擇單周期NOP指令。
9.如權(quán)利要求1所述的裝置,其特征在于,所述指令預(yù)處理模塊進(jìn)一步包括Ll功能單 元的指令預(yù)處理器、Dl功能單元的指令預(yù)處理器、Ml功能單元的指令預(yù)處理器、Sl功能單 元的指令預(yù)處理器、L2功能單元的指令預(yù)處理器、D2功能單元的指令預(yù)處理器、M2功能單 元的指令預(yù)處理器、S2功能單元的指令預(yù)處理器和NOP指令預(yù)處理器,所述各個(gè)功能單元的指令預(yù)處理器進(jìn)行預(yù)處理譯碼進(jìn)一步包括根據(jù)來(lái)自所述指令選擇單元的各個(gè)功能單元指令的指令格式,從所述指令中選擇地址 信號(hào)作為預(yù)處理信號(hào)輸出。
10.如權(quán)利要求9所述的裝置,其特征在于,所述預(yù)處理信號(hào)包括源1寄存器地址、源2 寄存器地址和目的寄存器地址。
全文摘要
本發(fā)明提出一種指令分配和預(yù)處理指令譯碼的裝置,包括指令分配模塊,用于生成指令分配使能信號(hào)和下一個(gè)周期的指令分配信號(hào);指令判斷及選擇模塊,用于根據(jù)來(lái)自指令分配模塊的指令分配使能信號(hào),生成各個(gè)功能單元的指令選擇信號(hào),選擇并輸出相應(yīng)的功能單元指令;和指令預(yù)處理模塊,用于對(duì)來(lái)自指令判斷及選擇模塊的各個(gè)功能單元的指令進(jìn)行預(yù)處理譯碼,輸出各個(gè)相應(yīng)功能單元的指令預(yù)處理信號(hào)。本發(fā)明的裝置占用的硬件面積小、速度快,實(shí)現(xiàn)了高效的性能和較小的面積功耗的平衡。
文檔編號(hào)G06F9/30GK101901130SQ201010238659
公開(kāi)日2010年12月1日 申請(qǐng)日期2010年7月26日 優(yōu)先權(quán)日2010年7月26日
發(fā)明者葉劍飛, 李兆麟, 李圣龍, 王芳, 鄭慶偉, 陳佳佳, 魏熾頻 申請(qǐng)人:清華大學(xué)