工程師一刻也沒忘記交付達到質(zhì)量、時間安排和預(yù)算目標(biāo)的項目的需求。您可以借鑒嵌入式系統(tǒng)開發(fā)人員社區(qū)多年來累計的經(jīng)驗教訓(xùn),確保您下一個嵌入式系統(tǒng)項目達成這些目標(biāo)。下面我們來了解一些為嵌入式開發(fā)帶來了最佳實踐的重要經(jīng)驗。
系統(tǒng)地思考
系統(tǒng)工程是一個廣泛的專業(yè)領(lǐng)域,覆蓋從航空母艦及衛(wèi)星到實現(xiàn)其性能的嵌入式系統(tǒng)的所有開發(fā)工作。我們可以運用系統(tǒng)工程方法管理從概念到使用周期結(jié)束處置的嵌入式系統(tǒng)工程生命周期。系統(tǒng)工程方案的第一階段跟常人想象的不一樣,,不是確立系統(tǒng)需求,而是制定系統(tǒng)工程管理規(guī)劃。這一規(guī)劃不僅將為系統(tǒng)定義工程生命周期以及開發(fā)團隊將要開展的設(shè)計評審,而且還將定義這些評審的預(yù)期輸入輸出。該規(guī)劃可根據(jù)工程事件的次序和每個階段的先決條件,為項目管理、工程和客戶群體做出明確的定義。簡而言之,它可展示預(yù)期和可交付項。在清楚理解工程生命周期的情況下,系統(tǒng)思考的下一步是確立正在開發(fā)嵌入式系統(tǒng)的需求。良好的需求集應(yīng)覆蓋三個方面。功能需求定義嵌入式系統(tǒng)如何開展工作。非功能需求定義法規(guī)遵從與可靠性等方面的問題。環(huán)境需求定義工作溫度和沖擊與振動以及電氣環(huán)境(例如 EMI 和 EMC)等方面的需求。在較大規(guī)模的開發(fā)工作中,這些需求將從較高層次的規(guī)范向下延伸并且可跟蹤,比如系統(tǒng)或子系統(tǒng)規(guī)范(圖 1)。如果沒有較高層次的規(guī)范,我們必須在開發(fā)過程中接觸利益相關(guān)方,確立一套明確的利益相關(guān)方需求,然后將其用于確立嵌入式系統(tǒng)需求。
?
生成一個良好的需求集,需要我們充分思考每一個需求,才能確保其符合這些標(biāo)準(zhǔn):
1.它是必要的。沒有需求,我們的項目就不會取得成功。
2.它是可驗證的。我們必須確保該需求能通過檢驗、測試、分析或演示實現(xiàn)。
3.它是可實現(xiàn)的。技術(shù)層面上是可以實現(xiàn)的。
4.它是可追蹤的。該需求能夠從較低層次的需求進行追蹤,而且可追蹤較高層次的需求。
5.它是唯一的。這項標(biāo)準(zhǔn)可防止需求之間的界限不清。
6.它是簡單清晰的。每條需求指定一項功能。
使用“應(yīng)該”。非強制性要求可讓我們表達必要的系統(tǒng)屬性。
在我們確立了我們的需求底線后,最佳實踐就是創(chuàng)建一個合規(guī)矩陣,說明符合每項需求。我們還可以通過為每項需求分配一種驗證方法開始確立我們的驗證策略。這些方法一般是測試、分析、檢驗、演示和交叉讀取。根據(jù)合規(guī)及驗證矩陣創(chuàng)建需求能讓我們:
?
清晰地了解系統(tǒng)行為。?
向內(nèi)部測試團隊和外部客戶都演示驗證方法。這不僅可在開發(fā)過程的早期階段發(fā)現(xiàn)任何困難的測試方法,而且還可幫助我們確定所需的資源。
確定技術(shù)性能指標(biāo)。這些指標(biāo)來自合規(guī)矩陣,由存在無法合規(guī)的風(fēng)險的各種需求構(gòu)成。
?
分配工程預(yù)算
每個工程項目都涵蓋一定數(shù)量的預(yù)算,我們應(yīng)將其分配給在架構(gòu)中識別的解決方案。預(yù)算分配不僅可確保項目實現(xiàn)整體需求,而且還可確保每個模塊的設(shè)計牽頭人理解模塊的分配,以創(chuàng)建適當(dāng)?shù)慕鉀Q方案。我們分配預(yù)算的典型領(lǐng)域有功能的總質(zhì)量、功能的總功耗、用平均故障間隔時間或成功概率定義的可靠性以及設(shè)計中信號類型間的正當(dāng)串?dāng)_(一般是一套適用于大量功能的通用規(guī)則集)。確立工程預(yù)算最重要的方面之一是確保我們有足夠的應(yīng)急分配。但我們必須戰(zhàn)勝應(yīng)急再加應(yīng)急的想法,因為這會成為影響時間安排和成本的嚴重技術(shù)問題。
為在我們架構(gòu)中使用的每項技術(shù)分配一個技術(shù)就緒指數(shù),再結(jié)合合規(guī)矩陣,可幫助我們確定技術(shù)風(fēng)險的所在位置。
管理技術(shù)風(fēng)險
從合規(guī)矩陣及工程預(yù)算的生成看,我們應(yīng)該能夠識別在技術(shù)上有難度的需求。每一個這類有風(fēng)險的需求都應(yīng)該有明確的規(guī)避計劃,其將說明我們將如何實現(xiàn)這一需求。展示這一點的最佳途徑之一是使用技術(shù)就緒指數(shù) (TRL)。TRL 有 9 級,從所觀察到的基本原理 (TRL1) 到完整功能與實地部署 (TRL9) 描述設(shè)計成熟度級數(shù)。把 TRL 分配給我們架構(gòu)中使用的每一項技術(shù),再結(jié)合合規(guī)矩陣,可幫助我們確定技術(shù)風(fēng)險的所在位置。我們隨后可啟動一個 TRL 開發(fā)規(guī)劃,確保在項目不斷推進時,低 TRL 領(lǐng)域會提升到所需的 TRL 水平。該規(guī)劃涉及的內(nèi)容可確保我們在項目推進時實現(xiàn)和測試正確的功能,或是在項目推進的過程中執(zhí)行功能或環(huán)境/動態(tài)測試。
?
該架構(gòu)不應(yīng)僅限于硬件(電氣)解決方案,還應(yīng)包含 FPGA/SoC 及相關(guān)軟件的架構(gòu)
創(chuàng)建架構(gòu)
理解嵌入式系統(tǒng)要求的行為后,我們就需要為解決方案創(chuàng)建一個架構(gòu)。該架構(gòu)將由分組成功能塊的需求構(gòu)成。例如,如果嵌入式系統(tǒng)必須處理模擬輸入或輸出,架構(gòu)就將包含模擬 I/O 模塊。其它模塊可能會更加明顯,比如電源調(diào)節(jié)、時鐘和復(fù)位生成。
該架構(gòu)不應(yīng)僅限于硬件(電氣)解決方案,還應(yīng)包含 FPGA/SoC 及相關(guān)軟件的架構(gòu)。當(dāng)然,模塊化設(shè)計的關(guān)鍵是針對模塊及功能行為的良好接口文檔編制。
該架構(gòu)的一個關(guān)鍵方面是展現(xiàn)如何在高層次上創(chuàng)建系統(tǒng),這樣工程團隊就能輕松理解其實現(xiàn)方式。該步驟也是在系統(tǒng)運行生命周期中為系統(tǒng)提供支持的關(guān)鍵。
在確定我們的架構(gòu)時,我們需要考慮模塊化方法,這樣不僅能在當(dāng)前項目上進行復(fù)用,而且還能在未來的項目上進行復(fù)用。模塊化要求我們從第一天起就考慮可能的復(fù)用,并要求我們把每個模塊存檔為一個獨立的單元。就內(nèi)部 FPGA/SoC 模塊而言,像 ARM? AMBA? 高級可擴展接口 (AXI) 這樣的通用接口標(biāo)準(zhǔn)有助于實現(xiàn)復(fù)用。
模塊化設(shè)計的一個重大優(yōu)勢就是能夠針對某些需求使用商用現(xiàn)成的模塊。商用現(xiàn)成(COTS)模塊讓我們能夠以更快的速度開發(fā)系統(tǒng),因為借助 COTS,我們能夠把我們的工作重點放在項目從我們的專業(yè)能力產(chǎn)生的增值中獲益最大的部分上。
系統(tǒng)電源架構(gòu)是一個需要縝密思考的的設(shè)計方面。許多嵌入式系統(tǒng)會要求隔離 AC/DC 或 DC/DC 轉(zhuǎn)換器來確保嵌入式系統(tǒng)的故障不會擴散。圖 2 顯示的是電源架構(gòu)的示例。來自該模塊的輸出軌需要二級調(diào)整來為處理內(nèi)核和轉(zhuǎn)換裝置提供電壓。我們必須仔細防范這些階段發(fā)生嚴重的開關(guān)損耗和效率下降。因為效率降低意味著系統(tǒng)熱耗散增大,如果不正確解決就會影響單元的可靠性。我們必須仔細了解使用的線性調(diào)整器的行為以及在電源線上進行進一步濾波的要求。這一要求的原因是 FPGA 和處理器等器件的開關(guān)頻率遠遠高于線性調(diào)整器的控制環(huán)路所能應(yīng)對的水平。隨著噪聲頻率提高,線性調(diào)整器的噪聲抑制能力下降,導(dǎo)致需要采用額外的濾波和去藕技術(shù)。如果不了解這一關(guān)系,會造成混合信號設(shè)備出現(xiàn)問題。
另一個重要的考慮因素是時鐘和復(fù)位架構(gòu),尤其是在有多個需要同步的開發(fā)板的情況下。在架構(gòu)層面我們必須考慮時鐘分配網(wǎng)絡(luò):我們是否在跨多個開發(fā)板扇出單個振蕩器,或是使用多個頻率相同的振蕩器?為確保時鐘分配的穩(wěn)健可靠性,我們必須考慮:
振蕩器啟動時間。我們必須確保在整個時間周期內(nèi)激活復(fù)位(如果需要)。
振蕩器歪斜。如果我們要在跨多個開發(fā)板扇出振蕩器,時序是否至關(guān)重要?如果是,我們需要考慮線路卡上的歪斜(連接器引起的)和緩沖器自身引起的歪斜。
振蕩器抖動。如果我們在開發(fā)混合信號設(shè)計,我們需要確保使用低抖動時鐘源,因為抖動的增大會降低混合信號轉(zhuǎn)換器的信噪比。在我們使用千兆位級串行鏈路時情況也是一樣,因為我們需要使用低抖動時鐘源在鏈路上取得良好的誤碼率。
我們也必須注意復(fù)位架構(gòu),確保只在需要的地方使用復(fù)位。例如基于 SRAM 的 FPGA 一般不需要復(fù)位。如果我們在使用復(fù)位的異步激活,我們需要確保移除它不會導(dǎo)致亞穩(wěn)態(tài)問題。
清晰定義接口
內(nèi)外部接口的正式文檔在機械、物理和電氣層面為各個接口提供清晰的定義,以及協(xié)議和控制流。這些正式文檔也往往被稱為接口控制文檔 (ICD)。當(dāng)然最好是盡量使用標(biāo)準(zhǔn)通信接口。
接口定義最重要的一個方面是外部接口的“連接化”。這個過程考慮了所需連接器的引腳分配,連接器引腳的額定功率以及所要求的插拔次數(shù),以及任何對屏蔽的要求。
在我們?yōu)槲覀兊南到y(tǒng)考慮連接器類型的時候,我們應(yīng)確保不會因為在子系統(tǒng)中使用相同類型連接器而造成不利的交叉連接。通過使用不同類型連接器或采用不同的連接器鍵位(如果支持),我們就能夠避免交叉連接的可能性。
?
連接化是我們開始使用之前確定的預(yù)算要求的首個方面之一。特別是我們可以使用串?dāng)_預(yù)算來指引我們定義引腳分配。圖 3 所示的例子說明了這一流程的重要性。重新安排引腳分配,將接地基準(zhǔn)電壓 (GND) 引腳布局在信號 1 和信號 2 之間,可以降低互感以及由此引發(fā)的串?dāng)_。
接口控制文檔 (ICD) 必須對系統(tǒng)接地進行定義,尤其是在項目要求外部 EMC 的時候。在這種情況下,我們必須小心避免讓有噪聲的信號地產(chǎn)生輻射。
工程師和項目經(jīng)理掌握著一系列策略,以確保他們交付的嵌入式系統(tǒng)能夠滿足質(zhì)量、成本和調(diào)度要求。不過當(dāng)項目遇到困難時,我們可以確信在項目不發(fā)生重大變化的情況下其此前的性能是其未來性能的良好提示。
評論
查看更多