欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種基于超長指令字專用指令集處理器的匯編器設計方法

文檔序號:6399440閱讀:231來源:國知局
專利名稱:一種基于超長指令字專用指令集處理器的匯編器設計方法
技術領域
本發(fā)明屬于計算機微處理器技術領域,更進一步涉及到微處理器匯編器中的一種基于超長指令字結構的專用指令集處理器匯編器的設計方法,該方法設計的匯編器不僅可以完成傳統(tǒng)匯編器的基本功能,還可以實現編譯器部分的寄存器重命名和指令調度,提高指令級并行性。
背景技術
專用指令集處理器技術ASIP是在專用集成電路和現場可編程門陣列技術中發(fā)展出來的一種全新的電路設計技術。其核心思想是針對某一種類型的應用領域,開發(fā)出一套量身定做的專用的微處理器指令集以及實現該指令集的微處理器體系結構。采用專用指令集處理器技術具有以下優(yōu)點:以現場可編程門陣列為實現載體,而現場可編程門陣列具有可實現的電路規(guī)模大、片內資源豐富及可重配置等特性,特別是采用現場可編程門陣列可以相對容易地在單個芯片中集成多個專用指令集處理器處理單元,以專用指令集處理器陣列結構形式實現完全并行的高速信號處理,提高信號處理速度;另外,專用指令集處理器是可編程的,即在專用指令集處理器的電路基礎上,算法通過軟件編程就可以實現,因此在不需要重新設計電路的情況下可以方便的實現許多其他信號處理算法,例如快速傅里葉變換FFT、有限脈沖響應FIR(Finite Impulse Response)、無限脈沖響應 IIR(Infinite ImpulseResponse)、矩陣求逆等等,給設計帶來了很大的方便性和靈活性??傊?,專用指令集處理器系統(tǒng)既具有專用集成電路系統(tǒng)的性能優(yōu)勢,又具有數字信號處理的可編程性能,設計靈活方便,具有很好的升級性和移植性,在數字信號處理領域有了廣泛的應用。通過權衡速度、功耗、成本、靈活性等多個方面的設計約束,設計者可以定制專用指令集處理器以達到最好的平衡點,從而適應嵌入式系統(tǒng)的需要。因而專用指令集處理器在嵌入式領域具有良好的應用前景。專用指令集處理器設計需要面對多種類型的應用定制最優(yōu)的體系結構,應用多樣性和設計時效性是迫切需要解決的問題。超長指令字VLIW(Very Long Instruction Word)米用超長指令字控制的方法,利用指令級并行的概念形成的。所謂超長指令字,是把兩條或兩條以上可以并行執(zhí)行的指令打包成一條較長的指令字,該過程一般是由編譯軟件完成。當這些指令字從程序存儲器中取出放到處理器中時,它們被分解成幾條簡單的指令,這些簡單的指令被分派到一些獨立的功能單元去執(zhí)行。因此,多個功能單元并行工作,所有的功能單元共享共用一個寄存器文件。超長指令字VLIW處理器主要的優(yōu)點是顯式并行指令控制EPIC (Explicit ParallelismInstruction Control) 0由處理器的超長指令字顯式表明并行操縱,不需要微處理器內部復雜的指令調度,從而簡化了微處理器的控制部件,降低了硬件復雜度。這樣,VLIW處理器就需要一個高效的編譯軟件,其采用指令調度來打包可以并行執(zhí)行的指令。因此,如何設計一個高性能的編譯軟件是VLIW設計的難點所在。VLIW結構有效地開發(fā)指令級并行性(Instruction Level Parallelism, ILP),提高了處理器的性能。由于VLIW處理器具有面向數據流的處理和指令級并行性的優(yōu)勢,能有效地減少數字信號處理的復雜性,無疑將成為媒體處理器設計領域的主流設計思想。目前面向超長指令字VLIW處理器的匯編器只是實現了將匯編語句翻譯為目標代碼(VLIW指令字的二進制代碼)的工作,解決指令沖突的方法只是通過增加空VLIW指令來實現;而提高指令級并行的方法和技術都是由編譯器實現的,這樣不僅要設計匯編器,還要設計對應的編譯器。對于專用指令集處理器ASIP,這不僅增加了設計人員的工作量,還增加了設計的實現周期。

發(fā)明內容
本發(fā)明的目的在于克服上述現有技術的不足,提出了一種能夠提高指令級并行的面向基于超長指令字的專用指令集處理器ASIP的匯編器。本發(fā)明的技術方案是,通過在匯編器中設計寄存器重命名和指令打包及調度的功能,實現匯編器的改進,提高指令級并行性,所述寄存器重命名是在檢測到指令中的寫后寫沖突之后,搜索空閑的寄存器替代指令中目的寄存器以消除寫后寫沖突,搜尋空閑的寄存器是通過建立、更新和檢測寄存器狀態(tài)表實現的;所述指令打包及調度設計同時執(zhí)行,匯編器在打包指令的同時,檢測指令間的沖突,通過指令調度調整指令的執(zhí)行順序消除指令沖突以提高打包效率,指令打包及調度設計包括程序分段、段內指令打包及調度、段間指令沖突檢測及調整、跳轉指令標號匹配、跳轉指令沖突檢測及調整和跳轉指令標號重新匹配。程序分段根據跳轉指令和目標標號分段,程序分段既保證跳轉指令前后指令的執(zhí)行順序,又可以使段內的指令調度不再受跳轉指令的限制;段內指令打包及調度將各程序段中位置相近并且不存在沖突的指令打包成一條VLIff指令;如果打包過程中存在指令沖突,跳過該沖突的指令繼續(xù)搜索,找到與搜索到指令都不存在沖突的指令,將搜索到指令插入到當前位置并跟沖突之前的指令打包成一條VLIW指令;如果直到程序段結束也不存在沖突的指令,就在當前位置插入空“N0P “指令;段間指令沖突檢測及調整是檢測相鄰程序段首尾連接部分VLIW指令間的沖突,如果存在沖突,直接在段頭插入空(NOP) VLIW指令;跳轉指令標號匹配將跳轉指令和目標指令連接起來,以便生成跳轉指令的二進制代碼中的目標地址或偏移量,及檢測跳轉指令與目標指令的VLIW指令間沖突;跳轉指令沖突檢測及調整是檢測跳轉指令和目標指令是否存在VLIW指令間的沖突,如果存在沖突,直接在目標地址的指令前插入空(NOP) VLIW指令;跳轉指令標號重新匹配是在完成跳轉指令沖突檢測并調整之后,將跳轉指令和目標指令重新連接起來。本發(fā)明與現有技術相比具有以下優(yōu)點:第一、本發(fā)明利用寄存器重命名消除指令中的寫后寫沖突,利用指令調度調整指令的執(zhí)行順序以消除指令沖突,可以在匯編階段增加指令的并行度,提高指令級并行性。第二、在本發(fā)明的基礎上,可以采用普通RISC處理器編譯器的設計方法來進行基于超長指令字的專用指令集處理器的專用編譯器的設計,從而大大提高其設計效率,極大地擴展了基于超長指令字的專用指令集處理器的應用領域。第三、本發(fā)明運用專用指令集處理器ASIP中,對于某種特定的情況如快速傅里葉變換FFT、有限脈沖響應FIR濾波器,具有較強的針對性,可以更加有效的實現系統(tǒng)的功能。


圖1為本發(fā)明匯編器的寄存器重命名編程流程;圖2為本發(fā)明匯編器的指令打包及調度的整體流程;圖3為本發(fā)明匯編器的段內指令打包及調度的整體流程。
具體實施例方式本發(fā)明的技術方案是,在匯編器處理過程中設計寄存器重命名和指令打包及調度。該匯編器設計是在匯編器完成了傳統(tǒng)的詞法分析、語法分析、語義分析、出錯處理之后,目標代碼生成之前加入了可以提高指令級并行性的寄存器重命名和指令打包及調度。下面結合附圖對本發(fā)明做進一步的詳細描述。實施例1:寄存器重命名流程參照圖1,實施寄存器重命名需要進行指令寫后寫沖突檢測,如果發(fā)現了指令中存在寫后寫沖突,查看是否存在空閑的寄存器并判斷該空閑寄存器在替換這些指令中存在沖突的寄存器期間是否都是空閑的,如果存在空閑的寄存器并且一直處于空閑狀態(tài),就可以利用寄存器重命名來消除寫后寫沖突。某個寄存器從最后一次被調用到重新被賦值,這期間都是空閑的,可以被用來重命名。如何判斷一個寄存器是否空閑的呢?對于這個問題我們建立一個寄存器狀態(tài)表,把寄存器在不同的指令間的使用狀況進行分析了建立的一個狀態(tài)表。當碰到了需要重命名的寄存器即存在寫后寫沖突的寄存器時,就可以查找這個狀態(tài)表判斷是否存在空閑的寄存器。由于寄存器重命名會改變寄存器狀態(tài),因此在每次需要進行寄存器重命名之前,都需要更新這個寄存器狀態(tài)表。假設用“ I ”來表示寄存器忙碌,用“0”來表示寄存器空閑,可以用一組二進制數來表示可以重命名的寄存器。這樣,每行指令都對應一個寄存器狀態(tài),整個程序就形成了一個寄存器狀態(tài)表。通過檢測這個狀態(tài)表,就可以判斷是否存在空閑寄存器。例如:Id grO, #0 ;......— grO 忙碌 Iadd grl, grO ;......— grO 忙碌 IId gr2, grO ;......— grO 空閑 0Inot grO, gr3 ;由于在寄存器重命名時,需要替換的寄存器的位置不止一個,還需要替換指令中所有用到這個寄存器當前值(寄存器的值保持不變)的位置,所以空閑寄存器不僅在當前指令是空閑的,還要在所有替換寄存器的位置也是空閑的。假設超長指令字VLIW處理器一次可以運行四條指令,這就需要對某條指令后面的三條指令進行寫后寫沖突WAW的判斷。例如:Id grl, grO ;add gr2, grl ;Id grl, #2 ;
......
Id gr3, grl ;Id grl, gr4 ;第一條指令和第三條指令存在寫后寫沖突,掃描指令“Id grl, #2 ; ”之前的寄存器狀態(tài)表尋找空閑的寄存器比如gr30,并且這個寄存器一直處于空閑狀態(tài)。那么用寄存器gr30替換指令“Id grl, #2 ; ”和“Id gr3, grl ; ”之間所有的寄存器grl,而指令“ Id grl,gr4 ; ”中的寄存器grl不必替換,因為它已經被重新賦值了。實施例2:指令打包及調度設計方法在指令打包及調度過程中,跳轉指令前后指令的執(zhí)行順序是需要被保護的,這種保護主要通過下面兩種方式:在跳轉指令之前出現的指令不能被放到跳轉指令之后執(zhí)行;在跳轉指令之后出現的指令不能被放到跳轉指令之前執(zhí)行。對于跳轉指令前后指令執(zhí)行順序的保護,主要通過程序分段的方式,保證指令正確的執(zhí)行順序。整個程序的指令打包及調度的流程如圖2所示。首先對整個程序根據跳轉指令和目標標號進行分段,程序分段后段內的指令調度不再受跳轉指令的限制;然后對每個段內指令進行打包及調度,此時需要注意處理器VLIW指令內及VLIW指令間沖突和部分指令執(zhí)行順序,保證程序的功能不會改變;再檢測相鄰程序段首尾連接部分是否存在V LIff指令間的沖突(這根硬件實現有關),如果存在沖突,插入幾條空(NOP) VLIW指令消除沖突;再進行跳轉指令標號的匹配,將跳轉指令和目標指令連接起來,以便跳轉指令的二進制代碼中的目標地址或偏移量的生成和跳轉指令與目標指令沖突檢測;再檢測跳轉指令和目標指令是否存在V LIW指令間的沖突,如果存在沖突,同樣插入幾條空(NOP) VLIW指令消除沖突;最后進行跳轉指令標號的重新匹配,將消除沖突之后的VLIW指令程序中的跳轉指令和目標指令重新匹配,這個過程和上面的跳轉指令標號的匹配是相同的。步驟1:把用戶編寫的整個功能程序分成多個段落,對每個段內指令進行打包、沖突檢測和指令調度。將程序分段的目的是程序分段后段內的指令調度不再受跳轉指令的限制。程序分段的方法是根據跳轉指令和目標標號把程序分開。需要注意的是,不同的指令和目標標號分段的方式是不同。例如條件跳轉指令和循環(huán)指令跟它前面的指令分到同一個段中,程序暫停指令idle要單獨分到一個段中,循環(huán)指令對應的目標指令要跟它前面的指令分到同一個段中,其它跳轉指令對應的目標指令要跟它前面的指令分到不同的段中。步驟2:段內的指令打包及調度是在程序分段之后,在每個段內根據處理器的需要將若干條指令打包成一條VLIW指令并且不存在打包沖突,即VLIW指令內是和VLIW指令間都沒有沖突。VLIW指令內沖突包括寫后寫沖突或寫后讀沖突;VLIW指令間的沖突跟微處理器硬件電路流水相關,某種指令操作流水級數越多受到該指令影響的VLIW指令就越多,例如乘法操作是3級流水,包含乘法操作的VLIW指令之后的兩條VLIW指令都不能使用該乘法操作的結果。段內指令打包及調度流程如圖3所示。段內的指令打包及調度的主要操作是將所有的指令都存放在一個雙向的指令鏈表中,按順序搜索指令,將各程序段中位置相近并且不存在沖突的指令打包成一條VLIW指令;如果打包過程中存在指令沖突,跳過該沖突的指令繼續(xù)搜索找到與之前所有指令都不存在沖突的指令,將其插入的當前位置并跟沖突之前的指令打包成一條VLIW指令;如果直到程序段結束都也不存在沖突的指令,就在當前位置插入空(NOP)指令。其中,所謂的與之前所有指令都不存在沖突的指令是指該指令不僅不存在打包沖突還要與它之前所有的未打包的指令不存在數據沖突即寫后寫沖突、寫后讀沖突和讀后寫沖突。VLIW指令間的沖突跟微處理器硬件電路流水相關;指令調度將程序段中不存在沖突的指令提前更改指令順序,提高指令級并行性。步驟3:段間指令沖突檢測是檢測相鄰程序段首尾連接部分VLIW指令間的沖突,如果存在VLIW指令間沖突,根據沖突的不同類型插入若干條空(NOP) VLIW指令。這個過程不需要指令調度,這是由于所有的VLIW指令已經形成,倘若將各個VLIW指令進行沖突檢測和調度,勢必會影響本來已經形成VLIW指令順序,可能會產生新的沖突。所述的段間指令沖突檢測及調整階段插入的空“NOP "VLIff指令數量與硬件流水級數相關。步驟4:跳轉指令的二進制代碼包含了目標地址或偏移量,必須檢測出跳轉指令和目標標號所在的位置。匯編器會把源程序中的跳轉指令和目標標號所在的行號信息記錄下來,然后可以根據記錄下來的信息查找出這些的跳轉指令和目標標號的行號,并把它們的標號進行逐一匹配。這樣,我們就可以得到跳轉指令和目標標號在打包后VLIW指令程序中的行號,進而就可以得到跳轉的目標地址或偏移量信息。這個行號的匹配不僅在段間沖突檢查和調整之后需要執(zhí)行,還需要在跳轉指令沖突檢查和調整之后重新進行匹配,因為跳轉指令和目標地址的指令之間也可能存在沖突,需要加入若干條空(NOP)VLIW指令。步驟5:由于跳轉指令和目標指令之間也可能存在沖突,在上一個環(huán)節(jié)已經得到了在VLIW指令程序跳轉指令和目標指令的行號,可以根據這些信息檢查跳轉指令和目標指令是否存在VLIW指令間的沖突。這里的沖突檢查過程和段間沖突檢查過程相似,不同的只是檢查程序跳轉指令和目的標號所在的行的指令是否存在沖突。步驟6:跳轉指令標號重新匹配是在完成跳轉指令沖突檢測并調整之后,將跳轉指令和目標指令重新連接起來,其過程與步驟4相同。經過對寄存器重命名和指令打包及調度的設計,在匯編階段增加指令的并行度,提高指令級并行性;在本匯編器的基礎上,可以采用普通RISC處理器編譯器的設計方法來進行基于超長指令字的專用指令集處理器的專用編譯器的設計,從而大大提高其設計效率,極大地擴展了基于超長指令字的專用指令集處理器的應用領域。
權利要求
1.一種基于超長指令字專用指令集處理器的匯編器設計方法,其特征在于,通過在匯編器中設計寄存器重命名和指令打包及調度的功能,實現匯編器的改進,提高指令級并行性,所述寄存器重命名是在檢測到指令中的寫后寫沖突之后,搜索一直處于空閑的寄存器替代指令中目的寄存器以消除寫后寫沖突;所述指令打包及調度設計同時執(zhí)行,匯編器在打包指令的同時,檢測指令間的沖突,通過指令調度調整指令的執(zhí)行順序消除指令沖突,指令打包及調度設計包括程序分段、段內指令打包及調度、段間指令沖突檢測及調整、跳轉指令標號匹配、跳轉指令沖突檢測及調整和跳轉指令標號重新匹配步驟; 步驟1:所述的程序分段根據跳轉指令和目標標號分段,程序分段既保證跳轉指令前后指令的執(zhí)行順序,又使段內的指令調度不再受跳轉指令的限制; 步驟2:所述的段內指令打包及調度將各程序段中位置相近并且不存在沖突的指令打包成一條超長指令字“VLIW”指令;如果打包過程中存在指令沖突,跳過該沖突的指令繼續(xù)搜索,找到與搜索到指令都不存在沖突的指令,將搜索到指令插入到當前位置并跟沖突之前的指令打包成一條VLIW指令;如果直到程序段結束也不存在沖突的指令,就在當前位置插入空“NOP “指令; 步驟3:所述的段間指令沖突檢測及調整是檢測相鄰程序段首尾連接部分VLIW指令間的沖突,如果存在沖突,直接在段頭插入空“NOP” VLIff指令; 步驟4:所述的跳轉指令標號匹配是將跳轉指令和目標指令連接起來,以便生成跳轉指令的二進制代碼中的目標地址或偏移量,及檢測跳轉指令與目標指令的VLIW指令間沖關; 步驟5:所述的跳轉指令沖突檢測及調整是檢測跳轉指令和目標指令是否存在VLIW指令間的沖突,如果存在沖突,直接在目標地址的指令前插入空“NOP “VLIW指令; 步驟6:所述的跳轉指令標號重新匹配是在完成跳轉指令沖突檢測并調整之后,將跳轉指令和目標指令重新連接起來。
2.如權利要求1所述的一種基于超長指令字專用指令集處理器的匯編器設計方法,其特征在于,所述的寄存器重命名中搜尋空閑的寄存器是通過建立、更新和檢測寄存器狀態(tài)表實現的。
3.如權利要求1所述的一種基于超長指令字專用指令集處理器的匯編器設計方法,其特征在于,所述的指令打包及調度階段打包過程中存在指令沖突包括VLIW指令內沖突和VLIW指令間沖突,VLIW指令內沖突包括寫后寫沖突、寫后讀沖突和讀后寫沖突;VLIW指令間的沖突跟微處理器硬件電路流水相關;指令調度將程序段中不存在沖突的指令提前更改指令順序,提高指令級并行性。
全文摘要
本發(fā)明公開了一種基于超長指令字專用指令集處理器的匯編器設計方法,通過在匯編器中設計寄存器重命名和指令打包及調度的功能,實現匯編器的改進。本發(fā)明寄存器重命名在檢測到指令中的寫后寫沖突后,搜索一直處于空閑的寄存器替代指令中目的寄存器以消除寫后寫沖突;所述指令打包及調度設計同時執(zhí)行,匯編器在打包指令的同時,檢測指令間的沖突,通過指令調度調整指令的執(zhí)行順序消除指令沖突,指令打包及調度設計包括程序分段、段內指令打包及調度、段間指令沖突檢測及調整、跳轉指令標號匹配、跳轉指令沖突檢測及調整和跳轉指令標號重新匹配步驟。本發(fā)明提高了匯編器指令級并行性,極大地擴展了基于超長指令字的專用指令集處理器的應用領域。
文檔編號G06F9/38GK103116485SQ201310054280
公開日2013年5月22日 申請日期2013年1月30日 優(yōu)先權日2013年1月30日
發(fā)明者張犁, 宋云朋, 李森, 李甫, 石光明, 李欽鵬 申請人:西安電子科技大學
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
桐城市| 凤翔县| 闵行区| 邯郸市| 名山县| 九龙城区| 读书| 都江堰市| 新疆| 华坪县| 靖宇县| 宜兴市| 华容县| 安顺市| 韶关市| 根河市| 泾阳县| 翼城县| 哈密市| 广丰县| 紫阳县| 阿城市| 尉氏县| 民乐县| 琼中| 北辰区| 平陆县| 郎溪县| 苍梧县| 鹤山市| 靖宇县| 同仁县| 平原县| 锡林郭勒盟| 天祝| 鹰潭市| 温泉县| 泾源县| 鹿邑县| 靖宇县| 盖州市|