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