基于SystemC描述的嵌入式系統(tǒng)的自動(dòng)化驗(yàn)證
嵌入式系統(tǒng)在國民經(jīng)濟(jì)和國防各個(gè)領(lǐng)域中得到了越來越廣泛的應(yīng)用。隨著微電子技術(shù)和超大規(guī)模集成電路的高速發(fā)展,嵌入式系統(tǒng)的規(guī)模越來越大,硬件部分的異構(gòu)程度和軟件部分的功能復(fù)雜程度都達(dá)到了歷史最高點(diǎn)。在更高的設(shè)計(jì)復(fù)雜度和更短的面市時(shí)間壓力下,提高抽象層次進(jìn)行系統(tǒng)級設(shè)計(jì)已成為解決問題的必然手段。另外,基于IP (intellectualproperty) 構(gòu)件的開發(fā)方法,在IP 的開發(fā)、交換和重用上,也亟待系統(tǒng)級開發(fā)方法的廣泛采用。
系統(tǒng)級開發(fā)方法要求在較高的抽象層次上描述系統(tǒng),并模擬和驗(yàn)證。由于系統(tǒng)的復(fù)雜性,一般不能由系統(tǒng)功能級描述直接綜合到具體的軟硬件實(shí)現(xiàn),需要有多種不同抽象層次的中間級描述。傳統(tǒng)的設(shè)計(jì)方法采用不同的語言描述各種抽象層次,不僅帶來系統(tǒng)描述的不一致性,而且難以勝任軟硬件的協(xié)同驗(yàn)證,不能滿足復(fù)雜嵌入式系統(tǒng)的設(shè)計(jì)需求。因此,人們迫切需要用一種單一語言來完成全部設(shè)計(jì)描述,分析系統(tǒng)體系結(jié)構(gòu)和建立軟硬件協(xié)同驗(yàn)證平臺。這就是所謂的系統(tǒng)級設(shè)計(jì)語言( system level description language ,SLDL) 。
基于C + + 的SystemC 語言主要由眾多EDA(electronic design automation) 工具廠商推出,是目前最受矚目的系統(tǒng)級設(shè)計(jì)語言。它通過擴(kuò)展C + + 類庫來提供對系統(tǒng)硬件結(jié)構(gòu)的描述能力,不僅可以實(shí)現(xiàn)對嵌入式系統(tǒng)軟硬件的統(tǒng)一描述,而且支持從寄存器級硬件模型到系統(tǒng)級計(jì)算模型等各種不同抽象層次的建模,能產(chǎn)生多種抽象層共存的可執(zhí)行模型。因其對軟件的兼容性,以及支持交易級建模( transactionlevel modeling ,TLM) 所帶來的高效模擬速度等特征,近年來迅速成為流行的系統(tǒng)級設(shè)計(jì)和驗(yàn)證語言,尤其適用于軟硬件協(xié)同設(shè)計(jì)、驗(yàn)證以及體系結(jié)構(gòu)分析與優(yōu)化等方面。
現(xiàn)有的SystemC 2.0 語言標(biāo)準(zhǔn)已經(jīng)可以進(jìn)行基本的設(shè)計(jì)驗(yàn)證,而新近推出的SystemC 驗(yàn)證標(biāo)準(zhǔn)(systemC verification standard) 則通過提供一些應(yīng)用程序接口( application programming interface ,API) ,如支持基于交易的驗(yàn)證、可約束的隨機(jī)數(shù)產(chǎn)生、異常處理等,更增強(qiáng)了其驗(yàn)證方面的能力。但是在設(shè)計(jì)過程中,驗(yàn)證方法一般還是采用傳統(tǒng)手段,比如手工實(shí)現(xiàn)測試代碼,然后通過波形圖查看工具等人為的驗(yàn)證等,缺乏對斷言的支持,整個(gè)驗(yàn)證過程的自動(dòng)化程度低??紤]到在典型的設(shè)計(jì)中,驗(yàn)證通常會占用整個(gè)設(shè)計(jì)周期的2/ 3 左右時(shí)間,因此亟需采用高效和精確的驗(yàn)證方法。
因?yàn)镾ystemC 的本質(zhì)是C ++ 的類庫,嵌入式系統(tǒng)SystemC 模型的驗(yàn)證就等同于軟件領(lǐng)域內(nèi)的測試,所以可以借鑒C/ C + + 軟件領(lǐng)域內(nèi)大量的經(jīng)驗(yàn)、工具和新的技術(shù)進(jìn)展。 本文就是如此嘗試:一方面,借鑒C + + 語言的自動(dòng)化測試框架(automated testing f ramework ,ATF) 來實(shí)現(xiàn)驗(yàn)證過程的自動(dòng)化;另一方面,應(yīng)用面向方面編程技術(shù)(aspect oriented programming ,AOP) ,分離和封裝測試代碼。采用這種驗(yàn)證方法,可按需要隨時(shí)靈活地進(jìn)行測試代碼到被測系統(tǒng)的動(dòng)態(tài)植入,對被測系統(tǒng)無干擾,并實(shí)現(xiàn)驗(yàn)證過程的自動(dòng)化。
自動(dòng)化測試框架
目前在軟件領(lǐng)域內(nèi),測試活動(dòng)受到了前所未有的重視,主要表現(xiàn)為測試驅(qū)動(dòng)的開發(fā)方法 。該方法要求在設(shè)計(jì)系統(tǒng)的同時(shí)(甚至之前) 設(shè)計(jì)相關(guān)的測試模型,通過不斷測試來反復(fù)迭代,得到最后的設(shè)計(jì)??梢?在目前的軟件開發(fā)流程中,設(shè)計(jì)、編碼和測試各個(gè)階段的迭代周期變短,需要對代碼頻繁地重構(gòu),這就要求測試活動(dòng)能夠自動(dòng)、簡便、高速地運(yùn)行,自動(dòng)化測試框架(ATF) 因此而得到了廣泛的采用。
在圖1 所示的嵌入式系統(tǒng)開發(fā)流程中,系統(tǒng)級開發(fā)方法著重在較高抽象級對系統(tǒng)的分析和驗(yàn)證,然后自上而下地細(xì)化直到最后的實(shí)現(xiàn)。其間也意味著有頻繁的迭代過程,一方面表現(xiàn)為體系結(jié)構(gòu)、軟硬件劃分上的搜索迭代,另一方面表現(xiàn)為軟硬件協(xié)同模擬和驗(yàn)證,進(jìn)行早期嵌入式軟件的調(diào)試,在更早的階段發(fā)現(xiàn)錯(cuò)誤。 在采用SystemC 作為建模語言的情況下,整個(gè)系統(tǒng)可以方便地用一種語言描述,然后細(xì)化到最后實(shí)現(xiàn);同時(shí)可以利用C ++ 語言的自動(dòng)化測試框架,保證各個(gè)階段測試活動(dòng)的自動(dòng)化運(yùn)行。
評論