不斷增加的復(fù)雜性和異質(zhì)化正在衍生出一些新的方法,能夠避免在設(shè)計(jì)周期結(jié)束時(shí)出現(xiàn)意外。
在一個(gè)系統(tǒng)中,硬件的表現(xiàn)是否優(yōu)秀取決于運(yùn)行在其上的軟件。隨著系統(tǒng)復(fù)雜性的增加,總是軟件在拖后腿。
縮小硬件和軟件差距的方法是不斷改進(jìn)軟件開發(fā)的方法。在把軟件部署運(yùn)行在硬件上之前,確保軟件升級(jí)都進(jìn)行了驗(yàn)證和測(cè)試,并進(jìn)行之前芯片制造商開發(fā)硬件時(shí)進(jìn)行的同類的詳細(xì)檢查。
試圖將軟件開發(fā)過程提前并不是什么新主意。多年來,業(yè)界開發(fā)了一系列的方法解決這個(gè)問題。比如敏捷軟件開發(fā)方法,它試圖通過兩個(gè)或更多的軟件開發(fā)者同時(shí)進(jìn)行同一個(gè)代碼的開發(fā)來降低錯(cuò)誤。此外還包括持續(xù)集成方法,它是從另外一個(gè)角度解決這個(gè)問題的,這個(gè)方法的本質(zhì)是,將代碼持續(xù)不斷地加入共享的代碼庫或開發(fā)分支中,進(jìn)行頻繁的自動(dòng)構(gòu)建,以在早期發(fā)現(xiàn)和驗(yàn)證問題。
Mentor嵌入式部門產(chǎn)品管理總監(jiān)Warren Kurisu說:“越來越多的開發(fā)團(tuán)隊(duì)正在使用持續(xù)集成方法作為簡化整體開發(fā)流程的手段,并避免在開發(fā)集成階段出現(xiàn)令人討厭的意外。基于模型的設(shè)計(jì)方法通過模擬和自動(dòng)代碼生成進(jìn)行了大量的工作,可以支持這種方法過程。”
通過持續(xù)集成,可以在構(gòu)建硬件設(shè)備的同時(shí),構(gòu)建一個(gè)單純從概念出發(fā)的數(shù)字映像。在這種方法的加持下,多個(gè)更加獨(dú)立的團(tuán)隊(duì)可以同時(shí)開發(fā),這時(shí),更好地踐行持續(xù)集成概念就變成了各個(gè)團(tuán)隊(duì)的代碼“何時(shí)”準(zhǔn)備好集成進(jìn)系統(tǒng)的問題。
“多團(tuán)隊(duì)同時(shí)開發(fā)的方法是對(duì)持續(xù)集成模式的一種認(rèn)可,這種方法使開發(fā)商能夠更早地對(duì)設(shè)計(jì)進(jìn)行驗(yàn)證,并允許開發(fā)人員根據(jù)數(shù)字映像模型驗(yàn)證其代碼和測(cè)試系統(tǒng)配置。”Kurisu說。“舉一個(gè)簡單的例子吧,比如Linux進(jìn)程。這種架構(gòu)設(shè)計(jì)使應(yīng)用程序開發(fā)人員能夠在其桌面開發(fā)系統(tǒng)上創(chuàng)建應(yīng)用程序,只要它們遵守Linux編程模型,這些應(yīng)用程序就可以在最終階段順利集成,甚至可以在系統(tǒng)部署后加載。如果系統(tǒng)架構(gòu)師需要更嚴(yán)格的分離模型,則可以使用獨(dú)立的執(zhí)行環(huán)境,如Linux容器或Docker容器。這種模式不僅適用于Linux,實(shí)時(shí)操作系統(tǒng)也和Linux進(jìn)程很像,包括一個(gè)允許代碼分離的進(jìn)程模型。”
一旦在進(jìn)程或分區(qū)中運(yùn)行的代碼就緒,就可以將其納入到連續(xù)集成工作流中。雖然這似乎是一個(gè)顯而易見的步驟,但它的效果很好,可以很快地將各種異構(gòu)組件融合在一起。
“例如,集成了四核ARM Cortex-A53內(nèi)核、Cortex-R5內(nèi)核和FPGA架構(gòu),并具有可實(shí)現(xiàn)功能分離的多個(gè)電源層的Xilinx UltraScale + MPSoC,”Kurisu說。“可以預(yù)計(jì)的情景是多個(gè)開發(fā)團(tuán)隊(duì)同時(shí)為這個(gè)SoC編寫代碼,一個(gè)團(tuán)隊(duì)在應(yīng)用內(nèi)核上開發(fā)Linux,一個(gè)團(tuán)隊(duì)在實(shí)時(shí)內(nèi)核上開發(fā)安全應(yīng)用程序,另一個(gè)團(tuán)隊(duì)在FPGA架構(gòu)上實(shí)現(xiàn)算法。在總體架構(gòu)上,這些應(yīng)用可以通過已定義的接口進(jìn)行通信。一方面,這些獨(dú)立團(tuán)隊(duì)自身可能會(huì)使用持續(xù)集成方法來構(gòu)建在其內(nèi)核上運(yùn)行的代碼,另一方面,當(dāng)系統(tǒng)所有內(nèi)核上的代碼都就緒后,主要的集成工作就會(huì)開始。和上面一樣,持續(xù)集成的問題就是進(jìn)行全系統(tǒng)集成的代碼何時(shí)準(zhǔn)備就緒。”
基礎(chǔ)問題
系統(tǒng)的復(fù)雜性一直在穩(wěn)步增長,部分原因是沒有人確定虛擬/增強(qiáng)現(xiàn)實(shí)、汽車、醫(yī)療、工業(yè)物聯(lián)網(wǎng)和深度學(xué)習(xí)等各種新興市場(chǎng)需要什么樣的芯片或功能。在這種情況下,一種常見的方法是將多個(gè)類型的處理器和功能集成在一顆芯片上,通過軟件把各個(gè)組件融合在一起,這比將所有組件放入各個(gè)分立的ASIC中更便宜。
Aldec硬件部總經(jīng)理Zibi Zalewski表示:“最終配置是根據(jù)目標(biāo)市場(chǎng)或客戶要求創(chuàng)建的。“子系統(tǒng)的可擴(kuò)展性使您可以快速增加系統(tǒng)規(guī)模和復(fù)雜性。現(xiàn)在,把一個(gè)系統(tǒng)從雙核擴(kuò)展到四核不算什么大問題,沒有適當(dāng)?shù)墓ぞ卟攀钦嬲膯栴}所在。此外,硬件部分不再是決定項(xiàng)目的主要元素,系統(tǒng)復(fù)雜性主要來自于軟件層。所以不單單是晶體管數(shù)量問題,還包括功能要求。”
這與系統(tǒng)整體質(zhì)量有直接的關(guān)系,最終是衡量創(chuàng)建該系統(tǒng)的各種方法的有效性。
ARM模型技術(shù)總監(jiān)Bill Neifert說:“評(píng)估質(zhì)量時(shí),挑戰(zhàn)在于它不僅僅涉及芯片的質(zhì)量。它衡量的是整個(gè)系統(tǒng),會(huì)衍生出區(qū)段問題。每個(gè)設(shè)計(jì)中都有你關(guān)心的東西,但對(duì)于汽車、工業(yè)和企業(yè)計(jì)算而言,關(guān)心對(duì)象又有所不同。一些涉及不同的硬件,另外一些則是相同硬件上的不同應(yīng)用。如果您正在處理需要記錄和證據(jù)的安全相關(guān)問題,你需要關(guān)心的就是軟件過程和底層硬件。記住,你能證明到什么程度,質(zhì)量就是什么水平。”
最大限度降低意外
不管選擇的方法有多好,總會(huì)有一些錯(cuò)誤發(fā)生。所以,這里的目標(biāo)是盡量減少項(xiàng)目開發(fā)最終階段的意外,記住,沒有任何一種方法能夠完全消除意外。
“當(dāng)您編寫應(yīng)用程序時(shí),您真的必須在真實(shí)的目標(biāo)上運(yùn)行一下它,因?yàn)槟赡軟]有正確地分配內(nèi)存,或者您可能只有只能在ARM上使用的二進(jìn)制庫,而很多人卻試圖在x86上測(cè)試嵌入式系統(tǒng),“Imperas Software首席執(zhí)行官Simon Davidmann說。“Jenkins是一個(gè)經(jīng)常被提及的開源自動(dòng)化服務(wù)器,代碼可以在ARM、MIPS或瑞薩處理器上運(yùn)行,不需要任何管理工作,在幾分鐘之內(nèi)就可以得到一個(gè)“測(cè)試通過”的結(jié)果。你可以把Jenkins看做運(yùn)行對(duì)象,你可以說,'這是我的機(jī)器。我有四臺(tái)機(jī)器可以運(yùn)行測(cè)試',其他人也可以共享Jenkins資源。它可以簡化最簡單的程序,即便你的程序只有一個(gè)只包含一個(gè)算法的文件,它也允許你構(gòu)建工程并運(yùn)行,當(dāng)你修改了代碼,它可以自動(dòng)化地充分測(cè)試并記錄。當(dāng)然,您必須了解Jenkins的產(chǎn)品如何工作或模擬器的工作原理,但是只需要幾千美元,您就能獲得可以非常有效地進(jìn)行編譯、構(gòu)建、測(cè)試和驗(yàn)證的系統(tǒng)。”
Synopsys的MetaWare產(chǎn)品經(jīng)理Allen Watson說:“我們生產(chǎn)的軟件是允許人們開發(fā)軟件的工具。我們的客戶使用我們的工具編寫嵌入式軟件,但同時(shí)我們的工具本身也是軟件。雖然有一些差異,但歸根結(jié)底我們和客戶們都在編寫軟件,這是一個(gè)非常復(fù)雜的軟件。我們自己也在小組內(nèi)采用持續(xù)集成方法,沒有其它方法能夠替代這種開發(fā)方式。我們有多個(gè)開發(fā)人員編寫同一個(gè)產(chǎn)品的軟件,但他們承擔(dān)不同的任務(wù)。通常,他們先寫自己的代碼,在本地進(jìn)行一些單元測(cè)試,準(zhǔn)備好后,就把代碼并到軟件的主線開發(fā)分支上。
但是,并不是每個(gè)人都認(rèn)可這個(gè)概念。Uniquify營銷副總裁Graham Bell認(rèn)為,重點(diǎn)應(yīng)該是反復(fù)性而不是持續(xù)集成。
“持續(xù)意味著不間斷地繼續(xù)下去,而反復(fù)意味著活動(dòng)之間可以暫停,”他說。“當(dāng)然,嵌入式軟件的集成工作會(huì)反復(fù)經(jīng)歷一系列的集成-測(cè)試 - 修改活動(dòng),直到特征漂移結(jié)束或者bug數(shù)量達(dá)到了設(shè)計(jì)簽收級(jí)別。這就是這個(gè)過程中暫停的地方。隨著設(shè)計(jì)從硅虛擬原型轉(zhuǎn)移到硬件原型,最終再轉(zhuǎn)移到消費(fèi)者手中的產(chǎn)品,這種集成循環(huán)會(huì)一再發(fā)生。有些人可能會(huì)認(rèn)為,集成工作的這些階段現(xiàn)在是重疊的,因?yàn)楦鱾€(gè)設(shè)計(jì)團(tuán)隊(duì)需要盡早獲得有關(guān)工作設(shè)計(jì)的知識(shí),以加速自己工作的設(shè)計(jì)簽收。如果是這種情況,那么也許我們可以說,這些同步進(jìn)行的工作正在導(dǎo)致嵌入式軟件的持續(xù)整合。”
這不僅僅是定義上的分歧,它影響著基礎(chǔ)方法論。和支持反復(fù)整合的企業(yè)相比,支持持續(xù)整合的企業(yè)數(shù)量增長更多。
Austemper設(shè)計(jì)系統(tǒng)公司首席執(zhí)行官Sanjay Pillay認(rèn)為,持續(xù)集成是實(shí)現(xiàn)最佳上市時(shí)間的唯一途徑。“目前復(fù)雜的SoC及其開發(fā)時(shí)間表無法通過使用硬件-固件-軟件的串行開發(fā)方法來實(shí)現(xiàn)。工程團(tuán)隊(duì)現(xiàn)在必須包括硬件開發(fā)人員和嵌入式軟件設(shè)計(jì)人員,而且軟件設(shè)計(jì)人員的數(shù)量往往超過硬件設(shè)計(jì)人員。他們一起開始這個(gè)項(xiàng)目,并在整個(gè)項(xiàng)目周期中并肩協(xié)作。”
但是,隨著設(shè)計(jì)中異構(gòu)組件的數(shù)量不斷增多,持續(xù)集成也只是簡化開發(fā)流程的其中一個(gè)選擇。
Mentor的Kurisu說:“人們可以爭辯說,今天最先進(jìn)的軟件和硬件不再需要持續(xù)集成方法。但是我認(rèn)為,基于模型的設(shè)計(jì)實(shí)際上激發(fā)了持續(xù)集成方法的活力,并放大了這種方法的作用。”
評(píng)論列表
我要評(píng)論