專(zhuān)利名稱(chēng):一種基于超長(zhǎng)指令字專(zhuān)用指令集處理器的匯編器設(shè)計(jì)方法
技術(shù)領(lǐng)域:
本發(fā)明屬于計(jì)算機(jī)微處理器技術(shù)領(lǐng)域,更進(jìn)一步涉及到微處理器匯編器中的一種基于超長(zhǎng)指令字結(jié)構(gòu)的專(zhuān)用指令集處理器匯編器的設(shè)計(jì)方法,該方法設(shè)計(jì)的匯編器不僅可以完成傳統(tǒng)匯編器的基本功能,還可以實(shí)現(xiàn)編譯器部分的寄存器重命名和指令調(diào)度,提高指令級(jí)并行性。
背景技術(shù):
專(zhuān)用指令集處理器技術(shù)ASIP是在專(zhuān)用集成電路和現(xiàn)場(chǎng)可編程門(mén)陣列技術(shù)中發(fā)展出來(lái)的一種全新的電路設(shè)計(jì)技術(shù)。其核心思想是針對(duì)某一種類(lèi)型的應(yīng)用領(lǐng)域,開(kāi)發(fā)出一套量身定做的專(zhuān)用的微處理器指令集以及實(shí)現(xiàn)該指令集的微處理器體系結(jié)構(gòu)。采用專(zhuān)用指令集處理器技術(shù)具有以下優(yōu)點(diǎn):以現(xiàn)場(chǎng)可編程門(mén)陣列為實(shí)現(xiàn)載體,而現(xiàn)場(chǎng)可編程門(mén)陣列具有可實(shí)現(xiàn)的電路規(guī)模大、片內(nèi)資源豐富及可重配置等特性,特別是采用現(xiàn)場(chǎng)可編程門(mén)陣列可以相對(duì)容易地在單個(gè)芯片中集成多個(gè)專(zhuān)用指令集處理器處理單元,以專(zhuān)用指令集處理器陣列結(jié)構(gòu)形式實(shí)現(xiàn)完全并行的高速信號(hào)處理,提高信號(hào)處理速度;另外,專(zhuān)用指令集處理器是可編程的,即在專(zhuān)用指令集處理器的電路基礎(chǔ)上,算法通過(guò)軟件編程就可以實(shí)現(xiàn),因此在不需要重新設(shè)計(jì)電路的情況下可以方便的實(shí)現(xiàn)許多其他信號(hào)處理算法,例如快速傅里葉變換FFT、有限脈沖響應(yīng)FIR(Finite Impulse Response)、無(wú)限脈沖響應(yīng) IIR(Infinite ImpulseResponse)、矩陣求逆等等,給設(shè)計(jì)帶來(lái)了很大的方便性和靈活性??傊?,專(zhuān)用指令集處理器系統(tǒng)既具有專(zhuān)用集成電路系統(tǒng)的性能優(yōu)勢(shì),又具有數(shù)字信號(hào)處理的可編程性能,設(shè)計(jì)靈活方便,具有很好的升級(jí)性和移植性,在數(shù)字信號(hào)處理領(lǐng)域有了廣泛的應(yīng)用。通過(guò)權(quán)衡速度、功耗、成本、靈活性等多個(gè)方面的設(shè)計(jì)約束,設(shè)計(jì)者可以定制專(zhuān)用指令集處理器以達(dá)到最好的平衡點(diǎn),從而適應(yīng)嵌入式系統(tǒng)的需要。因而專(zhuān)用指令集處理器在嵌入式領(lǐng)域具有良好的應(yīng)用前景。專(zhuān)用指令集處理器設(shè)計(jì)需要面對(duì)多種類(lèi)型的應(yīng)用定制最優(yōu)的體系結(jié)構(gòu),應(yīng)用多樣性和設(shè)計(jì)時(shí)效性是迫切需要解決的問(wèn)題。超長(zhǎng)指令字VLIW(Very Long Instruction Word)米用超長(zhǎng)指令字控制的方法,利用指令級(jí)并行的概念形成的。所謂超長(zhǎng)指令字,是把兩條或兩條以上可以并行執(zhí)行的指令打包成一條較長(zhǎng)的指令字,該過(guò)程一般是由編譯軟件完成。當(dāng)這些指令字從程序存儲(chǔ)器中取出放到處理器中時(shí),它們被分解成幾條簡(jiǎn)單的指令,這些簡(jiǎn)單的指令被分派到一些獨(dú)立的功能單元去執(zhí)行。因此,多個(gè)功能單元并行工作,所有的功能單元共享共用一個(gè)寄存器文件。超長(zhǎng)指令字VLIW處理器主要的優(yōu)點(diǎn)是顯式并行指令控制EPIC (Explicit ParallelismInstruction Control) 0由處理器的超長(zhǎng)指令字顯式表明并行操縱,不需要微處理器內(nèi)部復(fù)雜的指令調(diào)度,從而簡(jiǎn)化了微處理器的控制部件,降低了硬件復(fù)雜度。這樣,VLIW處理器就需要一個(gè)高效的編譯軟件,其采用指令調(diào)度來(lái)打包可以并行執(zhí)行的指令。因此,如何設(shè)計(jì)一個(gè)高性能的編譯軟件是VLIW設(shè)計(jì)的難點(diǎn)所在。VLIW結(jié)構(gòu)有效地開(kāi)發(fā)指令級(jí)并行性(Instruction Level Parallelism, ILP),提高了處理器的性能。由于VLIW處理器具有面向數(shù)據(jù)流的處理和指令級(jí)并行性的優(yōu)勢(shì),能有效地減少數(shù)字信號(hào)處理的復(fù)雜性,無(wú)疑將成為媒體處理器設(shè)計(jì)領(lǐng)域的主流設(shè)計(jì)思想。目前面向超長(zhǎng)指令字VLIW處理器的匯編器只是實(shí)現(xiàn)了將匯編語(yǔ)句翻譯為目標(biāo)代碼(VLIW指令字的二進(jìn)制代碼)的工作,解決指令沖突的方法只是通過(guò)增加空VLIW指令來(lái)實(shí)現(xiàn);而提高指令級(jí)并行的方法和技術(shù)都是由編譯器實(shí)現(xiàn)的,這樣不僅要設(shè)計(jì)匯編器,還要設(shè)計(jì)對(duì)應(yīng)的編譯器。對(duì)于專(zhuān)用指令集處理器ASIP,這不僅增加了設(shè)計(jì)人員的工作量,還增加了設(shè)計(jì)的實(shí)現(xiàn)周期。
發(fā)明內(nèi)容
本發(fā)明的目的在于克服上述現(xiàn)有技術(shù)的不足,提出了一種能夠提高指令級(jí)并行的面向基于超長(zhǎng)指令字的專(zhuān)用指令集處理器ASIP的匯編器。本發(fā)明的技術(shù)方案是,通過(guò)在匯編器中設(shè)計(jì)寄存器重命名和指令打包及調(diào)度的功能,實(shí)現(xiàn)匯編器的改進(jìn),提高指令級(jí)并行性,所述寄存器重命名是在檢測(cè)到指令中的寫(xiě)后寫(xiě)沖突之后,搜索空閑的寄存器替代指令中目的寄存器以消除寫(xiě)后寫(xiě)沖突,搜尋空閑的寄存器是通過(guò)建立、更新和檢測(cè)寄存器狀態(tài)表實(shí)現(xiàn)的;所述指令打包及調(diào)度設(shè)計(jì)同時(shí)執(zhí)行,匯編器在打包指令的同時(shí),檢測(cè)指令間的沖突,通過(guò)指令調(diào)度調(diào)整指令的執(zhí)行順序消除指令沖突以提高打包效率,指令打包及調(diào)度設(shè)計(jì)包括程序分段、段內(nèi)指令打包及調(diào)度、段間指令沖突檢測(cè)及調(diào)整、跳轉(zhuǎn)指令標(biāo)號(hào)匹配、跳轉(zhuǎn)指令沖突檢測(cè)及調(diào)整和跳轉(zhuǎn)指令標(biāo)號(hào)重新匹配。程序分段根據(jù)跳轉(zhuǎn)指令和目標(biāo)標(biāo)號(hào)分段,程序分段既保證跳轉(zhuǎn)指令前后指令的執(zhí)行順序,又可以使段內(nèi)的指令調(diào)度不再受跳轉(zhuǎn)指令的限制;段內(nèi)指令打包及調(diào)度將各程序段中位置相近并且不存在沖突的指令打包成一條VLIff指令;如果打包過(guò)程中存在指令沖突,跳過(guò)該沖突的指令繼續(xù)搜索,找到與搜索到指令都不存在沖突的指令,將搜索到指令插入到當(dāng)前位置并跟沖突之前的指令打包成一條VLIW指令;如果直到程序段結(jié)束也不存在沖突的指令,就在當(dāng)前位置插入空“N0P “指令;段間指令沖突檢測(cè)及調(diào)整是檢測(cè)相鄰程序段首尾連接部分VLIW指令間的沖突,如果存在沖突,直接在段頭插入空(NOP) VLIW指令;跳轉(zhuǎn)指令標(biāo)號(hào)匹配將跳轉(zhuǎn)指令和目標(biāo)指令連接起來(lái),以便生成跳轉(zhuǎn)指令的二進(jìn)制代碼中的目標(biāo)地址或偏移量,及檢測(cè)跳轉(zhuǎn)指令與目標(biāo)指令的VLIW指令間沖突;跳轉(zhuǎn)指令沖突檢測(cè)及調(diào)整是檢測(cè)跳轉(zhuǎn)指令和目標(biāo)指令是否存在VLIW指令間的沖突,如果存在沖突,直接在目標(biāo)地址的指令前插入空(NOP) VLIW指令;跳轉(zhuǎn)指令標(biāo)號(hào)重新匹配是在完成跳轉(zhuǎn)指令沖突檢測(cè)并調(diào)整之后,將跳轉(zhuǎn)指令和目標(biāo)指令重新連接起來(lái)。本發(fā)明與現(xiàn)有技術(shù)相比具有以下優(yōu)點(diǎn):第一、本發(fā)明利用寄存器重命名消除指令中的寫(xiě)后寫(xiě)沖突,利用指令調(diào)度調(diào)整指令的執(zhí)行順序以消除指令沖突,可以在匯編階段增加指令的并行度,提高指令級(jí)并行性。第二、在本發(fā)明的基礎(chǔ)上,可以采用普通RISC處理器編譯器的設(shè)計(jì)方法來(lái)進(jìn)行基于超長(zhǎng)指令字的專(zhuān)用指令集處理器的專(zhuān)用編譯器的設(shè)計(jì),從而大大提高其設(shè)計(jì)效率,極大地?cái)U(kuò)展了基于超長(zhǎng)指令字的專(zhuān)用指令集處理器的應(yīng)用領(lǐng)域。第三、本發(fā)明運(yùn)用專(zhuān)用指令集處理器ASIP中,對(duì)于某種特定的情況如快速傅里葉變換FFT、有限脈沖響應(yīng)FIR濾波器,具有較強(qiáng)的針對(duì)性,可以更加有效的實(shí)現(xiàn)系統(tǒng)的功能。
圖1為本發(fā)明匯編器的寄存器重命名編程流程;圖2為本發(fā)明匯編器的指令打包及調(diào)度的整體流程;圖3為本發(fā)明匯編器的段內(nèi)指令打包及調(diào)度的整體流程。
具體實(shí)施例方式本發(fā)明的技術(shù)方案是,在匯編器處理過(guò)程中設(shè)計(jì)寄存器重命名和指令打包及調(diào)度。該匯編器設(shè)計(jì)是在匯編器完成了傳統(tǒng)的詞法分析、語(yǔ)法分析、語(yǔ)義分析、出錯(cuò)處理之后,目標(biāo)代碼生成之前加入了可以提高指令級(jí)并行性的寄存器重命名和指令打包及調(diào)度。下面結(jié)合附圖對(duì)本發(fā)明做進(jìn)一步的詳細(xì)描述。實(shí)施例1:寄存器重命名流程參照?qǐng)D1,實(shí)施寄存器重命名需要進(jìn)行指令寫(xiě)后寫(xiě)沖突檢測(cè),如果發(fā)現(xiàn)了指令中存在寫(xiě)后寫(xiě)沖突,查看是否存在空閑的寄存器并判斷該空閑寄存器在替換這些指令中存在沖突的寄存器期間是否都是空閑的,如果存在空閑的寄存器并且一直處于空閑狀態(tài),就可以利用寄存器重命名來(lái)消除寫(xiě)后寫(xiě)沖突。某個(gè)寄存器從最后一次被調(diào)用到重新被賦值,這期間都是空閑的,可以被用來(lái)重命名。如何判斷一個(gè)寄存器是否空閑的呢?對(duì)于這個(gè)問(wèn)題我們建立一個(gè)寄存器狀態(tài)表,把寄存器在不同的指令間的使用狀況進(jìn)行分析了建立的一個(gè)狀態(tài)表。當(dāng)碰到了需要重命名的寄存器即存在寫(xiě)后寫(xiě)沖突的寄存器時(shí),就可以查找這個(gè)狀態(tài)表判斷是否存在空閑的寄存器。由于寄存器重命名會(huì)改變寄存器狀態(tài),因此在每次需要進(jìn)行寄存器重命名之前,都需要更新這個(gè)寄存器狀態(tài)表。假設(shè)用“ I ”來(lái)表示寄存器忙碌,用“0”來(lái)表示寄存器空閑,可以用一組二進(jìn)制數(shù)來(lái)表示可以重命名的寄存器。這樣,每行指令都對(duì)應(yīng)一個(gè)寄存器狀態(tài),整個(gè)程序就形成了一個(gè)寄存器狀態(tài)表。通過(guò)檢測(cè)這個(gè)狀態(tài)表,就可以判斷是否存在空閑寄存器。例如:Id grO, #0 ;......— grO 忙碌 Iadd grl, grO ;......— grO 忙碌 IId gr2, grO ;......— grO 空閑 0Inot grO, gr3 ;由于在寄存器重命名時(shí),需要替換的寄存器的位置不止一個(gè),還需要替換指令中所有用到這個(gè)寄存器當(dāng)前值(寄存器的值保持不變)的位置,所以空閑寄存器不僅在當(dāng)前指令是空閑的,還要在所有替換寄存器的位置也是空閑的。假設(shè)超長(zhǎng)指令字VLIW處理器一次可以運(yùn)行四條指令,這就需要對(duì)某條指令后面的三條指令進(jìn)行寫(xiě)后寫(xiě)沖突WAW的判斷。例如:Id grl, grO ;add gr2, grl ;Id grl, #2 ;
......
Id gr3, grl ;Id grl, gr4 ;第一條指令和第三條指令存在寫(xiě)后寫(xiě)沖突,掃描指令“Id grl, #2 ; ”之前的寄存器狀態(tài)表尋找空閑的寄存器比如gr30,并且這個(gè)寄存器一直處于空閑狀態(tài)。那么用寄存器gr30替換指令“Id grl, #2 ; ”和“Id gr3, grl ; ”之間所有的寄存器grl,而指令“ Id grl,gr4 ; ”中的寄存器grl不必替換,因?yàn)樗呀?jīng)被重新賦值了。實(shí)施例2:指令打包及調(diào)度設(shè)計(jì)方法在指令打包及調(diào)度過(guò)程中,跳轉(zhuǎn)指令前后指令的執(zhí)行順序是需要被保護(hù)的,這種保護(hù)主要通過(guò)下面兩種方式:在跳轉(zhuǎn)指令之前出現(xiàn)的指令不能被放到跳轉(zhuǎn)指令之后執(zhí)行;在跳轉(zhuǎn)指令之后出現(xiàn)的指令不能被放到跳轉(zhuǎn)指令之前執(zhí)行。對(duì)于跳轉(zhuǎn)指令前后指令執(zhí)行順序的保護(hù),主要通過(guò)程序分段的方式,保證指令正確的執(zhí)行順序。整個(gè)程序的指令打包及調(diào)度的流程如圖2所示。首先對(duì)整個(gè)程序根據(jù)跳轉(zhuǎn)指令和目標(biāo)標(biāo)號(hào)進(jìn)行分段,程序分段后段內(nèi)的指令調(diào)度不再受跳轉(zhuǎn)指令的限制;然后對(duì)每個(gè)段內(nèi)指令進(jìn)行打包及調(diào)度,此時(shí)需要注意處理器VLIW指令內(nèi)及VLIW指令間沖突和部分指令執(zhí)行順序,保證程序的功能不會(huì)改變;再檢測(cè)相鄰程序段首尾連接部分是否存在V LIff指令間的沖突(這根硬件實(shí)現(xiàn)有關(guān)),如果存在沖突,插入幾條空(NOP) VLIW指令消除沖突;再進(jìn)行跳轉(zhuǎn)指令標(biāo)號(hào)的匹配,將跳轉(zhuǎn)指令和目標(biāo)指令連接起來(lái),以便跳轉(zhuǎn)指令的二進(jìn)制代碼中的目標(biāo)地址或偏移量的生成和跳轉(zhuǎn)指令與目標(biāo)指令沖突檢測(cè);再檢測(cè)跳轉(zhuǎn)指令和目標(biāo)指令是否存在V LIW指令間的沖突,如果存在沖突,同樣插入幾條空(NOP) VLIW指令消除沖突;最后進(jìn)行跳轉(zhuǎn)指令標(biāo)號(hào)的重新匹配,將消除沖突之后的VLIW指令程序中的跳轉(zhuǎn)指令和目標(biāo)指令重新匹配,這個(gè)過(guò)程和上面的跳轉(zhuǎn)指令標(biāo)號(hào)的匹配是相同的。步驟1:把用戶編寫(xiě)的整個(gè)功能程序分成多個(gè)段落,對(duì)每個(gè)段內(nèi)指令進(jìn)行打包、沖突檢測(cè)和指令調(diào)度。將程序分段的目的是程序分段后段內(nèi)的指令調(diào)度不再受跳轉(zhuǎn)指令的限制。程序分段的方法是根據(jù)跳轉(zhuǎn)指令和目標(biāo)標(biāo)號(hào)把程序分開(kāi)。需要注意的是,不同的指令和目標(biāo)標(biāo)號(hào)分段的方式是不同。例如條件跳轉(zhuǎn)指令和循環(huán)指令跟它前面的指令分到同一個(gè)段中,程序暫停指令idle要單獨(dú)分到一個(gè)段中,循環(huán)指令對(duì)應(yīng)的目標(biāo)指令要跟它前面的指令分到同一個(gè)段中,其它跳轉(zhuǎn)指令對(duì)應(yīng)的目標(biāo)指令要跟它前面的指令分到不同的段中。步驟2:段內(nèi)的指令打包及調(diào)度是在程序分段之后,在每個(gè)段內(nèi)根據(jù)處理器的需要將若干條指令打包成一條VLIW指令并且不存在打包沖突,即VLIW指令內(nèi)是和VLIW指令間都沒(méi)有沖突。VLIW指令內(nèi)沖突包括寫(xiě)后寫(xiě)沖突或?qū)懞笞x沖突;VLIW指令間的沖突跟微處理器硬件電路流水相關(guān),某種指令操作流水級(jí)數(shù)越多受到該指令影響的VLIW指令就越多,例如乘法操作是3級(jí)流水,包含乘法操作的VLIW指令之后的兩條VLIW指令都不能使用該乘法操作的結(jié)果。段內(nèi)指令打包及調(diào)度流程如圖3所示。段內(nèi)的指令打包及調(diào)度的主要操作是將所有的指令都存放在一個(gè)雙向的指令鏈表中,按順序搜索指令,將各程序段中位置相近并且不存在沖突的指令打包成一條VLIW指令;如果打包過(guò)程中存在指令沖突,跳過(guò)該沖突的指令繼續(xù)搜索找到與之前所有指令都不存在沖突的指令,將其插入的當(dāng)前位置并跟沖突之前的指令打包成一條VLIW指令;如果直到程序段結(jié)束都也不存在沖突的指令,就在當(dāng)前位置插入空(NOP)指令。其中,所謂的與之前所有指令都不存在沖突的指令是指該指令不僅不存在打包沖突還要與它之前所有的未打包的指令不存在數(shù)據(jù)沖突即寫(xiě)后寫(xiě)沖突、寫(xiě)后讀沖突和讀后寫(xiě)沖突。VLIW指令間的沖突跟微處理器硬件電路流水相關(guān);指令調(diào)度將程序段中不存在沖突的指令提前更改指令順序,提高指令級(jí)并行性。步驟3:段間指令沖突檢測(cè)是檢測(cè)相鄰程序段首尾連接部分VLIW指令間的沖突,如果存在VLIW指令間沖突,根據(jù)沖突的不同類(lèi)型插入若干條空(NOP) VLIW指令。這個(gè)過(guò)程不需要指令調(diào)度,這是由于所有的VLIW指令已經(jīng)形成,倘若將各個(gè)VLIW指令進(jìn)行沖突檢測(cè)和調(diào)度,勢(shì)必會(huì)影響本來(lái)已經(jīng)形成VLIW指令順序,可能會(huì)產(chǎn)生新的沖突。所述的段間指令沖突檢測(cè)及調(diào)整階段插入的空“NOP "VLIff指令數(shù)量與硬件流水級(jí)數(shù)相關(guān)。步驟4:跳轉(zhuǎn)指令的二進(jìn)制代碼包含了目標(biāo)地址或偏移量,必須檢測(cè)出跳轉(zhuǎn)指令和目標(biāo)標(biāo)號(hào)所在的位置。匯編器會(huì)把源程序中的跳轉(zhuǎn)指令和目標(biāo)標(biāo)號(hào)所在的行號(hào)信息記錄下來(lái),然后可以根據(jù)記錄下來(lái)的信息查找出這些的跳轉(zhuǎn)指令和目標(biāo)標(biāo)號(hào)的行號(hào),并把它們的標(biāo)號(hào)進(jìn)行逐一匹配。這樣,我們就可以得到跳轉(zhuǎn)指令和目標(biāo)標(biāo)號(hào)在打包后VLIW指令程序中的行號(hào),進(jìn)而就可以得到跳轉(zhuǎn)的目標(biāo)地址或偏移量信息。這個(gè)行號(hào)的匹配不僅在段間沖突檢查和調(diào)整之后需要執(zhí)行,還需要在跳轉(zhuǎn)指令沖突檢查和調(diào)整之后重新進(jìn)行匹配,因?yàn)樘D(zhuǎn)指令和目標(biāo)地址的指令之間也可能存在沖突,需要加入若干條空(NOP)VLIW指令。步驟5:由于跳轉(zhuǎn)指令和目標(biāo)指令之間也可能存在沖突,在上一個(gè)環(huán)節(jié)已經(jīng)得到了在VLIW指令程序跳轉(zhuǎn)指令和目標(biāo)指令的行號(hào),可以根據(jù)這些信息檢查跳轉(zhuǎn)指令和目標(biāo)指令是否存在VLIW指令間的沖突。這里的沖突檢查過(guò)程和段間沖突檢查過(guò)程相似,不同的只是檢查程序跳轉(zhuǎn)指令和目的標(biāo)號(hào)所在的行的指令是否存在沖突。步驟6:跳轉(zhuǎn)指令標(biāo)號(hào)重新匹配是在完成跳轉(zhuǎn)指令沖突檢測(cè)并調(diào)整之后,將跳轉(zhuǎn)指令和目標(biāo)指令重新連接起來(lái),其過(guò)程與步驟4相同。經(jīng)過(guò)對(duì)寄存器重命名和指令打包及調(diào)度的設(shè)計(jì),在匯編階段增加指令的并行度,提高指令級(jí)并行性;在本匯編器的基礎(chǔ)上,可以采用普通RISC處理器編譯器的設(shè)計(jì)方法來(lái)進(jìn)行基于超長(zhǎng)指令字的專(zhuān)用指令集處理器的專(zhuān)用編譯器的設(shè)計(jì),從而大大提高其設(shè)計(jì)效率,極大地?cái)U(kuò)展了基于超長(zhǎng)指令字的專(zhuān)用指令集處理器的應(yīng)用領(lǐng)域。
權(quán)利要求
1.一種基于超長(zhǎng)指令字專(zhuān)用指令集處理器的匯編器設(shè)計(jì)方法,其特征在于,通過(guò)在匯編器中設(shè)計(jì)寄存器重命名和指令打包及調(diào)度的功能,實(shí)現(xiàn)匯編器的改進(jìn),提高指令級(jí)并行性,所述寄存器重命名是在檢測(cè)到指令中的寫(xiě)后寫(xiě)沖突之后,搜索一直處于空閑的寄存器替代指令中目的寄存器以消除寫(xiě)后寫(xiě)沖突;所述指令打包及調(diào)度設(shè)計(jì)同時(shí)執(zhí)行,匯編器在打包指令的同時(shí),檢測(cè)指令間的沖突,通過(guò)指令調(diào)度調(diào)整指令的執(zhí)行順序消除指令沖突,指令打包及調(diào)度設(shè)計(jì)包括程序分段、段內(nèi)指令打包及調(diào)度、段間指令沖突檢測(cè)及調(diào)整、跳轉(zhuǎn)指令標(biāo)號(hào)匹配、跳轉(zhuǎn)指令沖突檢測(cè)及調(diào)整和跳轉(zhuǎn)指令標(biāo)號(hào)重新匹配步驟; 步驟1:所述的程序分段根據(jù)跳轉(zhuǎn)指令和目標(biāo)標(biāo)號(hào)分段,程序分段既保證跳轉(zhuǎn)指令前后指令的執(zhí)行順序,又使段內(nèi)的指令調(diào)度不再受跳轉(zhuǎn)指令的限制; 步驟2:所述的段內(nèi)指令打包及調(diào)度將各程序段中位置相近并且不存在沖突的指令打包成一條超長(zhǎng)指令字“VLIW”指令;如果打包過(guò)程中存在指令沖突,跳過(guò)該沖突的指令繼續(xù)搜索,找到與搜索到指令都不存在沖突的指令,將搜索到指令插入到當(dāng)前位置并跟沖突之前的指令打包成一條VLIW指令;如果直到程序段結(jié)束也不存在沖突的指令,就在當(dāng)前位置插入空“NOP “指令; 步驟3:所述的段間指令沖突檢測(cè)及調(diào)整是檢測(cè)相鄰程序段首尾連接部分VLIW指令間的沖突,如果存在沖突,直接在段頭插入空“NOP” VLIff指令; 步驟4:所述的跳轉(zhuǎn)指令標(biāo)號(hào)匹配是將跳轉(zhuǎn)指令和目標(biāo)指令連接起來(lái),以便生成跳轉(zhuǎn)指令的二進(jìn)制代碼中的目標(biāo)地址或偏移量,及檢測(cè)跳轉(zhuǎn)指令與目標(biāo)指令的VLIW指令間沖關(guān); 步驟5:所述的跳轉(zhuǎn)指令沖突檢測(cè)及調(diào)整是檢測(cè)跳轉(zhuǎn)指令和目標(biāo)指令是否存在VLIW指令間的沖突,如果存在沖突,直接在目標(biāo)地址的指令前插入空“NOP “VLIW指令; 步驟6:所述的跳轉(zhuǎn)指令標(biāo)號(hào)重新匹配是在完成跳轉(zhuǎn)指令沖突檢測(cè)并調(diào)整之后,將跳轉(zhuǎn)指令和目標(biāo)指令重新連接起來(lái)。
2.如權(quán)利要求1所述的一種基于超長(zhǎng)指令字專(zhuān)用指令集處理器的匯編器設(shè)計(jì)方法,其特征在于,所述的寄存器重命名中搜尋空閑的寄存器是通過(guò)建立、更新和檢測(cè)寄存器狀態(tài)表實(shí)現(xiàn)的。
3.如權(quán)利要求1所述的一種基于超長(zhǎng)指令字專(zhuān)用指令集處理器的匯編器設(shè)計(jì)方法,其特征在于,所述的指令打包及調(diào)度階段打包過(guò)程中存在指令沖突包括VLIW指令內(nèi)沖突和VLIW指令間沖突,VLIW指令內(nèi)沖突包括寫(xiě)后寫(xiě)沖突、寫(xiě)后讀沖突和讀后寫(xiě)沖突;VLIW指令間的沖突跟微處理器硬件電路流水相關(guān);指令調(diào)度將程序段中不存在沖突的指令提前更改指令順序,提高指令級(jí)并行性。
全文摘要
本發(fā)明公開(kāi)了一種基于超長(zhǎng)指令字專(zhuān)用指令集處理器的匯編器設(shè)計(jì)方法,通過(guò)在匯編器中設(shè)計(jì)寄存器重命名和指令打包及調(diào)度的功能,實(shí)現(xiàn)匯編器的改進(jìn)。本發(fā)明寄存器重命名在檢測(cè)到指令中的寫(xiě)后寫(xiě)沖突后,搜索一直處于空閑的寄存器替代指令中目的寄存器以消除寫(xiě)后寫(xiě)沖突;所述指令打包及調(diào)度設(shè)計(jì)同時(shí)執(zhí)行,匯編器在打包指令的同時(shí),檢測(cè)指令間的沖突,通過(guò)指令調(diào)度調(diào)整指令的執(zhí)行順序消除指令沖突,指令打包及調(diào)度設(shè)計(jì)包括程序分段、段內(nèi)指令打包及調(diào)度、段間指令沖突檢測(cè)及調(diào)整、跳轉(zhuǎn)指令標(biāo)號(hào)匹配、跳轉(zhuǎn)指令沖突檢測(cè)及調(diào)整和跳轉(zhuǎn)指令標(biāo)號(hào)重新匹配步驟。本發(fā)明提高了匯編器指令級(jí)并行性,極大地?cái)U(kuò)展了基于超長(zhǎng)指令字的專(zhuān)用指令集處理器的應(yīng)用領(lǐng)域。
文檔編號(hào)G06F9/38GK103116485SQ201310054280
公開(kāi)日2013年5月22日 申請(qǐng)日期2013年1月30日 優(yōu)先權(quán)日2013年1月30日
發(fā)明者張犁, 宋云朋, 李森, 李甫, 石光明, 李欽鵬 申請(qǐng)人:西安電子科技大學(xué)