智能匯編開發(fā)工具的制作方法
【專利摘要】本發(fā)明涉及開發(fā)工具領(lǐng)域,其公開了一種智能匯編開發(fā)工具,包括匯編文件存儲(chǔ)單元IASM-File,數(shù)據(jù)分析引擎單元IASM-Engine和圖形化操作界面IASM-GUI。本發(fā)明的有益效果是:本智能匯編開發(fā)工具非常容易上手,降低了對(duì)VLIW匯編程序員的要求,并支持開發(fā)過程中的開發(fā)經(jīng)驗(yàn)積累;同時(shí),該工具也非常高效,主要的編程過程均可通過鼠標(biāo)的選擇來完成,大大降低了鍵盤的輸入量,不僅使VLIW編程更加輕松快捷,而且不容易出錯(cuò)。
【專利說明】智能匯編開發(fā)工具【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及開發(fā)工具領(lǐng)域,尤其涉及一種智能匯編開發(fā)工具。
【背景技術(shù)】
[0002]基于VLIW架構(gòu)的處理器,尤其是DSP,能夠以極高的精度穩(wěn)定地執(zhí)行各種數(shù)學(xué)運(yùn)算,使之成為實(shí)時(shí)處理應(yīng)用領(lǐng)域的理想解決方案。再加上其可編程性帶來的靈活性和可擴(kuò)展性,使VLIW技術(shù)在基帶、通信、高分辨率影像、數(shù)字音頻等眾多應(yīng)用領(lǐng)域中被廣泛采用。
[0003]VLIff架構(gòu)中有多個(gè)功能單元,每個(gè)功能單元均可單獨(dú)執(zhí)行一條指令,因此在一個(gè)機(jī)器周期中可以有多條指令同時(shí)執(zhí)行,這就是指令級(jí)并行(ILP)。VLIW架構(gòu)主要通過ILP來提升其計(jì)算性能。VLIff的ILP由軟件來完成,因此軟件決定了一個(gè)VLIW系統(tǒng)在運(yùn)行時(shí)的真實(shí)性能。如何充分發(fā)掘出軟件中的ILP,成為基于VLIW架構(gòu)應(yīng)用中的關(guān)鍵任務(wù)。
[0004]發(fā)掘軟件中的ILP,目前主要依賴VLIW的編譯器來完成,因此能否設(shè)計(jì)出一款足夠聰明的編譯器,成為一項(xiàng)巨大的挑戰(zhàn)。但由于應(yīng)用場(chǎng)景千差萬別,且從高級(jí)語言中很難獲得足夠的信息,所以VLIW編譯器普遍顯得不夠智能,因此在一些關(guān)鍵處理中,不得不訴諸于手動(dòng)匯編的方式,來進(jìn)一步發(fā)掘出VLIW處理器的計(jì)算性能。
[0005]相對(duì)于編譯器,手動(dòng)匯編優(yōu)化后的程序,在執(zhí)行效率上往往可以獲得大幅的提升,有時(shí)甚至可以提升好幾倍。然而,要開始手動(dòng)編寫VLIW匯編程序且不是一件容易的事情,它要求程序員不僅要深刻理解VLIW處理器的架構(gòu),還要對(duì)動(dòng)輒數(shù)百條的匯編指令非常熟悉。而且,眾所周知手動(dòng)編寫VLIW匯編程序是一項(xiàng)艱巨、耗時(shí)、且容易犯錯(cuò)的任務(wù)。此外,文本形式VLIW匯編程序的不直觀,使得對(duì)它的維護(hù)也非常困難。因此,需要新的方法和裝置來使VLIW匯編開發(fā)更加容易、高效、可維護(hù)和減少出錯(cuò)。
【發(fā)明內(nèi)容】
[0006]為了解決現(xiàn)有技術(shù)中的問題,本發(fā)明提供了一種智能匯編開發(fā)工具,解決目前VLIff架構(gòu)處理器下匯編編程困難的問題。
[0007]本發(fā)明提供了一種智能匯編開發(fā)工具,包括匯編文件存儲(chǔ)單元IASM-File,數(shù)據(jù)分析引擎單元IASM-Engine和圖形化操作界面IASM-GUI ;所述數(shù)據(jù)分析引擎單元IASM-Engine內(nèi)部設(shè)有所支持處理器平臺(tái)的指令集數(shù)據(jù)庫(kù),對(duì)編程操作進(jìn)行各種底層的分析和規(guī)則檢查,并反饋各種錯(cuò)誤或資源限制;所述圖形化操作界面IASM-GUI通過圖形化二維網(wǎng)格的基本方式顯示VLIW匯編程序。
[0008]作為本發(fā)明的進(jìn)一步改進(jìn),所述匯編文件存儲(chǔ)單元IASM-File存儲(chǔ)匯編代碼以及指令間的相關(guān)性和寄存器的狀態(tài)變化信息。
[0009]作為本發(fā)明的進(jìn)一步改進(jìn),所述圖形化操作界面IASM-GUI標(biāo)識(shí)匯編指令間的功能相關(guān)性并直觀顯示指令與其寄存器操作數(shù)間的關(guān)系,并通過模板文件的方式支持匯編程序的模塊化開發(fā)。所謂功能相關(guān)性指的是一組匯編指令共同實(shí)現(xiàn)一個(gè)功能目標(biāo)。
[0010]作為本發(fā)明的進(jìn)一步改進(jìn),所述圖形化操作界面IASM-GUI設(shè)有滑動(dòng)滾動(dòng)區(qū)域,所述滑動(dòng)滾動(dòng)區(qū)域顯示匯編程序的整體狀態(tài)并實(shí)現(xiàn)定位。
[0011]作為本發(fā)明的進(jìn)一步改進(jìn),所述匯編文件存儲(chǔ)單元IASM-File存儲(chǔ)中間過程記錄信息以提升程序的可讀性。
[0012]作為本發(fā)明的進(jìn)一步改進(jìn),所述圖形化操作界面IASM-GUI設(shè)有顯性提示模塊,所述顯性提示模塊根據(jù)輸入信息自動(dòng)提示編程建議和指令命令。
[0013]作為本發(fā)明的進(jìn)一步改進(jìn),所述圖形化操作界面IASM-GUI設(shè)有移動(dòng)、復(fù)制和交換操作模塊,所述移動(dòng)、復(fù)制和交換操作模塊通過所述數(shù)據(jù)分析引擎單元IASM-Engine進(jìn)行直觀化的代碼編輯和寄存器內(nèi)容的編輯。
[0014]作為本發(fā)明的進(jìn)一步改進(jìn),所述圖形化操作界面IASM-GUI設(shè)有功能單元的分組管理模塊以降低對(duì)顯示設(shè)備的要求。
[0015]作為本發(fā)明的進(jìn)一步改進(jìn),所述數(shù)據(jù)分析引擎單元IASM-Engine自動(dòng)將IASM匯編文件自動(dòng)轉(zhuǎn)換為某個(gè)VLIW目標(biāo)平臺(tái)的標(biāo)準(zhǔn)匯編文件并按以下兩種方式生成,一種為生成一個(gè)全新的目標(biāo)匯編文件;另外一種為將生成的匯編代碼內(nèi)容插入到目標(biāo)匯編文件中一對(duì)特定的標(biāo)記點(diǎn)之間,并保持其它內(nèi)容不變。
[0016]作為本發(fā)明的進(jìn)一步改進(jìn),所述圖形化操作界面IASM-⑶I設(shè)有Unit模式、Reg模式和Edit模式三種顯示模式,Unit模式僅顯示每個(gè)周期的功能單元狀態(tài);所述Reg模式僅顯示每個(gè)周期的寄存器狀態(tài);Edit模式同時(shí)顯示每個(gè)周期的功能單元和寄存器狀態(tài),并能直觀地顯示出匯編指令與其寄存器操作數(shù)間的相關(guān)性,該模式下還有一個(gè)特殊的編輯周期,能以非常詳細(xì)的方式顯示出該周期匯編指令的各方面信息,主要的編程操作通過這個(gè)編輯周期完成。
[0017]作為本發(fā)明的進(jìn)一步改進(jìn),所述圖形化操作界面IASM-GUI能同時(shí)顯示匯編程序及相關(guān)的高級(jí)語言程序代碼,并顯示匯編指令和高級(jí)語言程序代碼之間的對(duì)應(yīng)關(guān)系。
[0018]本發(fā)明的有益效果是:本智能匯編開發(fā)工具非常容易上手,降低了對(duì)VLIW匯編程序員的要求,并支持開發(fā)過程中的開發(fā)經(jīng)驗(yàn)積累;同時(shí),該工具也非常高效,主要的編程過程均可通過鼠標(biāo)的選擇來完成,大大降低了鍵盤的輸入量,不僅使VLIW編程更加輕松快捷,而且不容易出錯(cuò)。
[0019]【【專利附圖】
【附圖說明】】
圖1說明一般的VLIW軟件開發(fā)流程;
圖2說明添加了 IASM系統(tǒng)的VLIW軟件開發(fā)流程;
圖3說明IASM系統(tǒng)的架構(gòu)框圖;
圖4是一個(gè)VLIW core內(nèi)部結(jié)構(gòu)的簡(jiǎn)要示例;
圖5說明TI C6000指令集中ADD指令在各功能單元中的不同語法格式;
圖6以偽代碼的方式說明IASM-File的關(guān)鍵定義;
圖7以偽代碼的方式說明IASM-File中對(duì)一個(gè)機(jī)器周期的關(guān)鍵定義;
圖8以偽代碼的方式說明IASM-File中對(duì)一個(gè)功能單元的關(guān)鍵定義;
圖9以偽代碼的方式說明IASM-File中對(duì)某個(gè)周期寄存器狀態(tài)的關(guān)鍵定義;
圖10說明如何將VLIW匯編程序的相關(guān)開發(fā)和設(shè)計(jì)文檔保存到IASM-File中;
圖11說明如何打開和編輯保存在IASM-File中的相關(guān)開發(fā)和設(shè)計(jì)文檔;
圖12說明IASM-⑶I以Unit模式對(duì)IASM-File進(jìn)行顯示;圖13說明IASM-GUI以Reg模式對(duì)IASM-File進(jìn)行顯示;
圖14說明IASM-⑶I以Edit模式對(duì)IASM-File進(jìn)行顯示;
圖15說明Ghost類型周期的顯示方式;
圖16說明專用滾動(dòng)條的基本功能;
圖17說明專用滾動(dòng)條對(duì)程序內(nèi)容的管理;
圖18說明指令選擇窗口的一個(gè)實(shí)施方案;
圖19說明指令選擇窗口中的指令詳細(xì)數(shù)據(jù)顯示方式;
圖20說明Edit模式下編輯周期中匯編指令詳細(xì)視圖的一個(gè)典型例子;
圖21說明如何編輯一條匯編指令;
圖22說明如何編輯一條匯編指令的寄存器操作數(shù);
圖23說明如何為一條匯編指令的目的寄存器變量命名;
圖24說明一條匯編指令輸入寄存器操作數(shù)的釋放操作;
圖25說明一條匯編指令可采用的注釋方式;
圖26說明匯編指令的多行顯示模式;
圖27說明功能單元分組及其簡(jiǎn) 潔顯示模式;
圖28說明IASM系統(tǒng)下定義的指令移動(dòng)操作;
圖29說明IASM系統(tǒng)下定義的指令拷貝操作;
圖30說明IASM系統(tǒng)下定義的指令交換操作;
圖31說明如何對(duì)發(fā)生異常的匯編指令進(jìn)行提示;
圖32說明如何確定普通IASM程序的輸入寄存器參數(shù);
圖33說明如何確定模板IASM程序的輸入寄存器參數(shù);
圖34說明如何插入一個(gè)模板IASM-File ;
圖35說明如何將一條指令插入到另一個(gè)IASM-File中;
圖36說明完成模板IASM-File插入后的狀態(tài);
圖37說明在一個(gè)實(shí)施方案中IASM系統(tǒng)如何與第三方開發(fā)環(huán)境協(xié)作;
圖38說明在上述實(shí)施方案中IASM如何快速定位到需要修改的匯編指令;
圖39說明在另一個(gè)實(shí)施方案中IASM系統(tǒng)如何集成到第三方開發(fā)環(huán)境中。
[0020]【【具體實(shí)施方式】】
下面結(jié)合【專利附圖】
【附圖說明】及【具體實(shí)施方式】對(duì)本發(fā)明進(jìn)一步說明。
[0021]本發(fā)明公開了一種智能匯編開發(fā)工具,尤其適用于VLIW架構(gòu)的處理器。這個(gè)智能匯編開發(fā)工具(IASM)包含了一個(gè)新的匯編文件存儲(chǔ)單元(IASM-File)、一個(gè)數(shù)據(jù)分析引擎單元(IASM-Engine)、一個(gè)圖形化的用戶界面(IASM-GUI)。該智能匯編開發(fā)工具通過服務(wù)器、個(gè)人電腦運(yùn)行,不同于傳統(tǒng)的文本匯編文件,這個(gè)新的匯編文件存儲(chǔ)單元針對(duì)VLIW架構(gòu)進(jìn)行設(shè)計(jì),大幅提高了 VLIW匯編程序的可讀性和可維護(hù)性。此外,它也支持模塊化的開發(fā),使得大型的VLIW匯編程序開發(fā)變得容易。數(shù)據(jù)分析引擎內(nèi)部包含了所支持處理器平臺(tái)的指令集數(shù)據(jù)庫(kù),可對(duì)編程操作進(jìn)行各種底層的分析和規(guī)則檢查,及時(shí)向編程者提供各種錯(cuò)誤或資源限制的反饋,以及更好的編程建議,幫助編程者提高程序的指令級(jí)并行度(ILP)0它不僅降低了開發(fā)難度,還確保了開發(fā)質(zhì)量,并可將IASM-File自動(dòng)轉(zhuǎn)換成可被各處理器平臺(tái)識(shí)別的標(biāo)準(zhǔn)匯編文件 。本裝置還包含一個(gè)用戶友好的開發(fā)工具,它將IASM-File的內(nèi)容以圖形化的方式進(jìn)行呈現(xiàn),并允許編程者以直觀、高效的方式進(jìn)行操作,使VLIW匯編程序開發(fā)這項(xiàng)原本艱苦、耗時(shí)的工作變得輕松和高效。隨后將進(jìn)一步說明這三個(gè)方面的主要設(shè)計(jì),以及本發(fā)明如何與第三方開發(fā)環(huán)境進(jìn)行集成。
[0022]IASM-File的主要內(nèi)容為以機(jī)器周期為基本單位組織的匯編代碼,每個(gè)機(jī)器周期包含該周期所有功能單元和寄存器的狀態(tài)。每個(gè)功能單元中均可包含一條匯編指令,并保存了該匯編指令與其寄存器操作數(shù)間的相關(guān)性。功能上相關(guān)的匯編指令可被設(shè)置為屬于同一個(gè)代碼模塊,IASM-GUI就會(huì)以同一個(gè)顏色來顯示這些指令。
[0023]IASM-File中可以包含該匯編程序?qū)?yīng)的高級(jí)語言代碼,例如C或C++的代碼。另夕卜,還能以二進(jìn)制數(shù)據(jù)的方式包含其他相關(guān)的開發(fā)設(shè)計(jì)文檔。這樣,該VLIW匯編程序相關(guān)的所有內(nèi)容均保存在一個(gè)獨(dú)立文件中,管理起來更加容易。
[0024]每條匯編指令均支持豐富的注釋方式,除了可添加文本和圖片的注釋外,還可指定該匯編指令與完整高級(jí)語言程序中相關(guān)代碼的對(duì)應(yīng)關(guān)系。設(shè)置了這種對(duì)應(yīng)關(guān)系后,一旦用戶選中了該匯編指令,IASM-GUI就會(huì)在專門的高級(jí)語言窗口中高亮顯示相關(guān)代碼。
[0025]IASM-File中定義了一種特殊的Ghost周期,它的數(shù)據(jù)格式和普通周期完全一致,但不會(huì)對(duì)目標(biāo)平臺(tái)匯編文件的生成造成任何影響。在一些優(yōu)化情景下,尤其是高度優(yōu)化的循環(huán)體代碼,這種Ghost周期保持了匯編程序語義的完整性。
[0026]IASM-File 有兩種類型,普通 IASM-File 和模板 IASM-File。模板 IASM-File 允許在沒有明確輸入?yún)?shù)的情況下開始編寫匯編程序,并能非常方便地將其內(nèi)容插入到另一個(gè)IASM-File中。模板IASM-File對(duì)模塊化的匯編開發(fā)提供了支持,使得大型的VLIW匯編程序開發(fā)變得容易。此外,模板IASM-File還可提高匯編代碼的重用率。
[0027]IASM-Engine內(nèi)部包含了所支持處理器平臺(tái)的指令集和VLIW架構(gòu)相關(guān)信息的數(shù)據(jù)庫(kù),能基于這些數(shù)據(jù)庫(kù)對(duì)編程操作進(jìn)行各種智能的數(shù)據(jù)分析和規(guī)則檢查,并及時(shí)向編程者反饋。VLIW匯編編程之所以困難,首先是因?yàn)槎鄠€(gè)功能單元同時(shí)工作,且每個(gè)功能單元有著不同的功能定義。編程者不僅要熟練掌握每條指令的功能,還要知道它可以工作在那些單元,甚至同一條指令在不同功能單元上執(zhí)行的語法格式也可能不同。其次,指令的執(zhí)行時(shí)間也常常不同,有些指令需要額外的周期來完成操作,這些額外的周期通常被稱作延遲槽。因此在編程的過程中,程序員還需要隨時(shí)關(guān)注在那個(gè)周期可以獲得需要的數(shù)據(jù)。再者,這里還可能有數(shù)十條與VLIW架構(gòu)相關(guān)的資源限制條件。所有這些因素加在一起,導(dǎo)致手動(dòng)編寫VLIW匯編程序成為一項(xiàng)艱巨、耗時(shí)、且容易犯錯(cuò)的任務(wù)。
[0028]IASM-Engine會(huì)在輸入一條指令時(shí),根據(jù)當(dāng)前的目標(biāo)處理器平臺(tái),自動(dòng)篩選出該單元可用的指令及其語法格式供編程者選擇。
[0029]在編輯一條匯編指令時(shí),IASM-Engine會(huì)對(duì)該指令的每一個(gè)操作數(shù)進(jìn)行分析,只列出可用的內(nèi)容。當(dāng)編程者需要某一個(gè)操作數(shù)而它不可獲得時(shí),能很容易地知道這是什么原因引起的,從而做出相應(yīng)的調(diào)整。對(duì)于每一次編輯操作,IASM-Engine都會(huì)檢查相應(yīng)的規(guī)則,如果違反了某條規(guī)則,會(huì)及時(shí)地反饋給編程者。
[0030]IASM-Engine還會(huì)根據(jù)輸入提供一些編程建議,以幫助提高匯編程序的執(zhí)行效率。例如編程者依次編寫了指令A(yù)和B,而這里有一條指令C可以同時(shí)完成前兩者的功能,IASM-Engine會(huì)及時(shí)給出用指令C替代A和B的建議。
[0031]IASM-Engine能按以下兩種方式之一將IASM匯編文件自動(dòng)轉(zhuǎn)換為某個(gè)VLIW目標(biāo)平臺(tái)的標(biāo)準(zhǔn)匯編文件:第一,生成一個(gè)全新的目標(biāo)匯編文件;第二,將生成的匯編代碼內(nèi)容插入到目標(biāo)匯編文件中一對(duì)特定的標(biāo)記點(diǎn)之間,并保持其他內(nèi)容不變。
[0032]IASM-GUI是一個(gè)用戶友好的圖形化開發(fā)工具,針對(duì)VLIW匯編的顯示和操作進(jìn)行了許多創(chuàng)新的設(shè)計(jì)。IASM-GUI將IASM-File的內(nèi)容以圖形化的方式進(jìn)行呈現(xiàn),并允許編程者以直觀、高效的方式進(jìn)行操作,使VLIW匯編程序開發(fā)這項(xiàng)原本艱苦、耗時(shí)的工作變得輕松和高效。
[0033]IASM-GUI以二維網(wǎng)格的圖形化方式對(duì)VLIW匯編程序進(jìn)行顯示,這種顯示方式非常直觀地反映了 VLIW處理器的架構(gòu)。進(jìn)一步的,為了方便從不同的角度觀察匯編程序,編程者隨時(shí)可在下列三種顯示方式之間進(jìn)行切換。
[0034]Unit模式僅顯示每個(gè)周期的功能單元狀態(tài)。在這個(gè)簡(jiǎn)潔的顯示模式下,編程者能直觀地看到VLIW匯編程序的ILP,即哪些單元已經(jīng)寫了指令,而哪些單元仍然閑置。
[0035]Reg模式僅顯示每個(gè)周期的寄存器狀態(tài)。編程者可以在此模式下清晰地看到整個(gè)寄存器文件的使用狀態(tài),從而更好的規(guī)劃寄存器的分配。
[0036]Edit模式同時(shí)顯示每個(gè)周期的功能單元和寄存器狀態(tài),并能直觀地顯示出匯編指令與其寄存器操作數(shù)間的相關(guān)性。本模式下還有一個(gè)特殊的編輯周期,能以非常詳細(xì)的方式顯示出該周期匯編指令的各方面信息,主要的編程操作都是在這個(gè)特殊的周期完成的。
[0037]每個(gè)編寫了匯編指令的功能單元都會(huì)根據(jù)該指令所屬的代碼模塊被賦予一個(gè)特定顏色,每個(gè)包含有效數(shù)據(jù)的寄存器也會(huì)被賦予一個(gè)顏色,它的顏色就是產(chǎn)生該寄存器變量的匯編指令的顏色。每條新寫的匯編指令都會(huì)被自動(dòng)賦予當(dāng)前代碼模塊的顏色。這些顏色使得指令與指令之間,以及指令與寄存器之間的關(guān)系一目了然。
[0038]對(duì)于特殊的Ghost類型周期,IASM-GUI會(huì)首先正常顯示該周期內(nèi)容,然后在其上覆蓋一層半透明的特定顏色。這樣編程者就能很直觀地區(qū)分Ghost周期和普通周期。
[0039]IASM-GUI中針對(duì)VLIW匯編程序設(shè)計(jì)了一種專門的滾動(dòng)條,相對(duì)于普通滾動(dòng)條,它能更迅速地定位到想要查看的周期,并能夠非常直觀地了解到匯編程序的整體狀態(tài)。
[0040]需要編寫一條匯編指令的時(shí)候,IASM-GUI會(huì)彈出一個(gè)指令選擇窗口,根據(jù)當(dāng)前的處理器平臺(tái)和選擇的功能單元,同時(shí)以文本和功能示意圖的形式,顯示出可用的指令列表。在選擇了某條指令之后,該窗口會(huì)進(jìn)一步顯示該指令的詳細(xì)信息,包括該指令可用的語法格式列表。一旦選擇了某條具體的指令語法格式,IASM-GUI會(huì)自動(dòng)切換到Edit模式,以便繼續(xù)完成該指令的編輯。此外,還可以在指令選擇窗口中記錄指令的使用經(jīng)驗(yàn),當(dāng)下一次使用到同一條指令時(shí),記錄的開發(fā)經(jīng)驗(yàn)會(huì)自動(dòng)呈現(xiàn)出來,避免多次犯同一個(gè)錯(cuò)誤。
[0041]編輯一條匯編指令時(shí),其所有輸入操作數(shù)都是通過選擇來完成的,IASM-GUI會(huì)根據(jù)不同的輸入操作數(shù)類型,提供不同的選擇方式。所有列出的被選擇內(nèi)容,都是經(jīng)過IASM-Engine篩選的。這種編輯方式不僅操作起來輕松快捷,而且不會(huì)出現(xiàn)錯(cuò)誤。
[0042]編輯一條匯編指令時(shí),唯一可能需要鍵盤輸入的,就是為本指令的輸出寄存器操作數(shù)取一個(gè)變量名。
[0043]IASM-GUI中有 Iv聞級(jí)語目顯不窗,可以在其中顯不VLIW匯編程序?qū)?yīng)的聞級(jí)語言代碼,方便對(duì)匯編代碼的理解,可以大量減少對(duì)匯編指令的零碎注釋。
[0044]當(dāng)需要為一條匯編指令添加注釋的時(shí)候,IASM-GUI會(huì)彈出一個(gè)注釋編輯對(duì)話框。通過這個(gè)對(duì)話框,可以輸入文本注釋,選擇一個(gè)圖片作為注釋,或通過設(shè)置與高級(jí)語言代碼塊的對(duì)應(yīng)關(guān)系來進(jìn)行注釋。豐富的注釋方式確保了 VLIW匯編程序的可讀性和可維護(hù)性。
[0045]在IASM-GUI中,可以方便地復(fù)制、移動(dòng)匯編指令,也可以相互交換兩條匯編指令的位置。在進(jìn)行這些操作時(shí),IASM-GUI都會(huì)提示出該操作可用的備選位置。
[0046]由于IASM-GUI在一行中并行顯示一個(gè)周期中的所有功能單元,有時(shí)會(huì)出現(xiàn)顯示器分辨率不夠的情況。IASM-GUI使用了以下獨(dú)特方式來解決這個(gè)問題:第一,將功能單元分組,僅將當(dāng)前關(guān)注的一組單元按正常方式顯示,而把其他單元按簡(jiǎn)潔方式顯示。第二,當(dāng)匯編指令的長(zhǎng)度超過設(shè)定值時(shí),拆分成多行進(jìn)行顯示。第三,在除了滾動(dòng)條的整個(gè)IASM-GUI顯示界面中,均可通過按下鼠標(biāo)左鍵拖動(dòng)的方式移動(dòng)整個(gè)程序,因此即使有一部分界面在顯示區(qū)之外,也可方便地控制。
[0047]IASM-GUI能方便地將一個(gè)模板IASM-File的匯編指令插入到當(dāng)前IASM-File中。插入模板IASM-File時(shí),IASM-GUI會(huì)彈出一個(gè)顯示模板IASM-File內(nèi)容的窗體。用戶選擇了一條要插入的指令后,會(huì)自動(dòng)切換到當(dāng)前IASM-File界面,并標(biāo)識(shí)出該指令可插入的候選位置。當(dāng)用戶把該指令插入到某個(gè)候選位置后,IASM-GUI會(huì)自動(dòng)切換回模板IASM-File窗體,并標(biāo)識(shí)出已被插入的指令。如此反復(fù),直到模板IASM-File的所有指令都被插入后,自動(dòng)關(guān)閉它的窗口。
[0048]本智能匯編開發(fā)工具(IASM)能方便地與第三方開發(fā)環(huán)境進(jìn)行集成。在一個(gè)實(shí)施方案中,IASM系統(tǒng)獨(dú)立工作,而將其自動(dòng)生成的針對(duì)某個(gè)具體VLIW處理器平臺(tái)的匯編文件添加到第三方開發(fā)環(huán)境的工程中。如果在第三方開發(fā)環(huán)境的調(diào)試過程中發(fā)現(xiàn)問題,需要在IASM環(huán)境下進(jìn)行相應(yīng)的修改。IASM-GUI采取了一種特別的方法來快速定位發(fā)現(xiàn)錯(cuò)誤的指令,即在第三方開發(fā)環(huán)境中對(duì)錯(cuò)誤指令做任意修改并且保存,當(dāng)切換回IASM環(huán)境時(shí),IASM-GUI會(huì)自動(dòng)定位到該匯編指令,等待編程者的修改。
[0049]在另一個(gè)實(shí)施方案中,將整個(gè)IASM系統(tǒng)集成到第三方開發(fā)環(huán)境中,因此VLIW匯編程序的編寫、編譯、調(diào)試均在同一個(gè)環(huán)境下進(jìn)行。
[0050]為了描述本專利,使用了 TI公司C6000系列處理器的VLIW架構(gòu)和指令集的一些信息,并引用了部分TI公司IMGLIB庫(kù)中的代碼。
[0051]圖1是一般的VLIW軟件開發(fā)流程,它描述了各軟件開發(fā)工具及其輸入、輸出之間的關(guān)系。其中匯編器10的作用是將匯編語言源文件轉(zhuǎn)換為機(jī)器語言的目標(biāo)模塊。匯編器的輸入可以是C編譯器11自動(dòng)生成的匯編文件12,也可以是由程序員手動(dòng)編寫的匯編文件13。但由于傳統(tǒng)的手動(dòng)VLIW匯編程序開發(fā)是一項(xiàng)非常耗時(shí),且容易出錯(cuò)的任務(wù),因此目前只要少數(shù)系統(tǒng)底層或性能特別敏感的程序是用手動(dòng)匯編的方式開發(fā)的。
[0052]圖2是添加了 IASM系統(tǒng)的VLIW軟件開發(fā)流程。編程者在IASM-⑶I 21的圖像化環(huán)境下以直觀、高效的方式開發(fā)VLIW匯編程序,程序內(nèi)容保存在IASM格式的匯編文件22中。IASM-Engine 23可以將IASM格式的匯編文件自動(dòng)轉(zhuǎn)換為能被目標(biāo)處理器平臺(tái)匯編器20識(shí)別的標(biāo)準(zhǔn)匯編文件24。
[0053]圖3是IASM智能匯編開發(fā)工具的系統(tǒng)框圖。IASM系統(tǒng)30主要由一個(gè)專門定義的IASM匯編文件存儲(chǔ)單元34、一個(gè)數(shù)據(jù)分析引擎單元IASM-Engine 32、和一個(gè)圖形化的用戶界面IASM-(iUI 31三部分組成。在IASM-Engine內(nèi)部包含了所支持目標(biāo)處理器平臺(tái)的指令集和架構(gòu)信息的數(shù)據(jù)庫(kù)33,這個(gè)數(shù)據(jù)庫(kù)是IASM進(jìn)行智能的數(shù)據(jù)分析和規(guī)則檢查的基礎(chǔ)。如果需要支持一個(gè)新的處理器平臺(tái),只需要在IASM-Engine中添加對(duì)應(yīng)的數(shù)據(jù)庫(kù)即可。編程者37通過IASM-GUI操作IASM格式的匯編文件35,并可將與匯編程序相關(guān)的開發(fā)和設(shè)計(jì)文檔38以二進(jìn)制的形式集成在IASM匯編文件中,使項(xiàng)目管理更加方便。在任何需要的時(shí)候,IASM-Engine都能按以下兩種方式之一將IASM匯編文件自動(dòng)轉(zhuǎn)換為目標(biāo)平臺(tái)的標(biāo)準(zhǔn)匯編文件36:第一,生成一個(gè)全新的目標(biāo)匯編文件;第二,將生成的匯編代碼內(nèi)容插入到目標(biāo)匯編文件中一對(duì)特定的標(biāo)記點(diǎn)之間。
[0054]為了更好地了解IASM智能匯編開發(fā)工具帶來的好處,有必要簡(jiǎn)要介紹一下VLIW架構(gòu),并分析目前手動(dòng)編寫VLIW匯編程序如此困難的主要原因。圖4描述了一個(gè)典型VLIW處理器40的內(nèi)部結(jié)構(gòu),它主要由一個(gè)寄存器文件41和多個(gè)功能單元組成。每個(gè)功能單元在一個(gè)機(jī)器周期可以執(zhí)行一條指令,因此整個(gè)處理器在一個(gè)周期可以并行地執(zhí)行多條指令。這些功能單元并不是相等的,每個(gè)功能單元被設(shè)計(jì)來執(zhí)行某個(gè)方面的主要工作,例如,功能單元42和43主要執(zhí)行算術(shù)邏輯計(jì)算,44主要執(zhí)行乘法計(jì)算,45主要負(fù)責(zé)寄存器文件和內(nèi)存之間的數(shù)據(jù)移動(dòng)。在主要功能之外,不同類型的單元又可能都實(shí)現(xiàn)了某些基本操作的功能,如功能單元42、43、45都可以執(zhí)行算術(shù)操作。因此VLIW匯編編程者不經(jīng)需要掌握每條指令的功能,還要熟知每條指令可以執(zhí)行的功能單元。
[0055]對(duì)于一條可以在多個(gè)功能單元上執(zhí)行的匯編指令來說,它在相關(guān)功能單元上執(zhí)行的具體語法格式也可能不同。圖5是TI C6000指令集中ADD指令在不同功能單元中的語法格式。所以編程者除了要記住那些指令可以執(zhí)行在那些功能單元之外,還需要記住在某個(gè)功能單元上,該指令有那些具體的語法格式,這進(jìn)一步增加了編寫VLIW匯編程序的難度。
[0056]另外,還有許多與VLIW架構(gòu)相關(guān)的限制條件,使得情況更加復(fù)雜化。有些指令需要額外的周期來完成操作,這些額外的周期通常被稱作延遲槽,因此程序員還需要隨時(shí)關(guān)注在那個(gè)周期可以獲得需要的數(shù)據(jù);有些指令一次執(zhí)行需要在多個(gè)機(jī)器周期占用某個(gè)功能單元,在此期間不能在該單元上執(zhí)行其他指令,這叫做功能單元延遲;寄存器文件的資源也是非常有限的,且在一個(gè)周期中對(duì)某個(gè)寄存器讀和寫的次數(shù)都可能有限制,如果不能直觀地了解寄存器文件的狀態(tài),寄存器資源的分配將會(huì)非常困難;VLIW處理器一般都有多達(dá)數(shù)十條的資源限制條件。所有這些因素加在一起,導(dǎo)致手動(dòng)編寫VLIW匯編程序成為一項(xiàng)艱巨、耗時(shí)、且容易犯錯(cuò)的任務(wù),不到萬不得已,多數(shù)開發(fā)者不會(huì)輕易嘗試。
[0057]為了降低VLIW匯編編程的難度,本發(fā)明提出了一種新的匯編文件存儲(chǔ)單元。這個(gè)IASM匯編文件存儲(chǔ)單元不僅以最符合VLIW架構(gòu)的格式保存了匯編代碼,還在開發(fā)過程中詳細(xì)記錄了匯編指令各操作數(shù)的相互關(guān)系和狀態(tài)變化。IASM-Engine結(jié)合其內(nèi)部的指令集數(shù)據(jù)庫(kù),可對(duì)IASM匯編文件進(jìn)行各種底層的智能分析和規(guī)則檢查,以幫助開發(fā)者進(jìn)行編程選擇,反饋各種錯(cuò)誤或限制信息,及提供更好的編程建議。下面以偽代碼的形式描述一個(gè)IASM-File的實(shí)施方案中的關(guān)鍵部分。
[0058]圖6是該IASM-File中的關(guān)鍵定義。參數(shù)platform指出該IASM-File針對(duì)的具體處理器平臺(tái)。參數(shù)iasmMode說明當(dāng)前文件是普通IASM-File還是模板IASM-File。參數(shù)asmFile指出基于當(dāng)前IASM-File自動(dòng)生成的目標(biāo)平臺(tái)標(biāo)準(zhǔn)匯編文件的名稱。IASM-File的主要內(nèi)容為以機(jī)器周期為基本單位組織的匯編代碼,即Cycle_S類型的列表cycleList,Cycle_s的定義隨后說明。參數(shù)symbolsList管理在本匯編文件中定義和引用的各種符號(hào)。參數(shù)cCode可用來保存本匯編程序?qū)?yīng)的高級(jí)語言代碼,如C程序代碼,以幫助理解匯編程序。參數(shù)imageList存添加到IASM-File中的圖片,它們可被用于注釋。參數(shù)documentList以二進(jìn)制數(shù)據(jù)的方式保存添加到IASM-File中的各種開發(fā)設(shè)計(jì)文檔,在需要查看和編輯的時(shí)候,IASM系統(tǒng)會(huì)自動(dòng)調(diào)用第三方程序打開它們。
[0059]圖7是IASM-File中對(duì)一個(gè)機(jī)器周期,即Cycle_s的關(guān)鍵定義。參數(shù)cycleMode是根據(jù)具體處理器平臺(tái)定義的周期類型,Ghost類型的周期也是通過它指定。參數(shù)label是當(dāng)前周期定義的符號(hào)地址,它代表當(dāng)前周期第一條指令在內(nèi)存中的地址。Cycles*的主要內(nèi)容是當(dāng)前周期的功能單元和寄存器狀態(tài)。Reg_s類型的數(shù)組regs保存了所有寄存器在當(dāng)前周期的狀態(tài)。Unit_s類型的數(shù)組units保存了所有功能單元在當(dāng)前周期的狀態(tài),這些單元中可能包含一條匯編指令代碼,也可能為空。
[0060]圖8是IASM-File中對(duì)一個(gè)功能單元,即Unit_s的關(guān)鍵定義。參數(shù)unitMode指出當(dāng)前單元的模式和各種狀態(tài)。參數(shù)unitld是在當(dāng)前功能單元中輸入一條新指令時(shí)分配的索引號(hào),它在整個(gè)IASM-File中都是唯一的,并且是建立匯編指令和寄存器之間依賴關(guān)系的重要依據(jù)。參數(shù)color指出當(dāng)前單元中指令在IASM-GUI上的顯示顏色。參數(shù)instruction以文本形式保存了當(dāng)前單元中的匯編指令代碼。參數(shù)syntax保存了當(dāng)前指令使用的具體語法格式。參數(shù)operands保存了當(dāng)前指令各操作數(shù)的詳細(xì)信息。此外,每條匯編指令還支持豐富的注釋方式,參數(shù)commentText保存文本形式的注釋內(nèi)容,參數(shù)commentlmage可以為當(dāng)前指令顯示一張圖片作為注釋,參數(shù)commentCode可以通過在專門的高級(jí)語言代碼窗口中聞売顯不相關(guān)內(nèi)容的方式為當(dāng)如匯編指令進(jìn)行注釋。
[0061]圖9是IASM-File中對(duì)Reg_s的關(guān)鍵定義,它代表一個(gè)寄存器在某個(gè)機(jī)器周期中的狀態(tài)。參數(shù)regMode指出該寄存器在當(dāng)前周期的工作模式,如開始一個(gè)新寄存器變量的定義,還是保持前一周期的內(nèi)容不變。如果該寄存器從當(dāng)前周期開始一個(gè)新寄存器變量的定義,參數(shù)unitld用來指出產(chǎn)生該寄存器變量的功能單元的索引,參數(shù)regName用來保存為該寄存器變量取的變量名。
[0062]圖10說明如何將VLIW匯編程序的相關(guān)開發(fā)和設(shè)計(jì)文檔保存到IASM-File中。假設(shè)當(dāng)前匯編程序有一個(gè)設(shè)計(jì)文檔、一個(gè)測(cè)試報(bào)告文檔、以及一個(gè)相關(guān)的參考資料文檔。經(jīng)過開發(fā)者的選擇操作后,IASM-File 100將這些文檔以二進(jìn)制數(shù)據(jù)的方式保存在它的內(nèi)部,即設(shè)計(jì)文檔101保存在IASM-File的內(nèi)部空間102,測(cè)試報(bào)告103保存在內(nèi)部空間104,參考資料文檔105保存在內(nèi)部空間106。這樣該匯編程序的代碼和相關(guān)設(shè)計(jì)文檔就保存為一個(gè)整體,管理起來更加方便。
[0063]圖11說明如何打開和編輯保存在IASM-File中的相關(guān)開發(fā)和設(shè)計(jì)文檔。當(dāng)需要操作文檔時(shí),IASM-Gn會(huì)彈出一個(gè)文檔選擇列表對(duì)話框110。在選擇了某個(gè)文檔之后,IASM-File 111會(huì)根據(jù)其保存的該文檔的二進(jìn)制數(shù)據(jù)112,生成一個(gè)臨時(shí)文件113,并調(diào)用對(duì)應(yīng)的第三方程序打開該臨時(shí)文件。如果相關(guān)文檔被修改過,IASM-File會(huì)在保存之前重新加載相關(guān)文檔,確保其內(nèi)容的一致性。
[0064]下面介紹IASM-File如何在IASM-GUI中進(jìn)行直觀的顯示和高效的操作。IASM-GUI以二維網(wǎng)格的圖形化方式對(duì)VLIW匯編程序進(jìn)行顯示,這種顯示方式非常直觀地反映了VLIW處理器的架構(gòu)。進(jìn)一步的,為了方便從不同的角度觀察匯編程序,IASM-Gn可以按Unit、Reg、Edit三種模式對(duì)IASM-File內(nèi)容進(jìn)行顯示。
[0065]圖12是IASM-GUI以Unit模式對(duì)IASM-File的顯示。在這個(gè)模式下,僅顯示每個(gè)周期的功能單元狀態(tài),一個(gè)周期中的所有功能單元在一行中并排顯示。編寫了匯編代碼的功能單元都有一個(gè)背景色,如圖中instruction A、B、C、D、G有相同的背景色,instructionE、F、H、K、M有相同的背景色,instruction 1、J、L、N有相同的背景色。相同的背景色表示這些指令在功能上具有相關(guān)性,使VLIW匯編程序代碼看起來一目了然。IASM-File中保存了開發(fā)者設(shè)置的系統(tǒng)背景色,新寫的匯編指令會(huì)被自動(dòng)設(shè)置為當(dāng)前系統(tǒng)背景色。指令的背景色隨時(shí)都可以方便地進(jìn)行改變。在這個(gè)簡(jiǎn)潔的顯示模式下,編程者能直觀地看到VLIW匯編程序的ILP,即哪些單元已經(jīng)寫了指令,而哪些單元仍然閑置。
[0066]圖13是IASM-GUI以Reg模式對(duì)IASM-File的顯示。在這個(gè)模式下,僅顯示每個(gè)周期的寄存器狀態(tài),一個(gè)周期中的所有寄存器在一行中并排顯示。寄存器中的有效數(shù)據(jù)有多種來源,如:通過函數(shù)傳遞進(jìn)來的參數(shù);運(yùn)行時(shí)環(huán)境預(yù)留的特殊用途寄存器,如堆棧指針;以及匯編指令的輸出寄存器。由于部分匯編指令不能在一個(gè)機(jī)器周期完成操作,因此這些指令輸出寄存器的生效周期取決于其延遲槽數(shù)量,比如第n個(gè)周期的匯編指令的延遲槽為3,則該指令輸出寄存器的數(shù)據(jù)在η+1+3周期才能被使用。每個(gè)具有有效值的寄存器都有一個(gè)背景色,如果該寄存器的數(shù)據(jù)來源于某條匯編指令,則它的背景色和該匯編指令的背景顏色保持一致。這樣開發(fā)者就能清晰地知道寄存器中的數(shù)據(jù)來源于那個(gè)功能代碼模塊。在編程過程中,如果開發(fā)者明確的知道一個(gè)寄存器在被某條指令使用之后將不會(huì)再使用,可以在編輯那條指令時(shí)釋放掉該寄存器,如圖16中R3寄存器中的變量valA在周期I中被定義,在周期2中使用完后被釋放。釋放操作使得寄存器文件的狀態(tài)更加清晰,在后續(xù)周期的編碼操作中,程序員就很容易知道哪些寄存器是可用的。在編寫一些大型或并行度高的VLIW匯編程序時(shí),很有可能出現(xiàn)寄存器資源使用沖突的情況,如果不能直觀地掌握寄存器文件的詳細(xì)狀態(tài),寄存器資源分配將會(huì)是一項(xiàng)困難的工作。
[0067]圖14是IASM-GUI以Edit模式對(duì)IASM-File的顯示。在這個(gè)模式下,同時(shí)顯示每個(gè)周期的功能單元和寄存器狀態(tài),并能直觀地顯示出匯編指令與其寄存器操作數(shù)之間的關(guān)系。匯編編程的主要操作都是在Edit模式下進(jìn)行的,前面所述的Unit和Reg模式更多的是方便開發(fā)者對(duì)程序進(jìn)行分析。在圖14所示Edit模式的一個(gè)實(shí)時(shí)方案中,IASM-File顯示界面由四部分組成。在界面中間區(qū)域顯示的是一個(gè)特殊的編輯周期,主要的匯編編程都是在這個(gè)編輯周期中完成的。編輯周期由該周期的寄存器狀態(tài)142,指令輸入寄存器關(guān)系顯示區(qū)143,匯編指令詳細(xì)數(shù)據(jù)顯示和編輯區(qū)144,及指令輸出寄存器關(guān)系顯示區(qū)145四大部分組成。在144區(qū)域中的指令詳細(xì)地顯示了其各操作數(shù)的類型及內(nèi)容,這將在后面詳細(xì)介紹。在143區(qū)域中會(huì)用連線146表示出匯編指令輸入操作數(shù)和輸入寄存器變量之間的關(guān)系,同樣在145區(qū)域中也會(huì)用連線147表示出匯編指令輸出操作數(shù)和輸出寄存器變量之間的關(guān)系。不同功能單元的連線使用不同的顏色,非常清晰的表達(dá)出指令和寄存器之間關(guān)系。在編輯周期顯示區(qū)域的上面顯示了編輯周期之前幾個(gè)周期的內(nèi)容,如圖14中的O和I周期。每個(gè)周期都同時(shí)顯示了其寄存器狀態(tài)140和功能單元狀態(tài)141,且寄存器狀態(tài)顯示在功能單元狀態(tài)上面。在編輯一條匯編指令時(shí),可以在本區(qū)域通過鼠標(biāo)為其選擇輸入寄存器操作數(shù)。同樣在編輯周期顯示區(qū)域的下面,用類似的方式顯示了編輯周期之后幾個(gè)周期的內(nèi)容,并且也可以通過鼠標(biāo)為被編輯指令指定其輸出寄存器操作數(shù)。在界面區(qū)域的最下方,顯示了輸出周期的寄存器狀態(tài)148。這個(gè)輸出周期是可以選擇的,它可以是函數(shù)的返回周期,也可以是由編程者指定的任意周期。顯示輸出周期寄存器狀態(tài)的意義在于幫助編程者檢查在程序跳轉(zhuǎn)或函數(shù)返回之前,是否已經(jīng)設(shè)置好了相關(guān)的寄存器內(nèi)容。[0068]在Edit或Unit模式下,通過對(duì)某個(gè)功能單元的雙擊、回車、或者直接輸入指令名的操作均可觸發(fā)該單元匯編指令的編輯。IASM-GUI會(huì)自動(dòng)將被操作功能單元所在周期設(shè)置為編輯周期,同時(shí)鎖定該功能單元。如果當(dāng)前是Unit模式,IASM-GUI則會(huì)首先轉(zhuǎn)換到Edit模式,然后執(zhí)行上述操作。
[0069]圖15為Edit模式下Ghost類型周期的顯示方式。對(duì)于特殊的Ghost類型周期,如圖15中的周期2和3,IASM-GUI會(huì)首先正常顯示該周期內(nèi)容,然后在其上覆蓋一層半透明的特定顏色。這樣編程者就能很直觀地區(qū)分Ghost周期和普通周期。Reg模式和Edit模式下Ghost周期的顯示方式也是類似的。
[0070]無論在那種顯示模式下,IASM-GUI都只能顯示有限幾個(gè)周期的內(nèi)容,因此需要一個(gè)滾動(dòng)條來控制顯示內(nèi)容。圖16就是IASM-GUI中針對(duì)VLIW匯編程序設(shè)計(jì)了一種專門的滾動(dòng)條,相對(duì)于普通滾動(dòng)條,它能更迅速地定位到想要查看的周期,并能夠非常直觀地了解到匯編程序的整體狀態(tài)。這個(gè)專用滾動(dòng)條160的背景也是一個(gè)二維網(wǎng)格,它的每一行代表一個(gè)周期,且列數(shù)和當(dāng)前處理器平臺(tái)中的功能單元個(gè)數(shù)保持一致。滾動(dòng)條上的每個(gè)小塊代表一個(gè)功能單元,只是尺寸要小得多。如果某個(gè)功能單元中編寫了一條匯編指令,對(duì)應(yīng)的小塊就會(huì)顯示出該指令對(duì)應(yīng)的顏色,因此這個(gè)滾動(dòng)條的背景就是匯編程序的一個(gè)快照視圖,開發(fā)者很容易通過它了解到整個(gè)程序的ILP情況。在滾動(dòng)條背景圖的上面覆蓋了一個(gè)方框161,用于指出當(dāng)前模式下界面中顯示的周期范圍。在滾動(dòng)條上按下左鍵拖動(dòng)即可改變界面中的顯示內(nèi)容,且在拖動(dòng)的過程中會(huì)臨時(shí)彈出一個(gè)顯示框162,以大號(hào)字體顯示出光標(biāo)所在位置對(duì)應(yīng)的周期號(hào)。
[0071]圖17說明這個(gè)專用滾動(dòng)條對(duì)程序內(nèi)容的管理系統(tǒng)170。在一般情況下,滾動(dòng)條以快照視圖172顯示出匯編程序的整體情況,滾動(dòng)條上的方框173標(biāo)識(shí)出在主界面中的顯示范圍171。但由于滾動(dòng)條上的小塊具有固定尺寸,因此當(dāng)匯編程序比較大時(shí),它的快照視圖也只能顯示整個(gè)程序中的一部分,如圖20中從SnapBeginCycle到SnapEndCycle周期范圍內(nèi)的內(nèi)容。在這種情況下,只要在滾動(dòng)條上按下鼠標(biāo)右鍵,該滾動(dòng)條會(huì)切換到全周期模式174,即在滾動(dòng)條的背景圖上以更小的塊尺寸顯示當(dāng)前IASM-File所有周期的狀態(tài),此時(shí)滾動(dòng)條上的方框175表示快照模式下對(duì)應(yīng)的周期范圍。保持鼠標(biāo)右鍵按下狀態(tài)進(jìn)行拖動(dòng),就可以改變快照視圖模式下的顯示范圍。一旦松開鼠標(biāo)右鍵,該滾動(dòng)條會(huì)自動(dòng)切換回快照模式,開發(fā)者就可以進(jìn)一步通過按下鼠標(biāo)左鍵拖動(dòng)定位到某個(gè)周期。如此,開發(fā)者最多只需要兩次鼠標(biāo)操作便可定位到某個(gè)周期,同時(shí)由于整個(gè)操作過程都是基于直觀的圖像信息,因此該滾動(dòng)條的操作更加高效。
[0072]傳統(tǒng)的VLIW匯編編程方式主要是在一個(gè)文本編輯器中直接用鍵盤輸入?yún)R編指令,而在本發(fā)明公開的智能匯編開發(fā)工具中,編程操作主要是通過在圖像界面下的鼠標(biāo)選擇操作來完成的。具體說來,就是在需要輸入指令的功能單元選擇需要的匯編指令和具體語法格式,然后進(jìn)一步選擇指令各操作數(shù)的內(nèi)容。為了提高VLIW匯編編程效率和降低開發(fā)難度,IASM系統(tǒng)針對(duì)編程中的各個(gè)環(huán)節(jié)都做了針對(duì)性的設(shè)計(jì),下面按照一條匯編指令的編輯過程對(duì)這些設(shè)計(jì)進(jìn)行說明。
[0073]IASM-GUI以圖形化的方式對(duì)IASM-File進(jìn)行顯示,因此編程者很直觀地知道哪些功能單元可被用于編寫新的匯編指令。在一個(gè)空的功能單元上開始編寫指令有三種方式:鼠標(biāo)雙擊該功能單元;選中該功能單元后鍵盤按下回車;對(duì)于熟練的開發(fā)者,還可選中該功能單元后用鍵盤輸入指令名。觸發(fā)了一條匯編指令的編輯過程后,IASM-Gn會(huì)自動(dòng)彈出一個(gè)指令選擇窗口。
[0074]圖18說明該匯編指令選擇窗口的一個(gè)實(shí)施方案,其特征在于:可以根據(jù)指令的類型選擇指令;可以根據(jù)輸入指令名的排序選擇指令;可以在最近使用過的指令列表中選擇指令;每條指令都可以同時(shí)顯示出文本形式的指令名和功能示意圖;被選中的指令會(huì)進(jìn)一步顯示出其語法格式列表和其他詳細(xì)信息;在一個(gè)筆記編輯器中可以記錄被選擇指令的相關(guān)開發(fā)經(jīng)驗(yàn);該指令選擇窗口中呈現(xiàn)的所有內(nèi)容都是經(jīng)過IASM-Engine篩選的,因此不會(huì)出現(xiàn)錯(cuò)誤的選擇。
[0075]在指令選擇窗口 180中有一個(gè)指令名輸入編輯器182,如果編程者在其中輸入指令名,會(huì)在指令顯示區(qū)183中按字母順序列出可用的指令名,同時(shí)在指令示意圖顯示區(qū)184中以同樣的順序顯示相關(guān)指令的功能示意圖。如果182的內(nèi)容為空,在指令顯示區(qū)183中顯示的則為可用的指令類型,同時(shí)在184中顯示當(dāng)前選擇類型中所有指令的功能示意圖。如果編程者按下了最近使用指令按鍵181,在184中顯示的則是本IASM-File中使用到的匯編指令的功能示意圖,最近使用的指令排在最前面。如果編程者在183中選擇了指令名,或在184中選擇了指令的功能示意圖,如185,則會(huì)在語法顯示區(qū)187中顯示出該指令可用的語法格式,并在指令詳細(xì)信息顯示區(qū)186中顯示該指令的其他詳細(xì)信息。對(duì)于選中的匯編指令,可以在一個(gè)筆記編輯器188中記錄該指令相關(guān)的開發(fā)經(jīng)驗(yàn),當(dāng)下次使用到這條指令,記錄下來的開發(fā)經(jīng)驗(yàn)就會(huì)在186中呈現(xiàn),避免多次在同一個(gè)地方犯錯(cuò)誤。
[0076]指令選擇窗口中的指令詳細(xì)信息顯示區(qū)的內(nèi)容與具體的VLIW處理器平臺(tái)相關(guān),圖19是針對(duì)TI公司C6000系列處理器的一個(gè)實(shí)施方案。在指令詳細(xì)信息顯示區(qū)190中有一排功能單元按鍵191,它的數(shù)量和功能單元定義與當(dāng)前處理器平臺(tái)一一對(duì)應(yīng)。在191下面的對(duì)應(yīng)位置193顯示出該指令可執(zhí)行的功能單元。圖中所示的狀態(tài)即為編程者在功能單元.SI觸發(fā)的指令編輯操作,因此191中的SI按鍵192處于按下狀態(tài),同時(shí)提示出L1、S1、D1、D2、S2、L2這六個(gè)功能單元都支持該指令。另外,編程者還可以在顯示區(qū)194得知該指令的延遲槽數(shù)量,在顯示區(qū)195得知該指令的功能單元延遲周期數(shù)。
[0077]在確定當(dāng)前輸入指令各方面信息之后,開發(fā)者通過在語法顯示區(qū)中選擇某條具體的語法格式,即可開始對(duì)指令操作數(shù)的編輯。指令的語法格式選擇后,IASM-GUI會(huì)自動(dòng)隱藏指令選擇窗口,將IASM-File切換到Edit顯示模式,把輸入指令功能單元所在周期設(shè)置為當(dāng)前編輯周期,鎖定該功能單元為編輯狀態(tài),并以詳細(xì)視圖顯示該指令。
[0078]每條匯編指令都有一個(gè)詳細(xì)視圖顯示方式,IASM系統(tǒng)支持單獨(dú)設(shè)計(jì)每條匯編指令的詳細(xì)視圖,以最直觀的方式顯示出指令的功能和特點(diǎn)。但由于一般VLIW指令集中大多數(shù)指令的語法格式具有類似性,因此從實(shí)用的角度考慮,IASM-GUI對(duì)大多數(shù)指令的詳細(xì)視圖采用相似的一般顯示方式,僅對(duì)少部分特殊指令單獨(dú)設(shè)計(jì)詳細(xì)視圖。圖20所示的一個(gè)實(shí)施方案為針對(duì)TI公司C6000指令集設(shè)計(jì)的匯編指令詳細(xì)視圖的一般顯示方式。這個(gè)詳細(xì)視圖200由五部分組成:在200的頂部為當(dāng)前指令的源操作數(shù)201,圖中所示的指令有兩個(gè)源操作數(shù),其中一個(gè)sint類型源操作數(shù)的內(nèi)容為寄存器A4中的變量A4_srcl,另一個(gè)xsint類型源操作數(shù)的內(nèi)容為寄存器A6中的變量A6_src2 ;在200中間的左邊部分為當(dāng)前指令的執(zhí)行條件202,如本指令在條件寄存器變量Al_Cond為真的情況下才會(huì)執(zhí)行;在200中間的右邊部分為當(dāng)前指令執(zhí)行的操作203,如本指令為執(zhí)行加法操作的ADD指令;在200底部的主要部分為目的操作數(shù)204,圖中所示當(dāng)前指令有一個(gè)sint類型的目的操作數(shù),其內(nèi)容為寄存器A8中的變量A8_dst ;在200底部的右邊為當(dāng)前指令的注釋205。
[0079]圖24說明如何編輯一條匯編指令。在匯編指令的詳細(xì)視圖210中,用鼠標(biāo)左鍵單擊某個(gè)操作數(shù)的類型說明框,即可觸發(fā)該操作數(shù)的編輯操作,如:鼠標(biāo)單擊源操作數(shù)的類型說明框211,觸發(fā)該操作數(shù)的選擇操作,選擇的內(nèi)容在對(duì)應(yīng)區(qū)域212顯示;單擊條件框213觸發(fā)指令執(zhí)行條件的選擇;單擊目的操作數(shù)的類型說明框214,觸發(fā)目的操作數(shù)的編輯操作;單擊注釋編輯框215,IASM-GUI彈出注釋編輯框,為當(dāng)前指令編輯豐富的注釋內(nèi)容。
[0080]對(duì)于編程者的每一個(gè)操作,IASM-Engine都會(huì)在底層進(jìn)行智能的數(shù)據(jù)分析和規(guī)則檢查,確保只提供正確的內(nèi)容,并在編程者進(jìn)行了錯(cuò)誤的操作后及時(shí)給予反饋。針對(duì)不同的操作數(shù)類型,IASM-GUI設(shè)計(jì)了不同的編輯方式,盡可能地提高編程效率。后面列舉部分在這個(gè)實(shí)施方案中實(shí)現(xiàn)的編輯方式。
[0081]圖22說明如何編輯匯編指令的寄存器操作數(shù)。寄存器操作數(shù)是最常見的操作數(shù)類型,一條匯編指令的源操作數(shù)和目的操作數(shù)的編輯過程不同。對(duì)于源操作數(shù),當(dāng)編程者單擊了當(dāng)前指令220的源操作數(shù)類型框221之后,只需在編輯周期的寄存器狀態(tài)行中選擇一個(gè)寄存器,如223,即可完成操作。IASM-Engine確保了編程者只能選擇到具有有效值的寄存器變量,如圖中的valA、valB、valC和valD,而不能選擇到空寄存器a和b。在選擇過程中,會(huì)用一條連線222標(biāo)識(shí)出用戶的當(dāng)前選擇。對(duì)于目的操作數(shù),當(dāng)編程者單擊了當(dāng)前指令的目的操作數(shù)類型框224之后,IASM-GUI會(huì)在編輯周期的下一個(gè)周期的寄存器狀態(tài)行中標(biāo)識(shí)可選的目的寄存器,如圖中的c、d和e。在選擇過程中,會(huì)用一條連線225標(biāo)識(shí)出用戶的當(dāng)前選擇。一旦選擇了某個(gè)目的寄存器,如226,IASM-Gn會(huì)彈出一個(gè)類似圖23所示的目的寄存器變量命名對(duì)話框230。該對(duì)話框標(biāo)識(shí)出了目的操作數(shù)的類型231,及當(dāng)前選擇的寄存器232。當(dāng)程序員在變量命名框233中為當(dāng)前目的寄存器取了變量名之后,即可完成目的寄存器操作數(shù)的編輯。為指令的目的寄存器變量命名是可選的,但這可以增加匯編指令的可讀性。
[0082]對(duì)于其他類型的操作數(shù),如常數(shù)、標(biāo)簽、執(zhí)行條件等,IASM-GUI都會(huì)彈出一個(gè)編輯對(duì)話框,列出由IASM-Engine篩選的可用內(nèi)容,由開發(fā)者進(jìn)行選擇或輸入。
[0083]由此可見,匯編指令的整個(gè)編輯過程以編程者的選擇操作為主,且選擇的內(nèi)容都是經(jīng)過IASM-Engine篩選,以直觀的方式提供的。這種新的圖像化的VLIW匯編編程方式,不僅大幅提高了開發(fā)效率,還確保了程序的正確性。
[0084]IASM-File支持對(duì)匯編指令輸入寄存器操作數(shù)的釋放操作,這個(gè)可選的操作可以讓VLIW匯編程序的寄存器文件狀態(tài)更加清晰。圖24說明一條匯編指令輸入寄存器操作數(shù)的釋放操作。在被編輯指令的詳細(xì)視圖240中,緊挨著源操作數(shù)和條件操作數(shù)類型說明框有對(duì)應(yīng)的釋放框,如圖中深色部分。鼠標(biāo)左鍵單擊某個(gè)釋放框,如241,便會(huì)釋放掉對(duì)應(yīng)的寄存器操作數(shù)242,因此從下一個(gè)周期開始,將無法獲得寄存器變量Al_Cond的內(nèi)容。再次單擊241,便可取消對(duì)242操作數(shù)的釋放,變量Al_Cond將會(huì)恢復(fù)到釋放前的狀態(tài)。
[0085]IASM-File提高VLIW匯編程序可讀性和可維護(hù)性的重要途徑之一,是提供了豐富的注釋方式。在傳統(tǒng)文本方式的VLIW匯編程序中,只能為每條匯編指令添加一行注釋文字,再加上優(yōu)化后匯編代碼與原高級(jí)語言程序執(zhí)行順序上的差異,使得這些注釋內(nèi)容的閱讀價(jià)值進(jìn)一步降低。在IASM匯編程序中,每條匯編指令都有三種注釋方式:文字、圖片、以及與完整高級(jí)語言代碼間的對(duì)應(yīng)關(guān)系。這三種方式的結(jié)合,使得VLIW匯編程序的注釋真正具有了使用價(jià)值。
[0086]在IASM-GUI的主界面中,有一個(gè)專門的高級(jí)語言代碼窗口,可用于保存與VLIW匯編程序?qū)?yīng)的高級(jí)語言程序。由于大多數(shù)情況下不是直接編寫VLIW匯編程序,而是在優(yōu)化的過程中將計(jì)算密集型的部分代碼轉(zhuǎn)換為匯編程序,因此能隨時(shí)看到匯編對(duì)應(yīng)的高級(jí)語言程序,對(duì)VLIW匯編代碼的理解很有幫助。在IASM-GUI的一個(gè)實(shí)施方案中,設(shè)計(jì)了一個(gè)可自動(dòng)擴(kuò)展顯示的高級(jí)語言窗口,當(dāng)光標(biāo)進(jìn)入該窗口會(huì)自動(dòng)切換為擴(kuò)展顯示模式,此時(shí)用較大區(qū)域進(jìn)行顯示,方便程序員的查看和操作。當(dāng)光標(biāo)離開高級(jí)語言窗口后,該窗口又會(huì)自動(dòng)切換回正常顯示模式。
[0087]圖25說明一條匯編指令的各種注釋方式。對(duì)于IASM-File 250中的指令instruction D 251,當(dāng)程序員選擇到該指令時(shí):如果該指令設(shè)置了文字注釋內(nèi)容,則在該指令下方用一個(gè)文本框253顯示對(duì)應(yīng)文字內(nèi)容;如果該指令設(shè)置了圖片注釋內(nèi)容,則根據(jù)圖片尺寸在該指令周圍選擇一個(gè)合適的方向,用一個(gè)圖片框253顯示對(duì)應(yīng)圖片內(nèi)容;如果該指令設(shè)置了和高級(jí)語言程序中相關(guān)代碼的對(duì)應(yīng)關(guān)系,則在高級(jí)語言代碼窗口 254中高亮顯示相關(guān)代碼255。
[0088]IASM-GUI對(duì)IASM-File的顯示方式雖然更加符合VLIW處理器的架構(gòu)特點(diǎn),但由于它需要在一行中并排顯示多個(gè)功能單元或整個(gè)寄存器文件的內(nèi)容,因此有可能超出一些顯示器的顯示范圍。本發(fā)明使用了下列設(shè)計(jì)來解決這個(gè)問題:第一,匯編代碼的多行顯示。如圖26所示,為了降低功能單元的顯示寬度,IASM-GUI會(huì)根據(jù)匯編指令的代碼長(zhǎng)度采取合適的顯示模式。如果長(zhǎng)度過長(zhǎng),會(huì)在合適的位置將匯編代碼拆分為多行進(jìn)行顯示;第二,功能單元分組及其精簡(jiǎn)顯示模式,如圖27所示。VLIW架構(gòu)中的功能單元往往可以按照其功能定義進(jìn)行分組,在編寫其中一組功能單元上的代碼時(shí),一般可以不用太關(guān)注其他組中的內(nèi)容。因此IASM-GUI僅完整顯示當(dāng)前工作單元組上的內(nèi)容,而以精簡(jiǎn)模式顯示其他組的指令,如只顯示其指令名和最基本狀態(tài)。通過快捷的操作,如一個(gè)雙擊,即可將一個(gè)精簡(jiǎn)顯示的功能單元組,切換到完整顯示模式;第三,保留了左鍵拖動(dòng)這個(gè)最方便的操作來拖動(dòng)整個(gè)界面。在IASM-GUI的界面中,除了滾動(dòng)條之外,在任何地方按下鼠標(biāo)左鍵,均可拖動(dòng)整個(gè)界面,因此即使IASM-File的顯示內(nèi)容超出了顯示器的可顯示范圍,也不會(huì)對(duì)編程操作造成大的影響。
[0089]在VLIW匯編的編程過程中,為了提高程序的ILP,常常需要對(duì)已編寫的指令進(jìn)行調(diào)整。但VLIW匯編程序中的指令調(diào)整不能簡(jiǎn)單的移動(dòng)指令的文本內(nèi)容,必須要考慮各方面的情況,如功能單元對(duì)指令的支持,指令輸入操作數(shù)的來源,后續(xù)指令對(duì)被調(diào)整指令輸出操作數(shù)的引用,等等。因此IASM-GUI定義了匯編指令的移動(dòng)、拷貝、交換等編輯操作,以便直觀、高效地調(diào)整IASM-File的內(nèi)容。
[0090]圖28說明了 IASM系統(tǒng)下定義的指令移動(dòng)操作,即把一條匯編指令從一個(gè)功能單元移動(dòng)到另一個(gè)功能單元,該指令原來所在的位置將變成一個(gè)空的功能單元。如果需要移動(dòng)instruction G的位置,編程者選擇該指令并按下相應(yīng)的快捷鍵后,IASM-Engine會(huì)對(duì)該指令進(jìn)行分析,選出可被移動(dòng)的備選位置。首先,IASM-Engine基于對(duì)應(yīng)的指令集數(shù)據(jù)庫(kù)確定該指令可執(zhí)行的功能單元,如圖中的Unit B和Unit C。其次,IASM-Engine根據(jù)該指令的所有輸入寄存器操作數(shù)確定它可被移動(dòng)的起始周期。假設(shè)被移動(dòng)指令有兩個(gè)輸入寄存器操作數(shù),分別來源于周期3的instruction A和周期4的instruction C,則由最靠近instruction G的那條指令確定移動(dòng)的起始周期,即周期5。然后,IASM-Engine根據(jù)后續(xù)指令對(duì)被移動(dòng)指令輸出寄存器操作數(shù)的引用情況,確定它可被移動(dòng)的結(jié)束周期。假設(shè)周期10的instruction M引用了 instruction G的輸出寄存器,并且是最靠近它的指令,貝!Jinstruction M所在周期的前一個(gè)周期為instruction G可被移動(dòng)的結(jié)束周期,即周期9。最后,IASM-GUI根據(jù)功能單元和周期的限制條件,在界面上用和instruction G相同的背景顏色表示出它可被移動(dòng)的備選位置,即圖中的a-e。此時(shí),程序員只需要用鼠標(biāo)左鍵點(diǎn)擊其中的任一個(gè)備選位置,即完成了 instruction G的移動(dòng)操作。
[0091]圖29說明了 IASM系統(tǒng)下定義的指令拷貝操作,即保持拷貝源的內(nèi)容不變,把它除了目的操作數(shù)外的所有內(nèi)容拷貝到另一個(gè)功能單元。如果需要拷貝instruction G的內(nèi)容,編程者選擇該指令并按下相應(yīng)的快捷鍵后,IASM-Engine會(huì)對(duì)該指令進(jìn)行分析,選出可被拷貝的備選位置。IASM-Engine用與上面相同的方法確定instruction G可執(zhí)行的功能單元和能被拷貝的起始周期,只是不需要確定結(jié)束周期,instruction G之后的所有周期被認(rèn)為都是可用的。IASM-GUI同樣用和instruction G相同的背景顏色表示出它可被拷貝的備選位置,即圖中的a-g。此時(shí),程序員只需要用鼠標(biāo)左鍵點(diǎn)擊其中的任一個(gè)備選位置,即可把instruction G的內(nèi)容復(fù)制到該功能單元。
[0092]圖30說明了 IASM系統(tǒng)下定義的指令交換操作,即兩條匯編指令相互交換它們所在的功能單元。如果需要交換instruction G的內(nèi)容,編程者選擇該指令并按下相應(yīng)的快捷鍵后,IASM-Engine會(huì)對(duì)該指令進(jìn)行分析,選出可被交換的備選位置。IASM-Engine用和指令移動(dòng)相同的方法確定每條交換備選指令的移動(dòng)限制條件,只有當(dāng)兩條指令滿足下列條件時(shí),它們才能相互交換:第一,這兩條匯編指令均在對(duì)方可執(zhí)行的功能單元上;第二,這兩條指令移動(dòng)后的周期均在其周期限制范圍內(nèi)。IASM-GUI在界面上標(biāo)識(shí)出可被交換的備選指令,編程者只需用鼠標(biāo)左鍵點(diǎn)擊其中的任一個(gè)備選位置,即可實(shí)現(xiàn)這兩條指令的交換。
[0093]圖31說明如何對(duì)發(fā)生異常的匯編指令進(jìn)行提示。假設(shè)編程者想要?jiǎng)h除instruction E,而instruction E的目的寄存器操作數(shù)被instruction H、K、N使用,那么刪除操作將導(dǎo)致這些指令錯(cuò)誤。在給出相關(guān)的警告后,如果編程者仍堅(jiān)持刪除操作,IASM-GUI會(huì)執(zhí)行該操作,同時(shí)標(biāo)識(shí)出那些存在問題的指令,如在相關(guān)指令前面覆蓋一個(gè)叉。這些提示信息會(huì)一直存在,直到編程者對(duì)相關(guān)指令進(jìn)行了正確的修改。
[0094]IASM-File 分為普通 IASM-File 和模板 IASM-File 兩種類型。模板 IASM-File 中的匯編代碼能方便地插入到其他IASM-File中。本發(fā)明對(duì)模板IASM-File的提出,使得大型VLIW匯編程序的開發(fā)變得容易,并能大幅提升VLIW匯編的代碼重用率。模板IASM-File允許在沒有明確的函數(shù)輸入的情況下開始編寫匯編代碼,因此可以將一個(gè)大型的匯編程序分成多個(gè)功能模塊,每個(gè)開發(fā)者專注于其中的一個(gè)模塊,最后能方便地將這些高度優(yōu)化的代碼集成在一起。另外,如果預(yù)知某部分代碼在多個(gè)VLIW匯編函數(shù)中都會(huì)用到,可以先用模板IASM-File的方式開發(fā)這部分代碼,然后將其應(yīng)用到其他函數(shù)中。
[0095]模板IASM-File中的匯編代碼編寫方式和普通IASM-File是一樣的,它們之間最大的不同在于輸入寄存器參數(shù)的確定方式。圖32說明如何確定普通IASM程序的輸入寄存器參數(shù)。普通IASM-File對(duì)應(yīng)于一個(gè)可被調(diào)用的VLIW匯編程序,因此它的輸入?yún)?shù)是通過函數(shù)調(diào)用傳遞進(jìn)來的。如圖32所示,周期O中的輸入寄存器參數(shù)對(duì)應(yīng)于函數(shù)聲明中的相關(guān)參數(shù)。圖33說明如何確定模板IASM程序的輸入寄存器參數(shù)。模板IASM的輸入寄存器參數(shù)是有程序員手動(dòng)指定的,如圖33中的srcl、src2和len。一旦指定了寄存器參數(shù),后續(xù)的指令就可以把它們作為操作數(shù),并且可以在編程的過程中按需要隨時(shí)添加。
[0096]圖34說明如何插入一個(gè)模板IASM-File。要在當(dāng)前IASM_File420中插入一個(gè)模板IASM-File的內(nèi)容,首先通過IASM-GUI選擇要被插入的模板IASM-File,然后會(huì)臨時(shí)彈出一個(gè)顯示了模板IASM-File內(nèi)容的窗口 341。模板IASM-File中已經(jīng)被插入了的指令,如templet A和templet B,會(huì)被標(biāo)識(shí)出來。要插入一條指令,如templet C,首先雙擊它,然后模板IASM窗口 341會(huì)被臨時(shí)隱藏,如圖35所示。IASM-Engine會(huì)在底層分析出指令templet C可被插入的備選位置,如圖35中的a_d,然后編程者只需要雙擊某個(gè)備選位置,即可完成該指令的插入。完成一條指令的插入后,IASM-Engine會(huì)檢查該模板IASM-File的所有指令是否都插入完畢,如果沒有,IASM-GUI會(huì)重新顯示出模板IASM窗口,等待編程者繼續(xù)處理后續(xù)指令。如此反復(fù),直到該模板IASM中的所有指令都被插入。圖36即為該模板IASM-File插入完畢后的狀態(tài)。編程者可以指定被插入指令的背景色,它可以保持模板IASM-File中的顏色,也可以使用被插入IASM-File的當(dāng)前系統(tǒng)顏色。
[0097]本發(fā)明專利所公開的這個(gè)智能匯編開發(fā)工具的主要功能是高效地開發(fā)VLIW匯編程序,它需要與各VLIW處理器相關(guān)的第三方開發(fā)環(huán)境一起工作,來完成整個(gè)開發(fā)過程。在圖37所述的一個(gè)實(shí)時(shí)方案中,第三方開發(fā)環(huán)境無需做任何改動(dòng),即可實(shí)現(xiàn)與本IASM系統(tǒng)的協(xié)同工作。在這個(gè)實(shí)施方案中,編程者使用IASM開發(fā)環(huán)境370,在IASM-File 371中以圖形化的方式開發(fā)VLIW匯編程序。IASM-Engine基于371自動(dòng)生成文本形式的可被第三方開發(fā)環(huán)境372識(shí)別的匯編文件373。第三方開發(fā)環(huán)境將373添加到其工程中,便可對(duì)其進(jìn)行編譯和調(diào)試。
[0098]在這個(gè)實(shí)施方案中,要求開發(fā)者對(duì)匯編程序的所有修改都在IASM開發(fā)環(huán)境下完成,然后重新生成文本形式的對(duì)應(yīng)匯編文件,進(jìn)行編譯和調(diào)試。在開發(fā)過程中,這兩個(gè)環(huán)境下的切換可能比較頻繁,IASM為此專門設(shè)計(jì)了一種方法,使得從第三方開發(fā)環(huán)境切換回IASM環(huán)境時(shí),能快速定位到需要修改的匯編指令。圖38說明了這種方法。假設(shè)在第三方開發(fā)環(huán)境下的調(diào)試過程中,發(fā)現(xiàn)一條需要修改的匯編指令380。開發(fā)者此時(shí)只需要對(duì)該指令做任意的修改,然后保存這個(gè)文件。當(dāng)切換回IASM開發(fā)環(huán)境時(shí),IASM-Engine會(huì)自動(dòng)分析出該指令所在的周期和功能單元,在Edit顯示模式的編輯周期中鎖定該指令381,等待開發(fā)者的修改。
[0099]在圖39所述的另一個(gè)實(shí)施方案中,將整個(gè)IASM系統(tǒng)392集成到第三方開發(fā)環(huán)境390中,用于替換傳統(tǒng)方式,顯示和操作匯編文件391。此時(shí),開發(fā)者不僅可以在同一個(gè)開發(fā)環(huán)境下以圖形化的方式開發(fā)VLIW匯編程序,還可以在這個(gè)更為直觀的環(huán)境中直接進(jìn)行編譯和調(diào)試。
[0100]以上內(nèi)容是結(jié)合具體的優(yōu)選實(shí)施方式對(duì)本發(fā)明所作的進(jìn)一步詳細(xì)說明,不能認(rèn)定本發(fā)明的具體實(shí)施只局限于這些說明。對(duì)于本發(fā)明所屬【技術(shù)領(lǐng)域】的普通技術(shù)人員來說,在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干簡(jiǎn)單推演或替換,都應(yīng)當(dāng)視為屬于本發(fā)明的保護(hù)范圍。
【權(quán)利要求】
1.一種智能匯編開發(fā)工具,其特征在于:包括匯編文件存儲(chǔ)單元IASM-File,數(shù)據(jù)分析引擎單元IASM-Engine和圖形化操作界面IASM-GUI ;所述匯編文件存儲(chǔ)單元IASM-File存儲(chǔ)匯編代碼以及指令間的相關(guān)性和寄存器的狀態(tài)變化信息,并通過模板文件的方式支持匯編程序的模塊化開發(fā);所述數(shù)據(jù)分析引擎單元IASM-Engine內(nèi)部設(shè)有所支持處理器平臺(tái)的指令集數(shù)據(jù)庫(kù),對(duì)編程操作進(jìn)行各種底層的分析和規(guī)則檢查,并反饋各種錯(cuò)誤或資源限制;所述圖形化操作界面IASM-GUI對(duì)所述匯編文件存儲(chǔ)單元的內(nèi)容進(jìn)行顯示和/或操作。
2.根據(jù)權(quán)利要求1所述智能匯編開發(fā)工具,其特征在于:所述圖形化操作界面IASM-GUI標(biāo)識(shí)匯編指令間的功能相關(guān)性并直觀顯示指令與其寄存器操作數(shù)間的關(guān)系。
3.根據(jù)權(quán)利要求1所述智能匯編開發(fā)工具,其特征在于:所述圖形化操作界面IASM-Gn設(shè)有滑動(dòng)滾動(dòng)區(qū)域,所述滑動(dòng)滾動(dòng)區(qū)域顯示匯編程序的整體狀態(tài)并實(shí)現(xiàn)快速定位。
4.根據(jù)權(quán)利要求1所述智能匯編開發(fā)工具,其特征在于:所述匯編文件存儲(chǔ)單元IASM-File存儲(chǔ)中間過程記錄信息以提升程序的可讀性。
5.根據(jù)權(quán)利要求1所述智能匯編開發(fā)工具,其特征在于:所述圖形化操作界面IASM-GUI設(shè)有顯性提示模塊,所述顯性提示模塊根據(jù)輸入信息自動(dòng)提示編程建議。
6.根據(jù)權(quán)利要求1所述智能匯編開發(fā)工具,其特征在于:所述圖形化操作界面IASM-Gn設(shè)有移動(dòng)、復(fù)制和交換操作模塊,所述移動(dòng)、復(fù)制和交換操作模塊通過所述數(shù)據(jù)分析引擎單元IASM-Engine進(jìn)行直觀化的代碼編輯和/或寄存器內(nèi)容的編輯。
7.根據(jù)權(quán)利要求1所述智能匯編開發(fā)工具,其特征在于:所述圖形化操作界面IASM-Gn設(shè)有功能單元的分組管理模塊以降低對(duì)顯示設(shè)備的要求。
8.根據(jù)權(quán)利要求1所述智能匯編開發(fā)工具,其特征在于:所述數(shù)據(jù)分析引擎單元IASM-Engine自動(dòng)將IASM匯編文件自動(dòng)轉(zhuǎn)換為某個(gè)VLIW目標(biāo)平臺(tái)的標(biāo)準(zhǔn)匯編文件并按以下兩種方式生成,一種為生成一個(gè)全新的目標(biāo)匯編文件;另外一種為將生成的匯編代碼內(nèi)容插入到目標(biāo)匯編文件中一對(duì)特定的標(biāo)記點(diǎn)之間,并保持其它內(nèi)容不變。
9.根據(jù)權(quán)利要求1所述智能匯編開發(fā)工具,其特征在于:所述圖形化操作界面IASM-GUI設(shè)有Unit模式、Reg模式和Edit模式三種顯示模式,Unit模式僅顯示每個(gè)周期的功能單元狀態(tài);所述Reg模式僅顯示每個(gè)周期的寄存器狀態(tài);Edit模式同時(shí)顯示每個(gè)周期的功能單元和寄存器狀態(tài),并能直觀地顯示出匯編指令與其寄存器操作數(shù)間的相關(guān)性,該模式下還有一個(gè)特殊的編輯周期,能以非常詳細(xì)的方式顯示出該周期匯編指令的各方面信息,主要的編程操作通過這個(gè)編輯周期完成。
10.根據(jù)權(quán)利要求1所述智能匯編開發(fā)工具,其特征在于:所述圖形化操作界面IASM-GUI能同時(shí)顯示匯編程序及相關(guān)的高級(jí)語言程序代碼,并顯示匯編指令和高級(jí)語言程序代碼之間的對(duì)應(yīng)關(guān)系。
【文檔編號(hào)】G06F9/44GK103500100SQ201310466206
【公開日】2014年1月8日 申請(qǐng)日期:2013年10月9日 優(yōu)先權(quán)日:2013年10月9日
【發(fā)明者】周宗煜 申請(qǐng)人:周宗煜