專利名稱:一種基于模型的嵌入式系統(tǒng)流延時屬性測試方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種基于模型的嵌入式系統(tǒng)流延時屬性測試方法,是一種嵌入式系統(tǒng) 模型中流延時屬性的測試技術(shù)。
背景技術(shù):
隨著嵌入式系統(tǒng)的快速發(fā)展,嵌入式系統(tǒng)的復(fù)雜性、規(guī)模和質(zhì)量要求日益增長,除 了對系統(tǒng)本身的功能有基本需求,對于系統(tǒng)的非功能屬性也有著越來越高的要求。原有的 嵌入式軟件開發(fā)方法存在著很多弊端,各種錯誤在開發(fā)過程中逐層積累,加大了軟件測試 的技術(shù)難度和工作負(fù)荷,已經(jīng)不能滿足現(xiàn)在的嵌入式系統(tǒng)開發(fā)的質(zhì)量保障需求。對象管 理組織(Object Management Group,0MG)對此提出了模型驅(qū)動結(jié)構(gòu)方法(Model Driven Architecture, MDA),將模型這個統(tǒng)一的設(shè)計(jì)架構(gòu)貫穿于整個開發(fā)過程中,并把模型作為開 發(fā)過程的核心,在系統(tǒng)設(shè)計(jì)初期對系統(tǒng)的屬性進(jìn)行分析、驗(yàn)證,并可由軟件模型直接生成代 碼和測試用例,大大提高了軟件開發(fā)效率和軟件質(zhì)量,縮短了開發(fā)的周期。為了適應(yīng)這樣的發(fā)展趨勢,美國自動化工程師協(xié)會(Society of Automotive Engineers, SAE)提出了架構(gòu)分析與設(shè)計(jì)語言AADL。AADL在模型級對系統(tǒng)架構(gòu)進(jìn)行描述, 將進(jìn)程、線程等軟件概念抽象為軟件構(gòu)件,將處理器等實(shí)體抽象為硬件構(gòu)件,通過構(gòu)件及其 之間的交互描述嵌入式系統(tǒng)的拓?fù)浼軜?gòu),在構(gòu)件之上可以定義系統(tǒng)屬性和系統(tǒng)行為,進(jìn)而 描述系統(tǒng)的運(yùn)行。AADL作為一種半形式化建模語言,能在系統(tǒng)設(shè)計(jì)初期為設(shè)計(jì)者提供系統(tǒng) 功能、非功能的分析與檢測方法。按照驗(yàn)證方式劃分,面向模型的驗(yàn)證方法可以分為靜態(tài)架 構(gòu)分析和動態(tài)測試。實(shí)時性是衡量嵌入式系統(tǒng)功能和行為的重要指標(biāo)之一,任何不滿足實(shí) 時性約束的模型設(shè)計(jì)都會對系統(tǒng)性能造成重大影響。AADL規(guī)范通過信息流描述各構(gòu)件之間 數(shù)據(jù)處理和通信等系統(tǒng)抽象信息路徑,在系統(tǒng)級度量運(yùn)行過程中構(gòu)件間交互的實(shí)時性。嵌入式系統(tǒng)對實(shí)時性、可靠性等非功能屬性有著極高的要求。目前業(yè)界對于AADL 模型實(shí)時性的驗(yàn)證主要采用靜態(tài)分析的方法,將AADL模型結(jié)構(gòu)及屬性轉(zhuǎn)化為成熟的數(shù)學(xué) 模型進(jìn)行推理計(jì)算,其中比較著名的有法國Brest大學(xué)的LISyC團(tuán)隊(duì)采用Ada語言開 發(fā)的實(shí)時調(diào)度分析工具Cheddar,用于檢驗(yàn)實(shí)時系統(tǒng)中的時間方面的約束;美國Fremont Associates開發(fā)的Furness工具集將模型轉(zhuǎn)換為實(shí)時進(jìn)程代數(shù)來檢測狀態(tài)空間是否有違 反時間需求的情況;卡耐基梅隆大學(xué)軟件工程研究所(Software Engineering Institute, SEI)基于 Eclipse 平臺開發(fā)了 的開源 AADL 設(shè)計(jì)工具 OSATE (the Open Source AADL Tool Environment),通過將構(gòu)件時間屬性按照流路徑進(jìn)行整合并與流的時間屬性進(jìn)行對比,對 信息流傳遞的實(shí)時性進(jìn)行驗(yàn)證;法國INRIA的Su-Yoimg Lee等人將AADL流轉(zhuǎn)換到統(tǒng)一建 Iflg-W (Unified Modeling Language, UML) ^MARTE(Modeling and Analysis of Real Time and Embedded systems)實(shí)時嵌入式系統(tǒng)建模與分析擴(kuò)展包上進(jìn)行流延時分析。靜態(tài)分析的方法一般通過系統(tǒng)模型的狀態(tài)空間對其進(jìn)行抽象,在系統(tǒng)運(yùn)行狀態(tài)較 多的情況下有狀態(tài)空間呈指數(shù)級爆炸的可能,無法對大規(guī)模復(fù)雜系統(tǒng)進(jìn)行分析驗(yàn)證。另外, 靜態(tài)分析方法并不能模擬運(yùn)行系統(tǒng),只是在邏輯的層面對模型設(shè)計(jì)進(jìn)行檢查,無法檢測系
4統(tǒng)在具體硬件環(huán)境下運(yùn)行時的狀態(tài)及其動態(tài)屬性變化,對于實(shí)時性、調(diào)度分析等系統(tǒng)運(yùn)行 時屬性,靜態(tài)分析的方法存在著不精確的問題。動態(tài)測試的方法彌補(bǔ)了靜態(tài)分析方法的缺陷。動態(tài)測試不同于靜態(tài)分析,動態(tài)仿 真系統(tǒng)模型需要搭建軟硬件協(xié)同仿真平臺。靜態(tài)驗(yàn)證的方法對AADL模型中的構(gòu)件和屬性 進(jìn)行抽象提取,而動態(tài)測試的方法則需要向架構(gòu)描述中添加仿真所必需的運(yùn)行屬性,如調(diào) 度實(shí)現(xiàn)、系統(tǒng)時鐘和線程封裝等輔助功能和屬性。為了實(shí)現(xiàn)對AADL模型實(shí)時性的動態(tài)測 試,需要先將AADL模型轉(zhuǎn)化成為可在仿真引擎上運(yùn)行的系統(tǒng)實(shí)例。動態(tài)測試借助仿真平臺,將待評估的架構(gòu)模型元素轉(zhuǎn)換為仿真平臺可識別的測試 模型,對嵌入式系統(tǒng)的性能進(jìn)行動態(tài)評估。動態(tài)測試過程通過構(gòu)建測試用例,使系統(tǒng)實(shí)例在 仿真平臺上模擬運(yùn)行,在系統(tǒng)模擬運(yùn)行的過程中對系統(tǒng)行為和動態(tài)屬性值進(jìn)行監(jiān)控檢測, 并對系統(tǒng)運(yùn)行的行為及結(jié)果進(jìn)行預(yù)期分析,以確認(rèn)其是否滿足設(shè)計(jì)需求。對比靜態(tài)分析的 方法,動態(tài)測試不需要考慮系統(tǒng)的狀態(tài)空間存儲和遍歷,進(jìn)而回避了狀態(tài)空間爆炸的問題, 并且針對實(shí)時性、調(diào)度等運(yùn)行時的非功能屬性,做到了精確和可信的測試。目前存在的問題 是,AADL模型抽象程度高,現(xiàn)有方法對AADL系統(tǒng)的模擬程度不夠精確,對數(shù)據(jù)在任務(wù)和設(shè) 備構(gòu)件之間的傳輸沒有相應(yīng)的時間屬性測試等。
發(fā)明內(nèi)容
要解決的技術(shù)問題為了避免現(xiàn)有技術(shù)的不足之處,本發(fā)明提出一種基于模型的嵌入式系統(tǒng)流延時屬 性測試方法。本發(fā)明的思想在于基于SystemC硬件描述語言搭建AADL模型仿真測試平臺,將 AADL模型轉(zhuǎn)換為測試平臺可執(zhí)行的系統(tǒng)實(shí)例,并對流中的構(gòu)件序列和端口序列進(jìn)行抽象和 映射,將AADL模型中的流轉(zhuǎn)換為C++描述的測試模型,在系統(tǒng)實(shí)例仿真執(zhí)行的過程中完成 對AADL流延時屬性的測試,并對測試結(jié)果進(jìn)行分析與評估。技術(shù)方案一種基于模型的嵌入式系統(tǒng)流延時屬性測試方法,其特征在于步驟如下步驟1 利用Eclipse平臺的OSTAE工具對需要評估的AADL系統(tǒng)進(jìn)行實(shí)例化操作, 得到AADL實(shí)例模型;步驟2 將步驟1中的AADL實(shí)例模型轉(zhuǎn)換為基于SystemC描述的實(shí)例模型,轉(zhuǎn)換 方法如下將AADL軟件構(gòu)件轉(zhuǎn)換為C++格式的用戶代碼;將AADL硬件構(gòu)件轉(zhuǎn)換為SystemC格式的硬件實(shí)例;將AADL系統(tǒng)構(gòu)件轉(zhuǎn)換為C++描述的操作系統(tǒng)對象實(shí)例;將步驟1中AADL實(shí)例模型中的流轉(zhuǎn)換為C++格式的測試模型,轉(zhuǎn)換方法如下將流中的各AADL構(gòu)件轉(zhuǎn)換為C++格式的實(shí)例;將流中的各端口轉(zhuǎn)換為C++格式的端口實(shí)例;將流中的各鏈接、路徑轉(zhuǎn)換為C++格式的流路徑實(shí)例;步驟3 將步驟2中的用戶代碼、硬件實(shí)例和操作系統(tǒng)對象實(shí)例組合成為可執(zhí)行的 系統(tǒng)實(shí)例,組合方法如下
將用戶代碼用SystemC可識別的快速線程標(biāo)準(zhǔn)函數(shù)封裝成為線程,添加至操作系統(tǒng)對象實(shí)例的線程管理結(jié)構(gòu)中;將操作系統(tǒng)對象實(shí)例的線程管理結(jié)構(gòu)中的線程作為硬件實(shí)例中的CPU實(shí)例的運(yùn) 行線程;將硬件實(shí)例中的總線實(shí)例的端口與其他硬件實(shí)例的端口相連接;將CPU實(shí)例與總線實(shí)例設(shè)為主動實(shí)例,其他與其相連的硬件實(shí)例設(shè)為從動實(shí)例, 使前者夠調(diào)用后者的功能;步驟4 將步驟2中的C++格式描述的測試模型的端口實(shí)例的調(diào)用方法,添加至端 口所屬的步驟3中的系統(tǒng)實(shí)例的構(gòu)件實(shí)例中;步驟5 用SystemC提供的仿真函數(shù)驅(qū)動步驟3中得到的系統(tǒng)實(shí)例和步驟2中得 到的測試模型,并在系統(tǒng)實(shí)例和測試模型運(yùn)行的過程中對各構(gòu)件端口的通信時間進(jìn)行監(jiān)測 和記錄;步驟6 在步驟5的仿真運(yùn)行過程結(jié)束后,將步驟5中監(jiān)測和記錄的各構(gòu)件端口的 通信時間賦值給構(gòu)件實(shí)例的通信時間數(shù)據(jù)結(jié)構(gòu),求得構(gòu)件實(shí)例輸出數(shù)據(jù)與輸入數(shù)據(jù)時間的 差值,將差值賦值給表示延時的數(shù)據(jù)結(jié)構(gòu),并按照步驟2中的測試模型中的計(jì)算公式計(jì)算 各層級流延時的值;步驟7 當(dāng)步驟2中測試模型的各層級流的構(gòu)件序列符合步驟1中的實(shí)例模型的 描述時,檢查測試模型中構(gòu)件間通信兩端的端口實(shí)例;當(dāng)通信端兩端口為相同類型,且連接順序?yàn)檩斎攵丝谂c輸出端口的搭配情況時, 檢查測試模型中各層級流的流延時值;當(dāng)各層級流的流延時值按照步驟1的實(shí)例模型中的信息流的順序形成單調(diào)時序, 并且無不符合步驟1的實(shí)例模型設(shè)計(jì)約束時,得到流延時屬性測試結(jié)果正確的結(jié)論;當(dāng)上述條件成立時,證明流延時符合模型設(shè)計(jì)需求;當(dāng)上述各條件有任何一項(xiàng)不滿足,得到流延時屬性測試結(jié)果錯誤的結(jié)論,證明流 延時不符合模型設(shè)計(jì)需求;至此獲得全部測試結(jié)果。有益效果本發(fā)明提出的一種基于模型的嵌入式系統(tǒng)流延時屬性測試方法,基于SystemC硬 件描述語言搭建AADL模型仿真測試平臺,將AADL模型轉(zhuǎn)換為測試平臺可執(zhí)行的系統(tǒng)實(shí)例, 并對流中的構(gòu)件序列和端口序列進(jìn)行抽象和映射,將AADL模型中的流轉(zhuǎn)換為C++描述的測 試模型,在系統(tǒng)實(shí)例仿真執(zhí)行的過程中完成對AADL流延時屬性的測試,并對測試結(jié)果進(jìn)行 分析與評估。能夠在模型的設(shè)計(jì)階段動態(tài)測試AADL模型的流延時屬性,并根據(jù)測試結(jié)果迭 代構(gòu)造和精化設(shè)計(jì)模型,以便盡早發(fā)現(xiàn)設(shè)計(jì)模型中存在的問題,提高AADL模型設(shè)計(jì)初期的 開發(fā)效率。
圖1 :AADL流規(guī)范圖形表示;圖2 =AADL流延時動態(tài)測試流程圖;圖3 控制系統(tǒng)AADL模型架構(gòu)圖4 控制系統(tǒng)流延時測試結(jié)果。
具體實(shí)施例方式現(xiàn)結(jié)合實(shí)施例、附圖對本發(fā)明作進(jìn)一步描述該實(shí)例描述了一個控制系統(tǒng),包括一個主系統(tǒng)構(gòu)件,一個主進(jìn)程構(gòu)件,七個功能線 程構(gòu)件,處理器、總線、內(nèi)存,以及傳感器和作動器各一個??刂葡到y(tǒng)包含系統(tǒng)構(gòu)件和所有的 硬件構(gòu)件共六個子構(gòu)件,系統(tǒng)構(gòu)件綁定在處理器和內(nèi)存上,傳感器、作動器、處理器和內(nèi)存 均包含請求總線訪問屬性,其相互通信通過總線來完成。進(jìn)程構(gòu)件為系統(tǒng)構(gòu)件的子構(gòu)件,包 含七個線程子構(gòu)件。其中,按鈕盤線程與仲裁線程、仲裁線程與主線程、主線程與備用線程 間通過事件數(shù)據(jù)端口鏈接進(jìn)行通信。圖3為控制系統(tǒng)AADL模型架構(gòu)圖。在控制系統(tǒng)的AADL架構(gòu)中定義一個流按鈕盤線程為流源,備用線程為流接收 器,其路徑包含仲裁線程、主線程以及四個線程間的同級構(gòu)件鏈接。本例中流路徑并不經(jīng)過 進(jìn)程級構(gòu)件端口和系統(tǒng)級構(gòu)件端口,所以我們定義系統(tǒng)端到端流為線程級的流路徑組合, 即由四個線程的流規(guī)范及其之間的鏈接交替構(gòu)成。根據(jù)步驟1,利用Eclipse平臺的OSTAE工具對控制系統(tǒng)的AADL模型進(jìn)行實(shí)例化 操作,得到AADL實(shí)例模型。根據(jù)步驟2,將步驟1中的AADL實(shí)例模型轉(zhuǎn)換為基于SystemC描述的實(shí)例模型,將 AADL軟件構(gòu)件轉(zhuǎn)換為C++格式的用戶代碼,相應(yīng)代碼如下int Mymain(int argc, char** argv);void氺 user—code(void氺){char*argv[] = {" cruise, χ" };Mymain (1, argv);}將AADL硬件構(gòu)件轉(zhuǎn)換為SystemC格式的硬件實(shí)例,相應(yīng)代碼如下UC_TLM_bus_class *bus ;bus = new UC_TLM_bus_class(sc_gen_unique_name(〃 HAL" ),100000000);bus- > set_memory_address(RAM_START);UC_hw_memory*hcimem = new UC_hw_memory(" Hci_Memory" ,0x80000000, 0x80001000,100);UC_hw_memory*ccImem = new UC_hw_memory(" Ccl_Memory" ,0x80001001, 0x80002000,100);engspd_sensor*Hci_Engspd_sensor = new engspd_sensor(" Hci_Engspd_ sensor" ,0x80002001,0x80003000,20000*1000);throttlepos氺Ccl_Throttlepos = newthrottlepos( " Ccl_Throttlepos ", 0x80003001,0x80004000,20000*1000);((UC_master_base*) Hci_Engspd_sensor) _> bind (bus);將AADL系統(tǒng)構(gòu)件轉(zhuǎn)換為C++描述的操作系統(tǒng)對象實(shí)例,相應(yīng)代碼如下rtos = new UC_rtos_class(1);將步驟1中AADL實(shí)例模型中的流轉(zhuǎn)換為C++格式的測試模型,流的結(jié)構(gòu)圖示如圖1所描述,相應(yīng)代碼如下 rtos- > port_list = new port_list_class ();portso = new flow—port_class(0,1, “ Button—Panel_out “ , “ Button— Panel",0);rtos- > port_list- > port_list. push—back(portso);flowsource = new flowsource_class(0, “ Button—Panel“ ,portso);portri = new flow—port—class (0,0, “ Refspf_in,r , “ Refspdir ,0);rtos- > port_list- > port_list. push—back (portri);fpbr = new flowpath_class (" br",“ rtos" ,3,0);fpbr- > port_list. push—back (portso);fpbr- > port_list. push—back (portri);portro = new flow—port_class (1,1,“ Refspd—out",“ Refspd/r,0);rtos- > port_list- > port_list. push—back (portro);fpr = new flowpath_class(" Refspd—flowpath“ , “ Refspd" ,0,1);fpr- > port_list. push—back (portri);fpr- > port_list. push—back (portro);portcli = new flow—port_class(1,0, ” Cruisel_in〃 , ” Cruisel“ ,0);rtos- > port_list- > port_list. push—back(portcli);fprc = new flowpath_class (" rc",“ rtos" ,3,0);fprc- > port_list. push—back (portro);fprc- > port_list. push—back (portcli);portclo = new flow—port_class(1,1, ” Cruisel_out〃 , ” Cruisel“ ,0);rtos- > port_list- > port_list. push—back(portclo);fpcl = new flowpath_class (/r Cruisel_f lowpath/r , “ Cruisel/r ,0,1);fpcl- > port_list. push—back (portcli);fpcl- > port_list. push—back (portclo);portsi = new flow—port—class (1,0, “ Cruise2_in/r , “ Cruise2/r ,0);rtos- > port_list- > port_list. push—back (portsi);fpcc = new flowpath_class (" cc",“ rtos" ,3,0);fpcc- > port_list. push—back (portclo);fpcc- > port_list. push—back (portsi);flowsink = new flowsink—class(1, 〃 Cruise2〃 ,portsi);flowpath = new flowpath_class(" flowpath" , “ rtos" ,3,3);flowpath- > port_list. push—back (portso);flowpath- > port_list. push—back (portri);flowpath- > port_list. push—back (portro);flowpath- > port_list. push—back (portcli);flowpath- > port_list. push—back(portclo);flowpath- > port_list. push—back (portsi);
flowpath- > flowpath_list. push—back(fpbr);flowpath- > flowpath—list· push—back(fpr);flowpath- > flowpath_list. push—back(fprc);flowpath- > flowpath_list. push—back(fpcl);
flowpath- > flowpath_list. push—back(fpcc);flow = new flow—class(" cruise_flow“ , flowsource, flowsink, flowpath);rtos- > flow—list· push—back (flow);根據(jù)步驟3,將步驟2中的用戶代碼、硬件實(shí)例和操作系統(tǒng)對象實(shí)例組合成為可執(zhí) 行的系統(tǒng)實(shí)例,相應(yīng)代碼如下(水rtos)
- > new—process (user_code,NULL);(*rtos)
- > bind (bus);bus-> bind (hcimem);bus-> bind (cclmem);bus- > bind(Hci—Engspd—sensor);bus- > bind(Ccl_Throttlepos);bus- > generate—memory—map ();根據(jù)步驟4,將步驟2中的C++格式描述的測試模型的端口實(shí)例的調(diào)用方法,添加 至端口所屬的步驟3中的系統(tǒng)實(shí)例的構(gòu)件實(shí)例中。根據(jù)步驟5,用SystemC提供的仿真函數(shù)驅(qū)動步驟3中得到的系統(tǒng)實(shí)例和步驟2中 得到的測試模型,并在系統(tǒng)實(shí)例和測試模型運(yùn)行的過程中對各構(gòu)件端口的通信時間進(jìn)行監(jiān) 測和記錄,記錄結(jié)果如圖4所示,ButtoruPanel為按鈕板線程,Refspd為仲裁線程,Cruisel 為主線程,Cruise2為備用線程。流路徑的深度表示從端到端流開始流路徑自頂向下的層 級序號,序號后面的數(shù)據(jù)依次為該段流路徑延時時間、流路徑的起始端口、終止端口以及 這兩個端口的數(shù)據(jù)通信時間。從圖中我們可以看到,流源和流接收器的對應(yīng)構(gòu)件分別為按 鈕板線程和備用線程。系統(tǒng)創(chuàng)建了不同深度的兩層流路徑深度為0的第一層流路徑為系 統(tǒng)級端到端流,起始于流源,終止于流接收器;深度為1第二層流路徑的為線程級流路徑分 解,交替包含3個同級傳輸鏈接和2個底層流路徑。流路徑所覆蓋的線程為仲裁線程和主 線程。根據(jù)步驟6,在步驟5的仿真運(yùn)行過程結(jié)束后,將步驟5中監(jiān)測和記錄的各構(gòu)件端 口的通信時間賦值給構(gòu)件實(shí)例的通信時間數(shù)據(jù)結(jié)構(gòu),求得構(gòu)件實(shí)例輸出數(shù)據(jù)與輸入數(shù)據(jù)時 間的差值,賦值給表示延時的數(shù)據(jù)結(jié)構(gòu),并按照步驟2中的測試模型中的計(jì)算公式計(jì)算各 層級流延時的值,計(jì)算結(jié)果如圖4中各深度序號后面的數(shù)據(jù)所示。根據(jù)步驟7,當(dāng)步驟2中測試模型的各層級流的構(gòu)件序列符合步驟1中的實(shí)例模型 的描述,檢查測試模型中構(gòu)件間通信兩端的端口實(shí)例;當(dāng)通信端兩端口為相同類型,且連接 順序?yàn)檩斎攵丝谂c輸出端口的搭配情況,檢查測試模型中各層級流的流延時值;當(dāng)各層級 流的流延時值按照步驟1的實(shí)例模型中的信息流的順序形成單調(diào)時序,并且無不符合步驟 1的實(shí)例模型設(shè)計(jì)約束的情況,得到流延時屬性測試結(jié)果正確的結(jié)論,證明流延時符合模型 設(shè)計(jì)需求,如圖4所示。測試結(jié)果說明系統(tǒng)端到端流的端口序列與端到端流的流源、流接收器構(gòu)件序列相匹配;
各同級傳輸鏈接和各底層流路徑的端口的輸入輸出類型符合設(shè)計(jì)邏輯,且端口序 列與構(gòu)件序列相吻合,下推自動機(jī)運(yùn)行結(jié)果正確;其端口序列中存儲的發(fā)送時間和接收時間符合時刻單調(diào)遞增的關(guān)系,說明信息按 流路徑傳輸正確;線程級同級傳輸鏈接的延時值分別為14. 100ms,36. 381ms和56. 406ms,線程級底 層流路徑延時分別為Oms和0. OOlms (此處簡化任務(wù)對數(shù)據(jù)的處理時間加速仿真過程,并不 影響系統(tǒng)仿 真運(yùn)行和流延時屬性的測試),系統(tǒng)級端到端流延時為106. 888ms,小于約束中 所描述的140ms,測試結(jié)果證明流延時滿足系統(tǒng)設(shè)計(jì)需求。至此,已完成對嵌入式系統(tǒng)模型流延時屬性的測試。
權(quán)利要求
1. 一種基于模型的嵌入式系統(tǒng)流延時屬性測試方法,其特征在于步驟如下 步驟1 利用Eclipse平臺的OSTAE工具對需要評估的AADL系統(tǒng)進(jìn)行實(shí)例化操作,得 到AADL實(shí)例模型;步驟2 將步驟1中的AADL實(shí)例模型轉(zhuǎn)換為基于SystemC描述的實(shí)例模型,轉(zhuǎn)換方法 如下將AADL軟件構(gòu)件轉(zhuǎn)換為C++格式的用戶代碼;將AADL硬件構(gòu)件轉(zhuǎn)換為SystemC格式的硬件實(shí)例;將AADL系統(tǒng)構(gòu)件轉(zhuǎn)換為C++描述的操作系統(tǒng)對象實(shí)例;將步驟1中AADL實(shí)例模型中的流轉(zhuǎn)換為C++格式的測試模型,轉(zhuǎn)換方法如下將流中的各AADL構(gòu)件轉(zhuǎn)換為C++格式的實(shí)例;將流中的各端口轉(zhuǎn)換為C++格式的端口實(shí)例;將流中的各鏈接、路徑轉(zhuǎn)換為C++格式的流路徑實(shí)例;步驟3 將步驟2中的用戶代碼、硬件實(shí)例和操作系統(tǒng)對象實(shí)例組合成為可執(zhí)行的系統(tǒng) 實(shí)例,組合方法如下將用戶代碼用SystemC可識別的快速線程標(biāo)準(zhǔn)函數(shù)封裝成為線程,添加至操作系統(tǒng)對 象實(shí)例的線程管理結(jié)構(gòu)中;將操作系統(tǒng)對象實(shí)例的線程管理結(jié)構(gòu)中的線程作為硬件實(shí)例中的CPU實(shí)例的運(yùn)行線程;將硬件實(shí)例中的總線實(shí)例的端口與其他硬件實(shí)例的端口相連接; 將CPU實(shí)例與總線實(shí)例設(shè)為主動實(shí)例,其他與其相連的硬件實(shí)例設(shè)為從動實(shí)例,使前 者夠調(diào)用后者的功能;步驟4 將步驟2中的C++格式描述的測試模型的端口實(shí)例的調(diào)用方法,添加至端口所 屬的步驟3中的系統(tǒng)實(shí)例的構(gòu)件實(shí)例中;步驟5 用SystemC提供的仿真函數(shù)驅(qū)動步驟3中得到的系統(tǒng)實(shí)例和步驟2中得到的 測試模型,并在系統(tǒng)實(shí)例和測試模型運(yùn)行的過程中對各構(gòu)件端口的通信時間進(jìn)行監(jiān)測和記 錄;步驟6 在步驟5的仿真運(yùn)行過程結(jié)束后,將步驟5中監(jiān)測和記錄的各構(gòu)件端口的通 信時間賦值給構(gòu)件實(shí)例的通信時間數(shù)據(jù)結(jié)構(gòu),求得構(gòu)件實(shí)例輸出數(shù)據(jù)與輸入數(shù)據(jù)時間的差 值,將差值賦值給表示延時的數(shù)據(jù)結(jié)構(gòu),并按照步驟2中的測試模型中的計(jì)算公式計(jì)算各 層級流延時的值;步驟7 當(dāng)步驟2中測試模型的各層級流的構(gòu)件序列符合步驟1中的實(shí)例模型的描述 時,檢查測試模型中構(gòu)件間通信兩端的端口實(shí)例;當(dāng)通信端兩端口為相同類型,且連接順序?yàn)檩斎攵丝谂c輸出端口的搭配情況時,檢查 測試模型中各層級流的流延時值;當(dāng)各層級流的流延時值按照步驟1的實(shí)例模型中的信息流的順序形成單調(diào)時序,并且 無不符合步驟1的實(shí)例模型設(shè)計(jì)約束時,得到流延時屬性測試結(jié)果正確的結(jié)論; 當(dāng)上述條件成立時,證明流延時符合模型設(shè)計(jì)需求;當(dāng)上述各條件有任何一項(xiàng)不滿足,得到流延時屬性測試結(jié)果錯誤的結(jié)論,證明流延時 不符合模型設(shè)計(jì)需求;至此獲得全部測試結(jié)果。
全文摘要
本發(fā)明涉及一種基于模型的嵌入式系統(tǒng)流延時屬性測試方法,其特征在于基于SystemC硬件描述語言搭建AADL模型仿真測試平臺,將AADL模型轉(zhuǎn)換為測試平臺可執(zhí)行的系統(tǒng)實(shí)例,并對流中的構(gòu)件序列和端口序列進(jìn)行抽象和映射,將AADL模型中的流轉(zhuǎn)換為C++描述的測試模型,在系統(tǒng)實(shí)例仿真執(zhí)行的過程中完成對AADL流延時屬性的測試,并對測試結(jié)果進(jìn)行分析與評估。能夠在模型的設(shè)計(jì)階段動態(tài)測試AADL模型的流延時屬性,并根據(jù)測試結(jié)果迭代構(gòu)造和精化設(shè)計(jì)模型,以便盡早發(fā)現(xiàn)設(shè)計(jì)模型中存在的問題,提高AADL模型設(shè)計(jì)初期的開發(fā)效率。
文檔編號G06F11/36GK102073585SQ201010564678
公開日2011年5月25日 申請日期2010年11月25日 優(yōu)先權(quán)日2010年11月25日
發(fā)明者張?jiān)品? 張凡, 朱宇峰, 董云衛(wèi), 馬春燕 申請人:西北工業(yè)大學(xué)