不斷增加的復(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ù)不斷地加入共享的代碼庫(kù)或開發(fā)分支中,,進(jìn)行頻繁的自動(dòng)構(gòu)建,,以在早期發(fā)現(xiàn)和驗(yàn)證問題。
Mentor嵌入式部門產(chǎn)品管理總監(jiān)Warren Kurisu說:“越來越多的開發(fā)團(tuán)隊(duì)正在使用持續(xù)集成方法作為簡(jiǎn)化整體開發(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)配置?!盞urisu說,。“舉一個(gè)簡(jiǎn)單的例子吧,,比如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)程模型,?!?/p>
一旦在進(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說?!翱梢灶A(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)備就緒,?!?/p>
基礎(chǔ)問題
系統(tǒng)的復(fù)雜性一直在穩(wěn)步增長(zhǎng),部分原因是沒有人確定虛擬/增強(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)建的?!白酉到y(tǒng)的可擴(kuò)展性使您可以快速增加系統(tǒng)規(guī)模和復(fù)雜性?,F(xiàn)在,把一個(gè)系統(tǒng)從雙核擴(kuò)展到四核不算什么大問題,,沒有適當(dāng)?shù)墓ぞ卟攀钦嬲膯栴}所在,。此外,硬件部分不再是決定項(xiàng)目的主要元素,,系統(tǒng)復(fù)雜性主要來自于軟件層,。所以不單單是晶體管數(shù)量問題,還包括功能要求,?!?/p>
這與系統(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ì)量就是什么水平?!?/p>
最大限度降低意外
不管選擇的方法有多好,,總會(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)制庫(kù),,而很多人卻試圖在x86上測(cè)試嵌入式系統(tǒng),“Imperas Software首席執(zhí)行官Simon Davidmann說,?!癑enkins是一個(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資源,。它可以簡(jiǎn)化最簡(jiǎn)單的程序,,即便你的程序只有一個(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營(yíng)銷副總裁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ù)整合?!?/p>
這不僅僅是定義上的分歧,,它影響著基礎(chǔ)方法論。和支持反復(fù)整合的企業(yè)相比,,支持持續(xù)整合的企業(yè)數(shù)量增長(zhǎng)更多,。
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é)作,?!?/p>
但是,隨著設(shè)計(jì)中異構(gòu)組件的數(shù)量不斷增多,,持續(xù)集成也只是簡(jiǎn)化開發(fā)流程的其中一個(gè)選擇,。
Mentor的Kurisu說:“人們可以爭(zhēng)辯說,今天最先進(jìn)的軟件和硬件不再需要持續(xù)集成方法,。但是我認(rèn)為,,基于模型的設(shè)計(jì)實(shí)際上激發(fā)了持續(xù)集成方法的活力,并放大了這種方法的作用,?!?/p>