專利名稱:一種過程級軟硬件協同設計自動化開發方法
技術領域:
本發明屬于計算機領域,涉及嵌入式領域中的可重構片上系統(RSoC)的軟硬件協同設計,具體涉及一種過程級軟硬件協同設計自動化開發方法。
背景技術:
在傳統嵌入式系統設計領域,應用程序通常整個用軟件實現。隨著以FPGA技術為基礎的可重構器件的速度越來越快、使用越來越普遍,將應用實現成軟硬件混合系統能夠達到更好的性價比。如何將應用劃分到軟件和硬件兩部分并將其整合以滿足系統功能與性能需求,同時實現成本的最小化導致了軟硬件協同設計的產生。
傳統的軟硬件協同設計方法學一般都按照“先劃分再實現”的步驟來設計,系統設計好之后,系統組成和硬件結構不能再改變。由于沒有考慮到可重構計算單元的動態重構能力,很難高效的利用可重構計算資源。另外軟硬件劃分涉及到組合爆炸,是NP難問題,進行軟硬件劃分需要設計人員具備很高的專業技能。同時,由于可重構計算系統即包含有軟件可編程的微處理器又包含有硬件可重構的邏輯器件,需要應用程序員同時擁有軟件和硬件設計知識,并需要考慮動態重構以及軟硬件通信細節。
目前動態軟硬件劃分按照其劃分任務粒度的不同,可以分為指令級、過程級和進(線)程級。指令級動態軟硬件劃分方法完全不用設計人員干預,編譯器、操作系統都可以不變,軟硬件劃分完全由專門硬件完成。但由于需要額外的專用硬件進行在線反匯編、綜合和布局布線,硬件開銷比較大。另一方面指令級動態軟硬件劃分粒度目前局限在基本塊內,結構也局限于單循環結構,性能提升效果有限。
進(線)程級動態軟硬件劃分把軟件和硬件任務都當作進程或線程,由操作系統統一管理,可以支持現有硬件設計資源,便于集成開發。動態軟硬件劃分可轉換為軟硬件進(線)程動態調度問題,利用和擴展操作系統進(線)程管理功能而實現。同時,軟硬件進(線)程通信、同步也可利用操作系統提供的相應機制實現,較為靈活方便。但進(線)程調度、通信、同步基本由軟件完成,時間開銷較大。雖然在一些研究中提出了支持可重構計算操作系統的專門硬件,但主要負責配置信息和可重構資源管理,進程調度和切換還是由軟件完成。另外,目前的進(線)程級動態軟硬件劃分研究中對軟硬件透明編程模型還關注不夠,軟件和硬件進(線)程對設計人員是可見的,程序員創建一個軟件或硬件進(線)程的同時,實際已暗示了相應功能的軟硬件劃分。
過程級動態軟硬件劃分的基本思想是建立軟硬件協同函數庫,將計算任務分解成函數,以函數為軟硬件劃分和調度的基本單位。在功能描述階段,并不區分函數的軟硬件性質;在程序運行時才根據動態軟硬件劃分的結果,通過動態連接技術將函數連接到相應的硬件或軟件實現。這樣可以做到真正的在線劃分、動態重構和設計透明。函數的調用時間相對進(線)程切換開銷要小得多,同時不需要對指令流進行循環提取、反匯編、在線綜合等操作,是一種較理想的方案。
目前的各種RSoC軟硬件開發流程存在諸多不足,主要表現如下功能描述與系統設計之間的存大較大鴻溝、編程不透明、動態可重構資源難以有效利用、開發工具種類繁多、開發流程冗長復雜。
由上可以看出,迫切需要一種自動化的開發流程來實現RSoC的軟硬件協同設計。
發明內容
本發明要解決技術問題是提供一種過程級軟硬件協同設計自動化開發方法,使用該方法,可達到可重構器件對程序用戶透明的目的。支持運行時的動態軟硬件劃分,使劃分對程序員透明,提高了可重構資源的利用率,提高了系統開發的效率。
本發明為解決上述技術問題所采用的技術方案是 一種過程級軟硬件協同設計自動化開發方法,其特征在于,包括以下步驟 步驟A利用高級語言完成系統功能描述,系統功能描述中包括軟硬件協同函數的調用,所有的軟硬件協同函數都放置在同一個軟硬件協同函數庫中; 步驟B軟硬件函數的動態劃分在程序運行時,采用動態軟硬件劃分方法對程序調用的軟硬件協同函數進行劃分,即確定具體的軟硬件協同函數將要采用軟件實現還是硬件實現; 步驟C鏈接和執行步驟動態鏈接器根據動態軟硬件劃分方法的劃分結果,對具體的函數進行鏈接,對于采用軟件實現的函數;就將該采用軟件實現的函數翻譯為軟件指令此處的軟件指令為機器代碼交給中央處理器執行;對于采用硬件實現的函數,則調用硬件實現的函數的配置文件,配置可重構資源并執行該硬件實現的函數; 步驟D判斷和結束步驟;判斷是否所有的函數執行完畢,如果執行完畢就結束,否則返回用于劃分的參數到步驟B進入下一次循環;所述的函數包括軟硬件協同函數和非軟硬件協同函數,非軟硬件協同函數即普通函數。
所述的動態連接器具體完成以下4個任務 第一個任務是將當前函數區分成軟硬件協同函數和普通函數定義一個用于存放軟硬件協同函數庫的路徑的環境變量,程序運行時,對于程序調用的當前函數,取出該當前函數的鏈接映射(link_map)中的存放調用來源的變量值(l_origin),將存放調用來源的變量值(l_origin)與環境變量的值比較,如果相同,則確定該當前函數為軟硬件協同函數;否則,為普通函數; 第二個任務是檢測當前調用的函數是否為軟硬件協同函數,如果是,則將用于決定即將執行函數的地址的變量(GOT)值修改為軟硬件協同函數庫中具體函數(硬件函數或者軟件函數的入口地址,用于進行協同函數庫的訪問,如果不是,則調用elf_machine_fixup_plt函數,elf_machine_fixup_plt函數的作用為定位普通函數執行方式的地址; 第三個任務是給軟硬件協同函數庫提供注冊接口,為動態軟硬件劃分方法提供反饋的性能參數,所述的性能參數包括當前函數的結束時間、軟/硬件運行時間、軟/硬件調用次數、本軟硬件協同函數的軟/硬件總運行時間以及記錄所有軟硬件協同函數的軟/硬件總運行時間的變量; 第四個任務是使編譯后的可執行文件使用修改后的動態鏈接器,具體為將操作系統鏈接(link_os_linux)和linux操作系統中的gnu鏈接改成動態鏈接器的絕對路徑。
所述的軟硬件協同函數庫的構造方法為 所述的軟硬件協同函數庫包括多個軟硬件協同函數,每一個軟硬件協同函數包括頭文件、具體函數實現文件和硬件配置文件; 在具體函數實現文件中構造每一個具體函數的軟件函數實現和硬件接口代碼;在軟件函數實現和硬件接口代碼中設置檢測硬件函數執行時間或軟件函數執行時間的代碼; 在硬件配置文件具有通過硬件實現具體函數的硬件描述語言代碼; 在所述的頭文件中聲明多個具體函數的名稱和參數形式;為程序調用具體的軟件函數實現和硬件接口代碼提供統一的函數接口; 調用軟硬件協同函數時,在新建的程序文件中添加所需調用函數的頭文件;在新建的程序文件中采用函數名調用的方式,調用頭文件提供的統一函數接口;在程序編譯時采用動態編譯方式,在動態編譯過程中根據劃分算法選擇該函數是調用軟件函數實現或硬件接口代碼; 檢測硬件函數執行時間或軟件函數執行時間為使用系統運行環境導出函數來實現。
所述的動態軟硬件劃分方法為分支界定算法或貪婪算法或考慮硬件預配置因素的動態軟硬件劃分方法,所述的考慮硬件預配置因素的動態軟硬件劃分方法具體為 在程序運行過程中,進行動態的軟硬件劃分,在可重構硬件資源上進行一個或多個函數的配置,對待劃分函數維護一個待劃分函數列表list(f1,…,fm),其中fk為硬件加速比,k為待劃分的一個函數;k=1,…,m,m為待劃分函數個數,硬件加速比定義為
F對應待劃分函數的集合;Ck為函數k在程序運行過程中被調用的次數,Timeswk為函數k的軟件執行時間;
為0時表示函數k當前劃分為硬件,反之表示函數k當前為軟件;Trfk對應函數k的硬件實現函數的配置時間;Timehwk為函數k的硬件執行時間;Commk為函數k的硬件實現函數的軟硬件通信代價,為硬件與軟件的參數傳遞時間; 具體劃分步驟如下 步驟1從列表list(f1,…,fm)中選出最大值fi; 步驟2如果fi已經被劃分為硬件,則從列表中刪除fi,更新列表,返回步驟1,否則,進入下一步; 步驟3檢測當前的可重構資源是否足夠,是則將函數i劃分為硬件,并配置到可重構資源上,從列表中刪除fi,更新列表,返回步驟1; 否則,進入下一步; 步驟4fi與fj比較,fj為函數j的硬件加速比,函數j為已經配置在可重構資源上的函數中的一個函數,且在所有的已經配置在可重構資源上的函數中,函數j所對應的加速比最小;如果fi大于fj,則將函數j劃分為軟件,從可重構資源中刪除函數j,返回步驟3;如果fi小于fj,則進入步驟4.1; 步驟4.1檢測list是否為空,不空,則保存本次劃分結果,結束;如果是空,則計算關系矩陣Cst,選出該關系矩陣Cst中最大值元素cst,將cst對應的函數t加入到待劃分函數列表list(f1,…,fm)中更新待劃分函數列表list(f1,…,fm),進入步驟4.2; 所述的Cst記錄函數調用次序信息,關系矩陣Cst為m*N個元素,N為m個待劃分的函數可能調用的所有函數的個數;s元素表示當前劃分的所有函數,元素cij表示函數i被調用后立刻就調用了函數j的次數。
本發明的有益效果 本發明的過程級軟硬件協同設計自動化開發方法,使用過程級軟硬件統一編程模型,來屏蔽底層硬件實現的差異,達到可重構器件對程序用戶透明的目的。該編程模型將硬件加速器封裝成C語言函數,方便用戶編程,且支持運行時的動態軟硬件劃分,使劃分對程序員透明,提高了可重構資源的利用率。
系統設計人員通過調用已根據應用特性進行優化的軟硬件協同函數庫,即可利用高級語言完成系統功能描述;動態軟硬件劃分算法在程序運行時對其進行劃分,選擇、調度需要轉換到軟件或硬件實現的庫函數,并通過動態鏈接器實時切換函數的運行方式,從而形成了一個由功能描述到系統實現的自動化流程。
本發明最大的一個優點是綜合了軟硬件協同工作以及開發流程易于實現的優點,由于采用了軟硬件協同函數,因此,設計人員不必同時精通軟件和硬件實現,對設計人員的素質要求顯著降低,使得軟硬件協同設計的時間能顯著縮短;動態軟硬件劃分方法為優化的動態劃分算法,能最大限度的發揮硬件執行速度快的優點,從而使得程序的執行效率高。
圖1是過程級軟硬件協同設計集成開發環境構架; 圖2是過程級軟硬件協同設計的結構圖; 圖3是過程級軟硬件協同設計的原理圖; 圖4是過程級軟硬件協同設計流程圖; 圖5是過程級軟硬件協同設計運行時數據流圖; 圖6是本發明的總流程圖; 圖7為考慮硬件預配置因素的動態軟硬件劃分方法的流程圖。
具體實施例方式 下面結合附圖和具體實施例對本發明作進一步說明。
系統設計人員通過調用已根據應用特性進行優化的軟硬件協同函數庫,即可利用高級語言完成系統功能描述;系統功能描述中包括協同函數的調用,動態軟硬件劃分算法在程序運行時對程序調用的軟硬件協同函數進行劃分,選擇、調度需要配置到軟件或硬件實現的庫函數,并通過動態鏈接器實時切換函數的運行方式,調用具體的軟件或硬件函數,從而形成了一個由功能描述到系統實現的自動化流程。
所述動態鏈接器為劃分算法可以用預配置的劃分算法,也可以是其他的劃分算法。其他的算法,如分支界定算法或貪婪算法提供劃分參數,并讀取動態軟硬件劃分的決策結果,將應用程序中對抽象函數的調用映射到具體的軟件實體代碼或硬件接口代碼上。
動態鏈接器的實現 動態鏈接控制的第一個任務是檢測是否調用協同函數,如果是,則修改GOT入口進行協同函數庫的訪問,如果不是,調用elf_machine_fixup_plt函數該函數的作用為定位函數上次執行方式的地址;檢測到對協同函數的調用,就一律不再調用elf_machine_fixup_plt函數(系統函數)。GOT(該變量用于決定即將執行函數的地址)入口項一步進行了修改 動態鏈接控制的第二個任務是將函數區分成協同函數和普通函數。新添了額外的環境變量”LD_COL_LIB”協同函數庫的路徑只有一個,它指出協同函數庫所在路徑,共享庫對應的鏈接映射link_map節點建立好后,通過將該環境變量的值LD_COL_LIB和其存放調用來源的變量l_originl_origin屬于鏈接映射的一個成員。比較便可以知道該函數是否在協同函數庫中,。程序運行時,對于程序調用的某一個函數,取出該函數的link_map中的l_origin,將l_origin與LD_COL_LIB(自己添加的變量)比較,如果相同,則確定該函數為協同函數。否則,為普通函數。
動態鏈接控制的第三個任務是給協同函數庫提供注冊接口,為動態軟硬件劃分算法提供反饋的性能參數函數的結束時間、軟/硬件運行時間、軟/硬件調用次數、本協同函數的軟/硬件總運行總時間以及記錄所有協同函數軟/硬件總運行時間的變量等。
動態鏈接控制的第四個任務是使編譯后的可執行文件使用修改后的動態鏈接器。具體為將gcc(GNU(一個組織名稱)計劃開發的C語言編譯器)中的specs文件中的linux系統中的操作系統鏈接(link_os_linux)和linux操作系統中的gnu(組織名稱,用于該組織開發的軟件)鏈接改成動態鏈接器的絕對路徑。
首先進行系統功能描述 接著根據劃分算法對函數(該函數為軟硬件協同函數庫中的函數)進行軟硬件劃分,確定函數以何種方式執行。
接著動態鏈接器根據劃分軟件函數算法的劃分結果,進行對應函數庫的鏈接,如果執行,是軟件函數就將之翻譯為軟件指令交給中央處理器(CPU),如果是硬件函數的話,就調用硬件函數的配置文件,配置可重構資源,進行處理。
判斷是否所有的函數執行完畢,如果執行完畢就結束,否則返回用于劃分的參數。開發流程如圖6. 動態軟硬件劃分算法的實現 從協同函數庫相關信息文件(記錄了該庫包含的協同函數名及對應的加速器名稱,面積)中抽取該協同函數的相關信息。
執行時間、方式約束可以由程序員在編程的時候指定,這些約束給出函數一次執行可消耗的最多時間/哪些函數必須以軟件或硬件方式執行,這些約束可以作為獨立的源文件開發。
其余參數都通過動態鏈接器和協同函數庫協作獲取,其中最近的函數調用順序,動態鏈接器用一個有限長的鏈表記錄,而時間的具體獲取方式為動態鏈接器給軟硬件協同函數庫提供訪問其內部數據結構的接口,它們的實現中含有來獲取高精度時間的匯編指令。
劃分算法設計者除了提供劃分算法和性能監測函數用于將用于監測的變量名傳遞給動態鏈接器
動態鏈接器為劃分函數的注冊提供了接口 預留了劃分算法的接口。為方便對新開發的動態軟硬件劃分算法進行評估,本協同設計框架給劃分算法設計人員實驗新算法提供了注冊接口.
動態鏈接還提供接口,以注冊反射函數將變量名對應的變量值返回給性能監測函數。該函數可以注冊兩個函數,這兩個函數除了通過共同的參數列表進行數據通信外,還可以通過全局變量進行通信。它們一個在劃分算法執行前執行,得到劃分前的性能參數,一個在劃分算法執行后調用,得到劃分后的性能參數,用于劃分前后的性能進行對比,劃分算法設計者可以用它們來監測整個劃分過程。
兩個函數都被傳入同一個文件描述符fd,所有的性能監測數據(包括動態鏈接器內部監測到的)將被寫入該文件。
實施例1 過程級軟硬件協同設計集成開發環境構架如圖1。提供圖形化的系統描述與設計,以及劃分算法設計環境。主要分為用戶界面、編譯器、調試器三大部分組成。
用戶界面在系統描述與設計模式下(圖1實線部分),設計人員可進行系統功能描述的代碼和性能約束代碼等的輸入;在劃分算法設計模式下(圖1虛線部分),設計人員可以完成算法及性能監測代碼的輸入工作。集成環境將為設計人員新建的工程生成特定的文件、目錄等,整個工程由.project(工程文件的后綴名)文件管理,.project文件將即時反映工程文件的任何變化,記錄工程類型,工具路徑,編譯鏈接選項,相關環境變量等,為軟件綜合提供基礎。
編譯器負責編譯和鏈接,將應用程序編譯成可執行文件,將劃分算法等編譯成共享庫。通過將.project文件轉換成配置文件(Makefile)文件,由配置(make)函數調用GNU(一個組織名稱)計劃的C語言編譯器GCC對C語言代碼完成編譯。
調試器通過xmd、gdb工具對下載到片上系統的性能約束文件進行調試。
在劃分算法設計模式下,新開發的算法被編譯成共享庫后下載到FPGA上替換原有的劃分算法庫,應用程序運行完畢后將生成相關性能監測數據,這些數據將保存到特定格式的文件中,集成開發環境將該文件讀回并規格化以適當的形式顯示,以便與之前的算法進行對比改進。
系統的描述與設計和軟硬件劃分算法設計可以通過不同的開發流程同時進行。前者和軟件開發流程完全一樣,設計人員調用協同函數編寫代碼,然后進行編譯、下載、調試,協同開發環境將對整個過程中的細節問題進行管理。而劃分算法的設計流程是一個迭代過程,需針對具體應用特點進行規劃與設計。
過程級軟硬件協同設計的結構圖如圖2。主要由編程模型、綜合工具和仿真工具三大部分組成。編程模型是用戶設計自動化工具和主要的開發環境,用戶可以在編程模型中完成系統功能描述、聯合綜合、聯合調試和生成可執行代碼等主要工作。綜合工具和仿真工具主要用于用戶自定義函數庫的建立與驗證工作。用戶自定義的硬件函數可通過仿真工具進行結構仿真、形為仿真和時序仿真,并通過綜合工具形成系統認可的網表文件或配置文件,而不需要再借助專門的商用工具來完成。綜合工具與仿真工具的設計流程同傳統數字設計流程相似,大大提高了系統的實用性和可擴展性。圖2中的動態鏈接接口和軟硬件協同函數器,是本發明的獨特創新之處。
過程級軟硬件協同設計的原理如圖3。面向可重構片上系統的軟硬件協同設計自動化可分解為軟硬件劃分自動化和軟硬件實現自動化兩部分。軟硬件劃分自動化主要通過對動態軟硬件劃分算法的研究來進行。動態軟硬件劃分算法根據運行時動態獲取的環境信息和任務的特征參數來決定任務的實現方式。
軟硬件實現自動化主要是在軟硬件協同函數庫的支持下,通過動態連接技術實現(如圖4)。其中,軟硬件協同函數庫是軟硬件實現自動化的基礎與支撐,是動態軟硬件劃分的對象。動態連接技術用來實現程序運行時動態重構,將劃分為軟件執行的任務關聯到微處理器上的可執行代碼,將劃分為硬件執行的任務關聯到可重構器件上的邏輯電路。
動態軟硬件劃分算法需要兩個對象,一是任務圖,在這里是函數調用關系圖。它在系統功能描述時生成,可通過特殊工具程序進行提取。二是任務特征參數和運行環境信息。任務特征參數包括任務面積、軟件執行時間、硬件執行時間等,也是由系統描述決定,從系統描述中提取。運行時環境信息包括資源使用情況、硬件函數配置狀態、任務調用次數等,需要在運行時由動態鏈接器實時獲取。
動態鏈接器的實現 可執行文件格式(ELF)文件中GOT入口項一步進行了修改——在發現所調用函數為協同函數時不再調用elf_machine_fixup_plt函數。
新添了額外的系統環境變量”LD_COL_LIB”,它指出協同函數庫所在路徑,共享庫對應的link_map節點建立好后,通過將該環境變量的值和其l_origin成員比較便可以知道該函數是否在協同函數庫中。(link_map為鏈接庫的數據結構) 以“dl”開頭的函數由鏈接器導出,其中dl_get_cfl_path給出協同函數庫的所在目錄。其余的三個函數用來在運行時測量協同函數的執行情況,為軟硬件劃分算法提供參數,在下面會進行介紹。
具體做法是將gcc的specs文件的“link_os_linux”和“link_os_gnu”兩項修改為 *lin_os_linux: -m elf32ppclinux%{!shared:%{!static:%{rdynamic:-export-dynamic} %{!dynamic-linker:-dynamic-linker/mylibc/lib/ld-2.3.3.so}}} *lin_os_gnu: -m elf32ppclinux%{!shared:%{!static:%{rdynamic:-export-dynamic} %{!dynamic-linker:-dynamic-linker/mylibc/lib/ld-2.3.3.so}}} 帶下劃線為修改后的鏈接器的絕對路徑名。
動態軟硬件劃分 程序員編寫劃分算法源碼。
執行時間、方式約束可以由程序員在編程的時候指定,這些約束給出函數一次執行可消耗的最多時間/哪些函數必須以軟件或硬件方式執行,這些約束可以作為獨立的源文件開發,該源文件的后綴為”.limt”。
其余參數都通過動態鏈接器和協同函數庫協作獲取 劃分算法模塊也作為共享庫開發,動態鏈接器為劃分函數的注冊提供了接口,劃分算法在程序運行前進行注冊。劃分算法設計者除了提供劃分算法和性能監測函數外,還提供了”void partition_register(void)”這樣一個函數,其調用的函數為鏈接器提供的用來注冊劃分算法和性能監測函數的函數. void partition_register(void) {dl_partition_register(my_partition_v1) dl_partition_register(my_reflex_before,my_reflextion_after); } 為方便對新開發的動態軟硬件劃分算法進行評估,本協同設計框架給劃分算法設計人員實驗新算法提供了注冊接口①。
動態鏈接還提供如②所示接口,以注冊反射函數。該函數可以注冊兩個函數,這兩個函數除了通過共同的參數列表進行數據通信外,還可以通過全局變量進行通信。它們一個在劃分算法執行前執行,一個在劃分算法執行后調用,劃分算法設計者可以用它們來監測整個劃分過程。
typedef sw_hw_partition_result(*Partition_Func) (address_and_exec_info*,utime64,utime64); typedef void(*Reflextion_Func)(address_and_exec_nifo*,utime64,utime64,int fd); ①:Partition_Func_dl_partition_register(Partition_Func fn) ②:void dl_partition_register(Reflextion_Func before_partition,Reflextion_Func after_partition); 兩個函數都被傳入同一個文件描述符fd,所有的性能監測數據(包括動態鏈接器內部監測到的)將被寫入該文件。
該文件的格式遵循“1級項目名2級項目名…值;”格式,這種格式的文件將方便其在軟硬件協同設計集成開發環境中進行自動化處理。
協同函數通過調用dl_update_time_front更新函數的起始執行時間并得到對應于該函數的唯一id。函數運行結束后,軟/硬件協同函數將分別通過調用dl_sw_update_time/dl_hw_update_time更新函數的結束時間、軟/硬件運行時間、軟/硬件調用次數、本協同函數的軟/硬件總運行總時間以及記錄所有協同函數軟/硬件總運行時間的變量等。
過程級軟硬件協同設計流程如圖4。本發明主要面向圖形圖像領域,為基于可重構片上系統的軟硬件協同設計提供一種方便、快捷的解決方案。設計人員可以像編寫常規軟件代碼一樣輕松的完成軟硬件混合系統的開發,而不會感覺到軟硬件之間的差異。系統的軟硬件劃分和實現工作都由工具自動完成。整個系統開發過程分為三個階段 系統的描述與設計設計人員調用軟硬件協同函數庫中的函數(該函數庫提供的接口采用C語言或Java語言編寫,如用Java語言進行描述調用的則是軟硬件方法),利用C語言完成功能代碼的編寫;設計人員也可以添加性能約束代碼,如指定協同庫中函數的運行方式是全硬件或是全軟件實現,以及函數執行時間約束。默認情況下協同函數庫中的函數既可以以軟件形式在微處理器上運行,也可以以硬件方式加載到可重構硬件上執行。
軟件綜合編譯生成系統描述的可執行文件,并獲取其中調用到的軟硬件協同函數(即協同函數庫中實現相同接口的軟/硬件函數)信息,包括硬件函數封裝的加速器的面積,協同函數執行的性能約束等。
運行時動態軟硬件劃分軟件綜合階段所生成的可執行文件將被加載到可重構片上系統中執行,軟硬件劃分算法根據動態鏈接器實時獲取的程序運行情況及片上系統的資源利用率,決定被調用的協同函數劃分將由微處理器(對應軟件函數)還是可重構部件上(對應硬件函數)執行。
過程級軟硬件協同設計的整個運行時環境的數據流如圖5。當應用程序調用某一函數時,運行時環境需對函數名進行分析,從而判斷是否具有相應的硬件函數實現,如果沒有,則繼續運行軟件代碼,否則在軟硬件函數運行時信息表中為其創建一個新的記錄并從硬件函數庫中讀入相應的配置信息。這一數據結構中主要包括軟硬件函數執行時間、函數調用次數、硬件函數面積等將被提供給軟硬件劃分算法的參數信息。軟硬件動態鏈接過程根據劃分結果為函數選擇一種執行位置(要么在微處理器上,要在FPGA上),如果調用的是硬件函數,則首先查詢可重構資源管理器,若該硬件函數尚未配置,則需要進行動態重構,接著運行硬件加速器,最后將執行結果寫入數據區域。
可重構資源由可重構資源管理器進行管理,它是一個設備驅動程序,負責與可編程器件配置控制器等硬件電路(可編程器件廠商一般在其開發板上提供了配置控制器)通信,管理可編程器件上硬件模塊的配置和運行。在這里主要是查詢所需的硬件模塊狀態,進行相應配置和更新記錄操作,包括控制硬件模塊配置,更新硬件模塊配置信息、狀態信息和運行信息,以及從預留地址空間中分配端口地址等,最后返回所分配的地址。
簡單開發過程本過程包含3DES和Hamming編碼的系統,利用開發工具提供的支持。程序員使用了軟硬件協同函數庫中的tripleDES函數,并輸入了待處理的數據和密碼。此時程序員并不知道(也無從知道)函數的執行方式(硬件執行還是軟件執行),也不需要去了解硬件模塊上的寄存器的狀態、數目、類型和通信等細節。
以下為核心部分代碼 tri_des_encrypt(buf,buf,sizeof(buf),key,sizeof(key));//調用協同函數進行協同編程 for(int j=0,k=0;j<(sizeof(buf)/3)+1;j++,k+=3) { fh[j]=*((unsigned int*)(buf+k)); hamming_encode(&fh[j]); } for(int j=0,k=0;j<(sizeof(buf)/3)+1;j++,k+=3) { hamming_decode(&fh[j]); tmp=(unsigned int*)(buf+k); *tmp=fh[j]; } tri_des_decrypt(buf,buf,sizeof(buf),key,sizeof(key)); 程序運行過程中,根據動態軟硬件劃分的結果來執行函數。
本發明是在軟硬件協同函數庫的基礎上實施的,軟硬件協同函數庫的實現步驟和實例如下 一種軟硬件協同函數庫的構造方法,其特征在于, 所述的軟硬件協同函數庫包括多個軟硬件協同函數,每一個軟硬件協同函數包括頭文件、具體函數實現文件和硬件配置文件; 在具體函數實現文件中構造每一個具體函數的軟件函數實現和硬件接口代碼;在軟件函數實現和硬件接口代碼中設置檢測硬件函數執行時間或軟件函數執行時間的代碼; 在硬件配置文件具有通過硬件實現具體函數的硬件描述語言代碼; 在所述的頭文件中聲明多個具體函數的名稱和參數形式;為程序調用具體的軟件函數實現和硬件接口代碼提供統一的函數接口; 調用軟硬件協同函數時,在新建的程序文件中添加所需調用函數的頭文件;在新建的程序文件中采用函數名調用的方式,調用頭文件提供的統一函數接口;在程序編譯時采用動態編譯方式,在動態編譯過程中根據劃分算法選擇該函數是調用軟件函數實現或硬件接口代碼。
檢測硬件函數執行時間或軟件函數執行時間為使用系統運行環境導出函數來實現。
說明所述的劃分算法可以采用任意的算法來實現,只要能實現選擇是軟件函數實現或硬件接口代碼的功能即可。比如,有一種算法,根據當前硬件是否空閑來決定,當硬件空閑時,選擇硬件實現即調用硬件接口代碼。
軟硬件協同函數庫設計的步驟為 首先為軟硬件協同函數聲明一個對外接口(頭文件中的函數聲明);頭文件如何聲明在具體例子中有體現。
1.以軟件編程方式實現函數的軟件部分,該部分為一般軟件描述方式。
2.硬件接口代碼的實現。硬件接口的標識是在軟件接口標識前面增加了hw_前綴,區別協同函數軟硬件的不同實現方式。
3.1從可重構資源管理器獲取硬件模塊端地址。利用系統函數mmap函數進行物理地址(即獲取到的地址)映射成虛擬地址。
3.2函數庫包含一個init函數,該函數將在main函數調用前得到執行,它完成兩件事,一件是打開物理內存設備文件,為地址映射提供文件描述符參數;一件是調用dl_get_cfl_path函數獲得當前軟硬協同函數庫的絕對路徑,該函數也是動態鏈接器為編程模型提供的接口,程序中值得注意的地方在于剛進入函數時調用三個系統導出函數,可以自動測量和保存該硬件函數的執行時間,對于軟件函數也有類似代碼。
3.3其中必須必須聲明一個執行參數傳遞和計算的函數,它獲得虛擬地址后就能與硬件通信。該函數執行的都是一些對寄存器的讀寫工作(寄存器讀寫對硬件開發人員是熟知的過程),為了實現運行時應用程序劃分改變,協同函數的指令在編譯時不能直接編譯進應用程序的主文件,所以將軟硬件協同函數庫編譯成共享庫文件,即聲明在頭文件中。
3.4可重構資源管理器負責管理可重構資源,調度硬件加速器的配置與執行,它是操作系統的一部分,作為內核驅動開發。我們僅為它提供編程接口。(只提供接口) 將軟件實現代碼和硬件接口代碼封裝。封裝封裝的內容為軟件實現代碼和硬件接口代碼。封裝打包具體實現為采用編譯命令對所寫好的.c文件(即3des.c)進行編譯(在linux系統中,編譯命令為gcc-fPIC-c*.c。Gcc-shared-wl,-soname,lib3des.so.l-o lib3des.so.1.0*.o,在其他系統中可以采用其他C的交叉編譯器進行編譯).通過編譯以后整個程序就被封裝打包好,可供用戶調用。用戶可以通過封裝好的統一接口進行調用硬件接口函數,通過硬件配置文件,實現該功能的硬件部分。
硬件實現的配置文件是采用硬件描述語言實現,通過硬件開發工具進行設置,具體實現由所需實現功能相關。
將軟件函數和硬件接口代碼封裝在一起,并與硬件實現方式的配置文件一起構成軟硬件協同函數,這樣即完成了一個軟硬件協同函數的建立。要建立成庫,則需多實現幾個軟硬件協同函數即可。
所述的軟硬件協同函數可以采用包含頭文件方式被其他程序調用,調用的步驟為 1.將軟硬件協同函數庫復制到開發工具的根目錄下; 2.在新建的程序文件中添加所需調用函數的頭文件; 3.在新建的程序文件中采用函數名調用的方式,調用頭文件提供的統一函數接口。
4.在程序編譯時采用動態編譯方式,由程序運行環境依據當前情況選擇軟件或硬件實現部分。
本發明的提供的軟硬件協同函數庫的構造方法,包括以下步驟 首先為軟硬件協同函數聲明一個對外接口(頭文件中的函數聲明);軟硬件協同函數是對同一功能的不同方式實現軟件函數的實現是以軟件編碼方式實現,硬件的實現則是由硬件接口代碼和函數功能實現的硬件配置文件構成;將軟件函數和硬件接口代碼封裝在一起,并與硬件實現方式的配置文件一起構成軟硬件協同函數,由多個軟硬件協同函數,形成一個抽象的軟硬件協同函數庫;形成的函數庫可以在其他程序中調用。
定義了一個頭文件,在其中聲明了軟件函數和硬件接口函數提供一個統一的函數調用接口,以便于用戶調用。
1)在協同函數的實現部分,硬件接口的標識是在軟件接口標識前面增加了hw_前綴,區別協同函數軟硬件的不同實現方式,以便系統在運行時依據當前運行情況選擇軟件或硬件實現部分 2)使用系統函數mmap將硬件模塊實現部分的物理地址映射為虛擬地址,以便在虛擬地址空間運行的硬件接口部分與硬件模塊的具體實現部分通信。
3)使用系統運行環境導出函數統計協同函數軟件實現或硬件實現的執行時間,以便為系統選擇軟件或硬件實現提供決策信息。
4)聲明一個執行參數傳遞和計算的函數用于在獲得虛擬地址后就能與硬件通信。
軟件實現部分和硬件實現的接口部分打包到同一個共享庫中,與硬件實現的配置文件共同組成一個完整的協同函數。由多個軟硬件協同函數組成軟硬件協同函數庫。
軟硬件協同函數庫設計的實施例1 本實例中,采用Eclipse開發工具進行設計,軟件實體代碼和硬件接口代碼最后都通過動態鏈接控制實現。動態鏈接控制主要是讀取動態軟硬件劃分的決策結果,將應用程序中對抽象函數的調用映射到具體的軟件實體代碼或硬件接口代碼上。動態鏈接技術在軟件設計中早已廣泛應用,高級程序設計語言也提供了相應的語法結構,如C語言中的函數指針,C++中的虛函數等。對于不同的操作這里要鏈接的對象從外部看來無論軟件、硬件都體現為函數代碼,因為我們對外提供的是一個統一的接口。(每個操作都被看成函數代碼,這是C語言程序設計的一個主要思想) 首先給出一段DES的C程序代碼(可擴展為其他語言),通過決策機制軟硬件劃分算法,決定是采用封裝好的硬件函數和接口函數或者是采用.h和.c的軟件函數執行。
本發明的操作過程是,任意一臺現今主流配置的電腦作為開發工具,Eclipse作為開發工具。用戶通過該開發工具進行嵌入式系統的設計,在開發過程中可以調用軟硬件協同函數庫。
第一步,開啟電腦。
第二步,打開Eclipse開發工具。
第三步,將軟硬件協同函數庫拷貝到開發工具的根目錄下,如“C:\Eclipse\”目錄下 第三步,新建軟件工程。
第四步,添加程序源文件,并調用3des.h。調用的代碼為 #include<3des.h> 第五步,編寫軟硬件協同函數庫測試函數。(測試函數主要是定義我所調用的函數所需要的數據,并調用該函數) 如調用的函數為一個加法函數add(a,b),那么在頭文件已經包含的情況下我的測試函數如下(這是一個標準的C語言程序) int main() int c,d,e; c=4; d=5; e=add(c,d);//調用該函數 ….. 第六步,進行工程的動態編譯(動態編譯為軟件設計人員都熟知的過程)。
實例1 函數實現具體實例 3DES的實現過程 1.設置頭文件首先為3des函數聲明一個對外接口(為簡單起見,這里假設函數只包含3des的加密和解密函數),它包含在3des.h文件中,應用程序包含此文件就能利用庫中函數實現完成編程;代碼如下 /*3des.h*/----頭文件名; #define ENCRYPT 0 #define DECRYPT 1 typedef enum bool{false,true}bool; extern bool tri_des_encrypt(char*Out,char*In,long datalen,const char*Key,int keylen);----定義加密函數; extern bool tri_des decrypt(char*Out,char*In,long datalen,const char*Key,int keylen);---定義解密函數; 在一個文件對應具體函數的文件,具體函數如3des里面,同時包括軟件實現和硬件接口代碼。
整個函數庫就是一個文件。
2.軟件函數采用傳統的軟件方式實現(這里不詳述) 3.硬件接口代碼的實現 3.1 int hw_tri_des_encrypt(char*Out,char*In,long datalen,const char*Key,int keylen)函數即為接口函數,關鍵代碼如下 bool hw_tri_des_encrypt(char*Out,char*In,long datalen,const char*Key,intkeylen) { …… TripleDES(true,*datain,k
,k[1],k[2],dataout);//該處為調用參數傳遞和計算函數 } …… return true; } 3.2函數中包含一個init函數,該函數將在main函數調用前得到執行,它完成兩件事,一件是打開物理內存設備文件,將物理地址映射成虛擬地址;一件是調用dl_get_cfl_path函數獲得當前軟硬協同函數庫的絕對路徑,該函數也是動態鏈接器為編程模型提供的接口,在程序中值得注意的地方在于剛進入函數時調用了dl_update_time_front和dl_get_time函數,在函數結尾時調用了dl_hw_update_time函數,這些函數將自動測量和保存該硬件函數的執行時間,對于軟件函數也有類似代碼.這些函數為系統函數,用以給協同函數庫開發人員提供相關信息。(以上三個函數為系統函數可以直接調用)關鍵代碼如下 static void init() { now=&dl_get_time;//保存系統當前時間 upstime=&dl_sw_update_time;//保存軟件部分執行時間 uphtime=&dl_hw_update_time;//保存硬件部分執行時間 …… base_addr=mmap(0,XPAR_TRIPLEDES_0_HIGHADDR- XPAR_TRIPLEDES_0_BASEADDR,PROT_READ|PROT_WRITE,MAP_SHARED,fd,XPAR_TRIPLEDES_0 _BASEADDR);//將物理地址映射成虛擬地址 …… return; } 3.3TripleDES為執行參數傳遞和計算的函數,它獲得虛擬地址后就能與硬件通信。該函數執行的都是一些對寄存器的讀寫工作,這是因為當前3DES硬件實現與總線接口要通過IPIF為一個專(IPIF為專用名詞,它是總線與IP核相連的接口),使用IPIF提供的寄存器通信,這些寄存器的基地址與參數base_addr(在上面程序中提到該參數)對應的物理地址相同。為了實現運行時應用程序劃分改變,協同函數的指令在編譯時不能直接編譯進應用程序的主文件,所以將軟硬件協同函數庫編譯成共享庫文件,即聲明在3des.h中。該過程使用過硬件開發工具的設計人員熟知,因此不再詳述。
3.4可重構資源管理器負責管理可重構資源,調度硬件加速器的配置與執行,是操作系統的一部分,作為內核驅動開發。因此我們為其提供了的編程接口如以下代碼所示。(通過該部分提高硬件函數的加速,我們僅提供接口具體實現由硬件設計人員設計) typedef struct address_range { unsigned long base; unsighed long high; } address_range;//地址范圍 address_range*configure(char*cfl_path,char*cf_relative_path,address_range* phy_address,address_range*ret_bal);//配置資源 int deconfigure(address_range*phy_address);//釋放資源 void clean_config_info();//清除設置 5.利用編譯命令對所寫好的.c文件包含了軟件函數和硬件接口代碼(即3des.c)進行編譯(在linux系統中編譯命令為gcc-fPIC-c*.c Gcc-shared-wl,-soname,lib3des.so.l-o lib3des.so.1.0*.o,在其他系統中可以采用其他C的交叉編譯器進行編譯)。
6.硬件實現的配置文件采用傳統的硬件開發工具如EDK等實現(這里不再詳細敘述) 7.將這編譯好的文件和硬件配置文件,保存到函數庫文件夾即可。
軟硬件系統函數庫調用實例該測試程序保存為3destest.c #include<stdio.h> #include<stdlib.h> #include<string.h> #include<memory.h> #include″3des.h″//該處為調用頭文件 int main(int argc,char*argv[]) { ……//前面都是一些函數加密的參數設置 tri_des_encrypt(buf,buf,sizeof(str),key,sizeof(key));//該處為調用協同函數庫中加密函數的統一對外接口 ……//這里都是一些函數解密的參數設置 tri_des_decrypt(buf,buf,sizeof(str),key,sizeof(key));//該處為調用協同函數庫中解密函數的統一對外接口 …… return 0; } 調用算法的自然語言描述為 如果該函數滿足硬件實施的條件(具體由劃分算法的標準確定) 則采用以下語句調用硬件實現 hw_tri_des_encrypt(char*Out,char*In,long datal en,const char*Key,intkeylen); 否則,則采用以下語句調用軟件函數 DES(char Out[8],char In[8],const PSubKey pSubKey,bool Type);。
考慮硬件預配置因素的動態軟硬件劃分方法的實施例1 考慮硬件預配置因素的動態軟硬件劃分方法,其流程圖見圖7. 算法性能測評 使用C語言描述我們提出的過程級軟硬件劃分算法。由于實際已有的軟硬件劃分算法大多采用進程作為劃分單位,或采用基本塊(指令級劃分),而本發明提出的是在過程級進行軟硬件劃分,以自定義的軟硬件抽象函數為劃分對象,與這些算法難以直接進行比較實驗。所以本文考慮平臺的特點,設計了以下三種方法來評估本文算法的性能,一個是無動態重構支持;二是加入部分動態可重構后的劃分;三是引入預配置后的劃分。三種方法都使用JPEG編碼系統進行驗證。
仿真或實驗表明無動態重構支持的軟硬件劃分性能最差,動態重構下的劃分性能比前者提高了9.93%。引入預配置后,過程級軟硬件劃分的性能比無動態重構支持的劃分提高了18.44%,比動態重構下的劃分提高了9.45%。實驗表明,隨著可重構資源利用效率的不斷提高,過程級軟硬件劃分的優勢將更為明顯。
一種考慮硬件預配置因素的動態軟硬件劃分方法,其特征在于,在程序運行過程中,在可重構硬件資源上已配置一個或多個函數,對待劃分函數維護一個待劃分函數列表list(f1,…,fm),其中fk為硬件加速比,k為待劃分的一個函數;k=1,…,m,m為待劃分函數個數
F對應待劃分函數的集合;Ck為函數k被調用的次數,Timeswk為函數k的軟件執行時間;
為0時表示函數k當前劃分為硬件,反之表示函數k當前為軟件;Trfk對應函數k的硬件實現函數的配置時間;Timehwk為函數k的硬件執行時間;Commk為函數k的硬件實現函數的軟硬件通信代價,為硬件與軟件的參數傳遞時間(可以用傳統的仿真工具仿真出來,函數的軟件執行時間可以由系統中統計函數執行時間的函數得到); 3DES加密函數和解密函數使用一個硬件加速器,配置時間為Commk=9.40E-05s;Hamming編碼函數和解碼函數使用另一個加速器,
Commk=7.6E-06s對于一個復雜的嵌入式系統,一次運行可能調用,這些函數上千次以上,所以Ck設為2000,根據以上參數可以算出3DES的f=2.07,Hamming編碼的f=0.01。
測試例實驗同時運行兩項任務,3DES加密函數和解密函數使用一個硬件加速器,配置時間為3.0179526s,Hamming編碼函數和解碼函數使用另一個加速器,配置時間為2.3684901秒,分別測試它們對1K或1M數據進行處理,在不同配置下程序所消耗的時間,其中static表示程序運行時加速器已經靜態配置完畢,而dynamic表示加速器將在程序運行時動態配置;all software表示上四個函數執行方式為純軟件執行,all hardware為純硬件執行,3des hardware表示3DES加/解密函數用純硬件執行,而hamming編/解碼則用純軟件執行,hamming hardware則正好相反,random hardware表示這四個函數的執行方式是隨機的,這五個不同的配置可以通過替換劃分算法庫來實現。
由于軟件執行速度慢,從而導致動態重構情況下全軟件實現模式性能最差。3DES的軟硬件實現是影響程序性能的關鍵,在處理的數據較大的情況下,只將它動態劃分到硬件實現,取得幾乎與靜態配置同樣高的性能,比純軟件實現至少快一個數量級,這是因為①3DES的加速比和執行時間比Hamming更大;②3DES配置時間與運行時間比可以忽略。
權利要求
1.一種過程級軟硬件協同設計自動化開發方法,其特征在于,包括以下步驟
步驟A利用高級語言完成系統功能描述,系統功能描述中包括軟硬件協同函數的調用,所有的軟硬件協同函數都放置在同一個軟硬件協同函數庫中;
步驟B軟硬件函數的動態劃分在程序運行時,采用動態軟硬件劃分方法對程序調用的軟硬件協同函數進行劃分,即確定具體的軟硬件協同函數將要采用軟件實現還是硬件實現;
步驟C鏈接和執行步驟動態鏈接器根據動態軟硬件劃分方法的劃分結果,對具體的函數進行鏈接,對于采用軟件實現的函數;就將該采用軟件實現的函數翻譯為軟件指令交給中央處理器執行;對于采用硬件實現的函數,則調用硬件實現的函數的配置文件,配置可重構資源并執行該硬件實現的函數;
步驟D判斷和結束步驟;判斷是否所有的函數執行完畢,如果執行完畢就結束,否則返回用于劃分的參數到步驟B進入下一次循環;所述的函數包括軟硬件協同函數和非軟硬件協同函數,非軟硬件協同函數即普通函數。
2.根據權利要求1所述的過程級軟硬件協同設計自動化開發方法,其特征在于,
所述的動態連接器具體完成以下4個任務
第一個任務是將當前函數區分成軟硬件協同函數和普通函數定義一個用于存放軟硬件協同函數庫的路徑的環境變量,程序運行時,對于程序調用的當前函數,取出該當前函數的鏈接映射(link_map)中的存放調用來源的變量值(l_origin),將存放調用來源的變量值(l_origin)與環境變量的值比較,如果相同,則確定該當前函數為軟硬件協同函數;否則,為普通函數;
第二個任務是檢測當前調用的函數是否為軟硬件協同函數,如果是,則將用于決定即將執行函數的地址的變量(GOT)值修改為軟硬件協同函數庫中具體函數的入口地址,用于進行協同函數庫的訪問,如果不是,則調用elf_machine_fixup_plt函數,elf_machine_fixup_plt函數的作用為定位普通函數執行方式的地址;
第三個任務是給軟硬件協同函數庫提供注冊接口,為動態軟硬件劃分方法提供反饋的性能參數,所述的性能參數包括當前函數的結束時間、軟/硬件運行時間、軟/硬件調用次數、本軟硬件協同函數的軟/硬件總運行時間以及記錄所有軟硬件協同函數的軟/硬件總運行時間的變量;
第四個任務是使編譯后的可執行文件使用修改后的動態鏈接器,具體為將操作系統鏈接(link_os_linux)和linux操作系統中的gnu鏈接改成動態鏈接器的絕對路徑。
3.根據權利要求1所述的過程級軟硬件協同設計自動化開發方法,其特征在于,所述的軟硬件協同函數庫的構造方法為
所述的軟硬件協同函數庫包括多個軟硬件協同函數,每一個軟硬件協同函數包括頭文件、具體函數實現文件和硬件配置文件;
在具體函數實現文件中構造每一個具體函數的軟件函數實現和硬件接口代碼;在軟件函數實現和硬件接口代碼中設置檢測硬件函數執行時間或軟件函數執行時間的代碼;
在硬件配置文件具有通過硬件實現具體函數的硬件描述語言代碼;
在所述的頭文件中聲明多個具體函數的名稱和參數形式;為程序調用具體的軟件函數實現和硬件接口代碼提供統一的函數接口;
調用軟硬件協同函數時,在新建的程序文件中添加所需調用函數的頭文件;在新建的程序文件中采用函數名調用的方式,調用頭文件提供的統一函數接口;在程序編譯時采用動態編譯方式,在動態編譯過程中根據劃分算法選擇該函數是調用軟件函數實現或硬件接口代碼;
檢測硬件函數執行時間或軟件函數執行時間為使用系統運行環境導出函數來實現。
4.根據權利要求1~3任一項所述的過程級軟硬件協同設計自動化開發方法,其特征在于,所述的動態軟硬件劃分方法為分支界定算法或貪婪算法或考慮硬件預配置因素的動態軟硬件劃分方法,所述的考慮硬件預配置因素的動態軟硬件劃分方法具體為
在程序運行過程中,進行動態的軟硬件劃分,在可重構硬件資源上進行一個或多個函數的配置,對待劃分函數維護一個待劃分函數列表list(f1,…,fm),其中fk為硬件加速比,k為待劃分的一個函數;k=1,…,m,m為待劃分函數個數,硬件加速比定義為F對應待劃分函數的集合;Ck為函數k在程序運行過程中被調用的次數,Timeswk為函數k的軟件執行時間;
為0時表示函數k當前劃分為硬件,反之表示函數k當前為軟件;Trfk對應函數k的硬件實現函數的配置時間;Timehwk為函數k的硬件執行時間;Commk為函數k的硬件實現函數的軟硬件通信代價,為硬件與軟件的參數傳遞時間;
具體劃分步驟如下
步驟1從列表list(f1,…,fm)中選出最大值fi;
步驟2如果fi已經被劃分為硬件,則從列表中刪除fi,更新列表,返回步驟1,否則,進入下一步;
步驟3檢測當前的可重構資源是否足夠,是則將函數i劃分為硬件,并配置到可重構資源上,從列表中刪除fi,更新列表,返回步驟1;
否則,進入下一步;
步驟4fi與fj比較,fj為函數j的硬件加速比,函數j為已經配置在可重構資源上的函數中的一個函數,且在所有的已經配置在可重構資源上的函數中,函數j所對應的加速比最小;如果fi大于fj,則將函數j劃分為軟件,從可重構資源中刪除函數j,返回步驟3;如果fi小于fj,則進入步驟4.1;
步驟4.1檢測list是否為空,不空,則保存本次劃分結果,結束;如果是空,則計算關系矩陣Cst,選出該關系矩陣Cst中最大值元素cst,將cst對應的函數t加入到待劃分函數列表list(f1,…,fm)中更新待劃分函數列表list(f1,…,fm),進入步驟4.2;
所述的Cst記錄函數調用次序信息,關系矩陣Cst為m*N個元素,N為m個待劃分的函數可能調用的所有函數的個數;s元素表示當前劃分的所有函數,元素cij表示函數i被調用后立刻就調用了函數j的次數。
全文摘要
本發明提供了一種過程級軟硬件協同設計自動化開發方法,其特征在于,包括以下步驟步驟1利用高級語言完成系統功能描述,系統功能描述中包括軟硬件協同函數的調用;步驟2軟硬件函數的動態劃分;步驟3鏈接和執行步驟;步驟4判斷和結束步驟;判斷是否所有的函數執行完畢,如果執行完畢就結束,否則返回用于劃分的參數到步驟2進入下一次循環。本發明使用過程級軟硬件統一編程模型,來屏蔽底層硬件實現的差異,達到可重構器件對程序用戶透明的目的。該編程模型將硬件加速器封裝成C語言函數,方便用戶編程,且支持運行時的動態軟硬件劃分,使劃分對程序員透明,提高了可重構資源的利用率。
文檔編號G06F9/44GK101763265SQ20101002208
公開日2010年6月30日 申請日期2010年1月19日 優先權日2010年1月19日
發明者李仁發, 陳宇, 徐成, 吳強, 劉彥, 朱海, 袁虎, 鐘俊, 劉滔, 鄺繼順, 李蕊, 李肯立, 羅娟, 趙歡, 楊科華, 任小西, 楊書凡, 彭日光, 李春江, 黃瑜臣, 張維, 李浪 申請人:湖南大學