專利名稱:軟硬件協同函數庫的構造方法
技術領域:
本發(fā)明屬于計算機軟件技術領域,涉及一種軟硬件協同函數庫的構造方法。
背景技術:
根據劃分層次和粒度,有關動態(tài)軟硬件劃分的研究主要分成兩種思路。 第一種思路由喬治等人在2003年設計自動化會議上提出,并在其后期工作中不
斷發(fā)展,主要是利用專門高速緩沖存儲器記錄軟件程序中循環(huán)執(zhí)行的頻度,選擇執(zhí)行頻度
最高的循環(huán),將其機器代碼反匯編后提取數據流圖,在額外的微處理器上運行一個在線綜
合程序將數據流圖綜合為邏輯電路,并配置到可編程器件上。這樣設計人員無需考慮軟硬
件劃分,可以直接設計純軟件實現的應用系統,而由動態(tài)軟硬件劃分來決定實際的劃分方
案。因這種思路從底層入手,可以稱之為指令級動態(tài)軟硬件劃分方法。 另一種思路從高層著眼,把配置到可編程器件的硬件電路看作一種硬件進(線)
程,通過構建支持硬件進(線)程的操作系統,實現軟硬件進(線)程的相互遷移和切換。因
此,可以稱之為進(線)程級動態(tài)軟硬件劃分。面向部分可重構FPGA的在線綜合(On-Line
Synthesis for Partially Reconfigurable FPGAs.)詳細討論了面向可重構系統的操作系
統中硬件進程調度的在線布局問題;設計了一個稱為BORPH的操作系統,利用Unix進程來
表示硬件任務,并通過擴展Unix系統進程服務接口實現對硬件任務的支持.國內復旦大學
的周博,邱衛(wèi)東,彭澄廉研究了利用軟硬件多任務模型來降低軟硬件進程遷移開銷,并通過
擴展P COS-II嵌入式操作系統實現了一個原型系統。 指令級和進(線)程級動態(tài)軟硬件劃各有優(yōu)劣。 劃分方法的不足 指令級動態(tài)軟硬件劃分方法 由于需要額外的專用微處理器進行在線反匯編、綜合和布局布線,硬件開銷比較 大。 另一方面指令級動態(tài)軟硬件劃分粒度目前局限在基本塊內,結構也局限于單循環(huán) 結構,性能提升效果有限。 另夕卜,雖然設計人員只需提供軟件實現方案,而把軟硬件劃分和硬件綜 合交給專門軟硬件執(zhí)行,但這樣未能利用已有的硬件設計資源,這在目前第三方 IP(IntellectualProperty)核十分豐富的情況下,顯得有些浪費。 [OO11 ] 進(線)程級動態(tài)軟硬件劃分 相對指令級動態(tài)軟硬件劃分而言,進(線)程調度、通信、同步基本由軟件完成,時 間開銷較大。 雖然在一些研究中提出了支持可重構計算操作系統的專門硬件,但主要負責配置 信息和可重配置資源管理,進程調度和切換還是由軟件完成。 另外,目前的進(線)程級動態(tài)軟硬件劃分研究中對軟硬件透明編程模型還關注 不夠,軟件和硬件進(線)程對設計人員是可見的,程序員創(chuàng)建一個軟件或硬件進(線)程
3的同時,實際已暗示了相應功能的軟硬件劃分,雖然有可能增加專門代碼和電路來進行軟 硬件進(線)程遷移,但需要同時修改操作系統和底層硬件以提供支持,并非一個理想的方案。
發(fā)明內容
本發(fā)明的所要解決的技術問題是提供一種軟硬件協同函數庫(結構如圖1所示)
的構造方法,采用該方法構造的軟硬件協同函數庫,便于程序員開發(fā)軟件時忽略軟硬件函
數的差異、提高編程效率,提高程序的整體執(zhí)行效率。 為解決上述技術問題,本發(fā)明所采用的技術方案為 —種軟硬件協同函數庫的構造方法,其特征在于, 所述的軟硬件協同函數庫包括多個軟硬件協同函數,每一個軟硬件協同函數包括 頭文件、具體函數實現文件和硬件配置文件; 在具體函數實現文件中構造每一個具體函數的軟件函數實現和硬件接口代碼; 在軟件函數實現和硬件接口代碼中設置檢測硬件函數執(zhí)行時間或軟件函數執(zhí)行時間的代 碼; 在硬件配置文件具有通過硬件實現具體函數的硬件描述語言代碼; 在所述的頭文件中聲明多個具體函數的名稱和參數形式;為程序調用具體的軟件
函數實現和硬件接口代碼提供統一的函數接口; 調用軟硬件協同函數時,在新建的程序文件中添加所需調用函數的頭文件;在新 建的程序文件中采用函數名調用的方式,調用頭文件提供的統一函數接口 ;在程序編譯時 采用動態(tài)編譯方式,在動態(tài)編譯過程中根據劃分算法選擇該函數是調用軟件函數實現或硬 件接口代碼。 檢測硬件函數執(zhí)行時間或軟件函數執(zhí)行時間為使用系統運行環(huán)境導出函數來實 現。 說明所述的劃分算法可以采用任意的算法來實現,只要能實現選擇是軟件函數 實現或硬件接口代碼的功能即可。比如,有一種算法,根據當前硬件是否空閑來決定,當硬 件空閑時,選擇硬件實現即調用硬件接口代碼。
發(fā)明的有益效果 與傳統的嵌入式系統設計方法相比,指令級動態(tài)軟硬件劃分方法主要優(yōu)點在于完 全不用設計人員干預,編譯器、操作系統都可以不變,軟硬件劃分完全由專門硬件完成,對 于設計人員而言開發(fā)效率很高。但由于需要額外的專用微處理器進行在線反匯編、綜合和 布局布線,硬件開銷比較大。另一方面指令級動態(tài)軟硬件劃分粒度目前局限在基本塊內,結 構也局限于單循環(huán)結構,性能提升效果有限。另外,雖然設計人員只需提供軟件實現方案, 而把軟硬件劃分和硬件綜合交給專門軟硬件執(zhí)行,但這樣未能利用已有的硬件設計資源, 這在目前第三方IP核十分豐富的情況下,顯得有些浪費。 進(線)程級動態(tài)軟硬件劃分優(yōu)點主要在于把軟件和硬件任務都當作進程或線 程,由操作系統統一管理,可以支持現有硬件設計資源,便于集成開發(fā)。動態(tài)軟硬件劃分可 轉換為軟硬件進(線)程動態(tài)調度問題,利用和擴展操作系統進(線)程管理功能而實現。 同時,軟硬件進(線)程通信、同步也可利用操作系統提供的相應機制實現,較為靈活方便。但相對指令級動態(tài)軟硬件劃分而言,進(線)程調度、通信、同步基本由軟件完成,時間開銷 較大。雖然在一些研究中提出了支持可重構計算操作系統的專門硬件,但主要負責配置信 息和可重配置資源管理,進程調度和切換還是由軟件完成。 軟硬件協同函數庫的設計剛好可以彌補兩者的缺點,同時兼顧了兩者的優(yōu)點,它 不需要額外的專用微處理器進行在線反匯編、綜合和布局布線,充分利用了現有的IP核。 由于它提供了接口函數,因此可以節(jié)省時間開銷。 對于使用者而言,因為已經提供好高復用函數的硬件執(zhí)行方式,并提供了硬件實 現方式。他們可以用軟件實現的方式進行嵌入式系統設計,而不必需要對硬件語言了解。這 樣就大大簡化了程序員的開發(fā)流程。 傳統的設計人員,在進行系統設計時不僅要懂得軟硬件語言,而且還需進行系統 的軟硬件劃分,本發(fā)明提出的軟硬件協同函數庫的思想,可以為用戶使用劃分算法進行自 動劃分提供可能,因此這樣可以大大的縮減系統設計時間。 軟硬件協同函數庫的思想,使大家可以充分利用現有的硬件函數和軟件函數接口 資源,僅需添加接口文件和將其封裝到一起即可,相對開發(fā)函數庫的人員而言過程是比較 簡單的,因為IP核的供應商實際上也是要為IP核提供接口的。 本發(fā)明提供了一種軟硬件協同函數庫的構造方法,首先為軟硬件協同函數聲明一 個對外接口 (頭文件中的函數聲明);軟硬件協同函數是對同一功能的不同方式實現軟件 函數的實現是以軟件編碼方式實現,硬件的實現則是由硬件接口代碼和函數功能實現的硬 件配置文件構成;將軟件函數和硬件接口代碼封裝在一起,并與硬件實現方式的配置文件 一起構成軟硬件協同函數,由多個軟硬件協同函數,形成一個抽象的軟硬件協同函數庫;形 成的函數庫可以在其他程序中調用。采用該方法構造的軟硬件系統函數庫便于軟件人員開 發(fā)嵌入式系統時忽略軟硬件函數的差異、提高編程效率。
圖1為軟硬件協同函數庫結構示意圖;
圖2為硬件接口程序開發(fā)流程; 圖3僅使用寄存器訪問的設備通過IPIF連接0PB總線
具體實施例方式
以下結合附圖對本發(fā)明作進一步說明。
所述的軟硬件協同函數庫設計的步驟為 首先為軟硬件協同函數聲明一個對外接口 (頭文件中的函數聲明);頭文件如何 聲明在具體例子中有體現。
1.以軟件編程方式實現函數的軟件部分,該部分為一般軟件描述方式。 2.硬件接口代碼的實現如圖2。硬件接口的標識是在軟件接口標識前面增加了
hw_前綴,區(qū)別協同函數軟硬件的不同實現方式。 3. 1從可重構資源管理器獲取硬件模塊端地址。利用系統函數mm即函數進行物理 地址(即獲取到的地址)映射成虛擬地址。 3. 2函數庫包含一個init函數,該函數將在main函數調用前得到執(zhí)行,它完成兩件事,一件是打開物理內存設備文件,為地址映射提供文件描述符參數;一件是調用dl_ get—cfl—path函數獲得當前軟硬協同函數庫的絕對路徑,該函數也是動態(tài)鏈接器為編程模 型提供的接口 ,程序中值得注意的地方在于剛進入函數時調用三個系統導出函數,可以自 動測量和保存該硬件函數的執(zhí)行時間,對于軟件函數也有類似代碼。 3. 3其中必須必須聲明一個執(zhí)行參數傳遞和計算的函數,它獲得虛擬地址后就能 與硬件通信。該函數執(zhí)行的都是一些對寄存器的讀寫工作(寄存器讀寫對硬件開發(fā)人員是 熟知的過程),為了實現運行時應用程序劃分改變,協同函數的指令在編譯時不能直接編譯 進應用程序的主文件,所以將軟硬件協同函數庫編譯成共享庫文件,即聲明在頭文件中。
3.4可重構資源管理器負責管理可重構資源,調度硬件加速器的配置與執(zhí)行,它是 操作系統的一部分,作為內核驅動開發(fā)。我們僅為它提供編程接口。(只提供接口)
3.將軟件實現代碼和硬件接口代碼封裝。封裝封裝的內容為軟件實現代碼和硬 件接口代碼。封裝打包具體實現為采用編譯命令對所寫好的.c文件(即3des. c)進行編 譯(在li皿x系統中,編譯命令為gcc-fPIC-c*. c。 Gcc—sharedil , —soname, lib3des. so. l_o lib3des. so. 1. O氺.o,在其他系統中可 以采用其他C的交叉編譯器進行編譯).通過編譯以后整個程序就被封裝打包好,可供用戶 調用。用戶可以通過封裝好的統一接口進行調用硬件接口函數,通過硬件配置文件,實現該 功能的硬件部分。 4.硬件實現的配置文件是采用硬件描述語言實現,通過硬件開發(fā)工具進行設置, 具體實現由所需實現功能相關。 5.將軟件函數和硬件接口代碼封裝在一起,并與硬件實現方式的配置文件一起構 成軟硬件協同函數,這樣即完成了一個軟硬件協同函數的建立。要建立成庫,則需多實現幾 個軟硬件協同函數即可。 所述的軟硬件協同函數可以采用包含頭文件方式被其他程序調用,調用的步驟 為 1.將軟硬件協同函數庫復制到開發(fā)工具的根目錄下;
2.在新建的程序文件中添加所需調用函數的頭文件; 3.在新建的程序文件中采用函數名調用的方式,調用頭文件提供的統一函數接 □。 4.在程序編譯時采用動態(tài)編譯方式,由程序運行環(huán)境依據當前情況選擇軟件或硬 件實現部分。 本發(fā)明的提供的軟硬件協同函數庫的構造方法,包括以下步驟 首先為軟硬件協同函數聲明一個對外接口 (頭文件中的函數聲明);軟硬件協同
函數是對同一功能的不同方式實現軟件函數的實現是以軟件編碼方式實現,硬件的實現
則是由硬件接口代碼和函數功能實現的硬件配置文件構成;將軟件函數和硬件接口代碼封
裝在一起,并與硬件實現方式的配置文件一起構成軟硬件協同函數,由多個軟硬件協同函
數,形成一個抽象的軟硬件協同函數庫;形成的函數庫可以在其他程序中調用。 定義了一個頭文件,在其中聲明了軟件函數和硬件接口函數提供一個統一的函數
調用接口,以便于用戶調用。
1)在協同函數的實現部分,硬件接口的標識是在軟件接口標識前面增加了 hw前綴,區(qū)別協同函數軟硬件的不同實現方式,以便系統在運行時依據當前運行情況選擇軟件 或硬件實現部分 2)使用系統函數mm即將硬件模塊實現部分的物理地址映射為虛擬地址,以便在 虛擬地址空間運行的硬件接口部分與硬件模塊的具體實現部分通信。 3)使用系統運行環(huán)境導出函數統計協同函數軟件實現或硬件實現的執(zhí)行時間,以 便為系統選擇軟件或硬件實現提供決策信息。 4)聲明一個執(zhí)行參數傳遞和計算的函數用于在獲得虛擬地址后就能與硬件通信。
軟件實現部分和硬件實現的接口部分打包到同一個共享庫中,與硬件實現的配置
文件共同組成一個完整的協同函數。由多個軟硬件協同函數組成軟硬件協同函數庫。
實施例1 : 本實例中,采用Eclipse開發(fā)工具進行設計,如圖1所示軟件實體代碼和硬件接 口代碼最后都通過動態(tài)鏈接控制實現。動態(tài)鏈接控制主要是讀取動態(tài)軟硬件劃分的決策 結果,將應用程序中對抽象函數的調用映射到具體的軟件實體代碼或硬件接口代碼上。動 態(tài)鏈接技術在軟件設計中早已廣泛應用,高級程序設計語言也提供了相應的語法結構,如C 語言中的函數指針,0++中的虛函數等。對于不同的操作這里要鏈接的對象從外部看來無 論軟件、硬件都體現為函數代碼,因為我們對外提供的是一個統一的接口。(每個操作都被 看成函數代碼,這是C語言程序設計的一個主要思想) 首先給出一段DES的C程序代碼(可擴展為其他語言),通過決策機制軟硬件劃 分算法,決定是采用封裝好的硬件函數和接口函數或者是采用.h和.c的軟件函數執(zhí)行。
本發(fā)明的操作過程是,任意一臺現今主流配置的電腦作為開發(fā)工具,Eclipse作為 開發(fā)工具。用戶通過該開發(fā)工具進行嵌入式系統的設計,在開發(fā)過程中可以調用軟硬件協 同函數庫。 第一步,開啟電腦。 第二步,打開Eclipse開發(fā)工具。 第三步,將軟硬件協同函數庫拷貝到開發(fā)工具的根目錄下,如"CAEclipseV,目錄 下 第三步,新建軟件工程。 第四步,添加程序源文件,并調用3des.h。調用的代碼為
#include〈3des. h> 第五步,編寫軟硬件協同函數庫測試函數。(測試函數主要是定義我所調用的函數 所需要的數據,并調用該函數) 如調用的函數為一個加法函數add(a,b),那么在頭文件已經包含的情況下我的測
試函數如下(這是一個標準的C語言程序) int main() int c, d, e ; c = 4 ; d = 5 ; e = add(c, d);〃調用該函數
.....
第六步,進行工程的動態(tài)編譯(動態(tài)編譯為軟件設計人員都熟知的過程)。
實施例1 : 函數實現具體實例 3DES的實現過程 1.設置頭文件首先為3des函數聲明一個對外接口 (為簡單起見,這里假設函數 只包含3des的加密和解密函數),它包含在3des. h文件中,應用程序包含此文件就能利用 庫中函數實現完成編程;代碼如下 /*3des. h*/----頭文件名; #define ENCRYPT 0
#define DECRYPT 1
typedef e皿m bool {false, true} bool ; extern bool tri_des_encrypt(char氺0ut, char氺In, long datalen, const char氺Key, int keylen);——定義加密函數; extern bool tri_des_decrypt (char氺0ut, char氺In, long datalen, const char氺Key, int keylen);-—定義解密函數; 在一個文件對應具體函數的文件,具體函數如3des里面,同時包括軟件實現和 硬件 接口代碼。 整個函數庫就是一個文件。 2.軟件函數采用傳統的軟件方式實現(這里不詳述)
3.硬件接口代碼的實現 3. lint hw_tri_des_encrypt(char*0ut, char*In, long datalen, const char*Key, int keylen)函數即為接口函數,關鍵代碼如下 bool hw_tri_des_encrypt (chai^0ut, chai^In, long datalen, const char純ey, int keylen) { ...... TripleDES(t潔,氺cktain, k[O], k[l], k[2], ckt,t);〃該處為調用
參數傳遞和計算函數
} ...... return true 5 } 3. 2函數中包含一個init函數,該函數將在main函數調用前得到執(zhí)行,它完成 兩件事,一件是打開物理內存設備文件,將物理地址映射成虛擬地址;一件是調用dl_get_ cf l_path函數獲得當前軟硬協同函數庫的絕對路徑,該函數也是動態(tài)鏈接器為編程模型提供的接口,在程序中值得注意的地方在于剛進入函數時調用了 dl_update_time_fr0nt和 dl_get_time函數,在函數結尾時調用了 dl_hw_update_time函數,這些函數將自動測量和 保存該硬件函數的執(zhí)行時間,對于軟件函數也有類似代碼.這些函數為系統函數,用以給 協同函數庫開發(fā)人員提供相關信息。(以上三個函數為系統函數可以直接調用)關鍵代碼 如下 static void init()
{ now = &dl_get_time ;〃保存系統當前時間
upstime = &dl_sw_update_time ;//保存軟件部分執(zhí)行時間
uphtime = &dl_hw_update_time ;〃保存硬件部分執(zhí)行時間
...... base_addr = mm即(0 , XPAR_TRIPLEDES_0_HIGHADDR- XPAR_TRIPLEDES_0_BASEADDR, PROT—READ|PR0T_WRITE, MAP—SHARED, fd, XPAR_ TRIPLEDES_0_BASEADDR);〃將物理地址映射成虛擬地址 ...... return;
} 3. 3TripleDES為執(zhí)行參數傳遞和計算的函數,它獲得虛擬地址后就能與硬件通 信。該函數執(zhí)行的都是一些對寄存器的讀寫工作,這是因為當前3DES硬件實現與總線接口 要通過IPIF如圖3 (為一個專用名詞,如CPU —類的詞,它是總線與IP核相連的接口 ),使 用IPIF提供的寄存器通信,這些寄存器的基地址與參數base—addr(在上面程序中提到該 參數)對應的物理地址相同。為了實現運行時應用程序劃分改變,協同函數的指令在編譯 時不能直接編譯進應用程序的主文件,所以將軟硬件協同函數庫編譯成共享庫文件,即聲 明在3des. h中。該過程使用過硬件開發(fā)工具的設計人員熟知,因此不再詳述。
3.4可重構資源管理器負責管理可重構資源,調度硬件加速器的配置與執(zhí)行,是操 作系統的一部分,作為內核驅動開發(fā)。因此我們?yōu)槠涮峁┝说木幊探涌谌缫韵麓a所示。 (通過該部分提高硬件函數的加速,我們僅提供接口具體實現由硬件設計人員設計)
typedef struct address—range
{ unsigned long base ; 皿sighed long high ^ }address_range ;//地址范圍 address_range*configure(char氺cfl_path, char* cf_relative_path, address_range*phy_address, address_range*ret_bal) ;//
配置 資源 int deconf igure (address—range氺phy—address) ;//釋放資源 void clean_config_ ();〃清除設置
5.利用編譯命令對所寫好的.c文件包含了軟件函數和硬件接口代碼(即3des.c) 進行編譯(在li皿x系統中編譯命令為gcc-fPIC-c*. c Gcc_shared_wl, -soname, lib3des. so. l_olib3des. so. 1. 0*. o,在其他系統中可以采用其他C的交叉編譯器進行編譯)。 6.硬件實現的配置文件采用傳統的硬件開發(fā)工具如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*0ut, char*In, long datalen, const char*Key,
intkeylen); 否則,則采用以下語句調用軟件函數 DES(char Out[8] ,charln[8],const PSubKey pSubKey,bool Type);。
10
權利要求
一種軟硬件協同函數庫的構造方法,其特征在于,所述的軟硬件協同函數庫包括多個軟硬件協同函數,每一個軟硬件協同函數包括頭文件、具體函數實現文件和硬件配置文件;在具體函數實現文件中構造每一個具體函數的軟件函數實現和硬件接口代碼;在軟件函數實現和硬件接口代碼中設置檢測硬件函數執(zhí)行時間或軟件函數執(zhí)行時間的代碼;在硬件配置文件具有通過硬件實現具體函數的硬件描述語言代碼;在所述的頭文件中聲明多個具體函數的名稱和參數形式;為程序調用具體的軟件函數實現和硬件接口代碼提供統一的函數接口;調用軟硬件協同函數時,在新建的程序文件中添加所需調用函數的頭文件;在新建的程序文件中采用函數名調用的方式,調用頭文件提供的統一函數接口;在程序編譯時采用動態(tài)編譯方式,在動態(tài)編譯過程中根據劃分算法選擇該函數是調用軟件函數實現或硬件接口代碼。
2. 根據權利要求1所述的軟硬件協同函數庫的構造方法,其特征在于,檢測硬件函數 執(zhí)行時間或軟件函數執(zhí)行時間為使用系統運行環(huán)境導出函數來實現。
全文摘要
本發(fā)明提供了一種軟硬件協同函數庫的構造方法,其特征在于,包括以下步驟首先為軟硬件協同函數聲明一個對外接口;軟硬件協同函數是對同一功能的不同方式實現軟件函數的實現是以軟件編碼方式實現,硬件的實現則是由硬件接口代碼和函數功能實現的硬件配置文件構成;將軟件函數和硬件接口代碼封裝在一起,并與硬件實現方式的配置文件一起構成軟硬件協同函數,由多個軟硬件協同函數,形成一個抽象的軟硬件協同函數庫;形成的函數庫可以在其他程序中調用。采用該方法構造的軟硬件系統函數庫便于軟件人員開發(fā)嵌入式系統時忽略軟硬件函數的差異、提高編程效率。
文檔編號G06F9/46GK101706737SQ20091022666
公開日2010年5月12日 申請日期2009年12月18日 優(yōu)先權日2009年12月18日
發(fā)明者任小西, 劉彥, 劉滔, 吳強, 張維, 彭日光, 徐成, 朱海, 李仁發(fā), 李春江, 李浪, 李肯立, 李蕊, 楊書凡, 楊科華, 羅娟, 袁虎, 趙歡, 鄺繼順, 鐘俊, 陳宇, 黃瑜臣 申請人:湖南大學