線性定常系統
[拼音]:gujian gongcheng
[英文]:firmware engineering
用工程方法研製和維護韌體(微程式)的過程和有關技術。韌體工程包括韌體的需求定義、設計和實現,以及測試維護的理論、方法和工具。韌體工程是把軟體工程的概念、理論和經驗運用於微程式設計。韌體工程和軟體工程的不同,不在於工程方法而在於形式化模型。韌體與硬體的關係比軟體與硬體的關係密切得多;韌體的形式化模型與實現微指令的微程式硬體密切相關。韌體工程要求微程式硬體應是規整的和易於描述的,能把韌體和軟體有機地聯絡成一個整體,並使二者具有公共術語。
隨著器件價格的持續下降,微程式儲存器(控存)容量顯著擴大,可寫微程式儲存器已被普遍採用。從微型機直至大型機都已使用了微程式技術,其應用範圍已從實現機器指令系統擴充套件到由軟體實現的功能,如作業系統部分功能的固化實現等。這就需要在微程式設計中採用韌體工程,即引用軟體工程的理論、概念和技術以提高微程式設計的質量和數量,提高其生產率,使微程式便宜、可靠和效率高,並易編、易讀和易於維護。
基本內容
韌體工程主要包括:微程式的需求定義和說明;微程式的設計和實現;微程式的測試、排錯和驗證;微程式的維護等。韌體開發環境遠遠落後於軟體開發環境,實用的微程式高階語言和測試、除錯工具尚都缺乏,因此其主要研究內容是微程式設計語言、微程式優化、微程式設計支援系統、微程式驗證和微程式遷移等。
微程式設計語言
程式設計語言的已有成果不能簡單地移植於微程式設計,因為微程式設計有下列特點:
(1)對韌體的效率要求比對軟體高得多。機器指令系統由微程式實現,而軟體最終是要對映、變換成機器語言程式的。微程式的效率對軟體的效率有根本性的影響。如果微程式設計語言效率低,就沒有使用價值。因此,在微程式的優化問題未解決之前,微程式高階語言就很難得到應用。而程式設計高階語言的優化技術是在高階語言得到比較廣泛的應用之後才發展、完善起來的。
(2)微程式是直接控制硬體的,而其硬體的並行性日益增強。因此,微指令的構成一般遠比機器指令複雜,微操作的並行性甚至可能比多處理機的並行性還複雜,而且不同機器的並行狀況又差別較大,這就使得微指令碼的生成比高階語言程式的程式碼生成複雜得多。
(3)微程式硬體的多樣性(主要指微操作語義、微指令時間關係和資料通路結構的多樣性)和多變性給微程式高階語言的設計帶來困難,在編譯系統的設計中至今還難於使微程式象軟體那樣運行於抽象機器。
就微程式設計語言和程式設計語言的關係來看,可以把前者看成是後者和硬體描述語言的合成。
微程式組合語言
微程式設計語言迄今主要仍使用微程式組合語言。當然,所用的都是交叉彙編而且彙編系統幾乎都用高階語言編寫。為了採用微程式組合語言,微程式設計者必須按複雜且並行性強的微程式硬體的具體細節來設計,生產率很低。因此,為擴大微程式應用領域和提高微程式設計效率必須發展微程式高階語言。
微程式高階語言
要求按實現機器指令系統和部分系統軟體功能的需要來設計。微程式高階語言應是通用的、與機器無關的,又能高效和充分利用微程式硬體的並行資源。這一任務不能只由微編譯系統來承擔,還需要由微程式設計者來承擔其中一部分。這一點與高階語言程式設計有所不同。
與微程式硬體有關的資訊應使用與機器無關的微程式高階語言來說明和描述。如何識別並在編譯過程的哪一個階段把微程式高階語言程式中的操作,或一串操作對映到相應微程式硬體資源中,是設計微程式設計語言及其編譯系統的關鍵。
微程式高階語言尚處於初步探索階段,按某一種機器設計的微程式高階語言程式還很難運用於另一種機器。因此,研究微程式設計語言的最主要目的是提高微程式設計的效率和生產率。
微程式優化
在微程式高階語言源程式的編譯過程中,在經過詞法、語法分析和傳統的編譯優化之後,如何把所得到的順序微操作序列裝配到水平型微指令序列中去,使得裝配後的執行時間最短,所佔用的微程式儲存器空間最小,這是微程式高階語言編譯系統設計的關鍵。微程式語言與程式設計語言在編譯系統的主要差別在於程式碼的生成。水平微程式的微程式碼生成模型比高階語言程式複雜得多。在實際工作中難以達到最優,只能達到近乎最優。
已有的優化是以識別可並行的多個微操作,並把它們裝配入條數儘可能少的水平型微指令(見微程式設計)為主要過程和基本特徵的。這種優化實質上是目標微程式在長度上的壓縮,所以又稱為微程式壓縮。它的困難有二,其一是如何用通用的格式來描述微操作,以使採用這種描述的演算法與微程式的硬體結構無關;其二是演算法的複雜性問題。只在一個直線微程式段(指此段只有一個入口和一個出口)內的微程式壓縮(稱區域性壓縮或區域性優化)就已經十分複雜,超出直線段,對整個微程式的壓縮(稱全域性壓縮或全域性優化)不但包含區域性壓縮中的問題,而且還有如何識別全域性可並行的微操作,以及在執行時間和所需微程式儲存器空間之間進行權衡等問題。
微程式設計支援系統
它的主要任務是提高微程式設計的生產率。微程式出錯往往影響全域性,因而對微程式正確性的要求比對軟體高,加之微程式幾乎都是非結構式的,修改某個錯誤可能引起另一個錯誤。通過微程式設計支援系統,儘可能嚴格地對微程式進行測試(發現錯誤)和排錯(改正錯誤)是十分必要的。
支援系統的核心是模擬和除錯程式。模擬程式的主要作用是通過微程式的模擬執行發現設計錯誤,提供評價微程式和微程式硬體的資料。為此,模擬程式應能夠真實地描述微程式硬體,尤其是其並行性;它應具有跟蹤能力,並提供所需的示蹤變數,這是查錯的主要手段;它應能提供評價用的資料,還應具有可修改性。除錯程式應能跟蹤所選的機器狀態,能在任意點上停止或啟動,能進行定時控制;應有豐富、靈活的除錯、跟蹤命令,以便能準確、迅速地發現微程式的出錯位置。
微程式驗證
程式測試只能說明存在錯誤,但不能證明無錯。因此,微程式的正確性證明,即微程式驗證,和程式的正確性證明一樣重要。微程式的正確性證明比程式的正確性證明容易實現。因為,相對來說微程式總是比較小,而且微指令的入、出關系和對微程式狀態的改變都比較簡單。這裡,結構式微程式設計同樣是微程式驗證的必要條件。
微程式驗證工作還處於探索階段,採用的方法有歸納斷言法、符號執行法、程式狀態等效法和關係代數法等,都還限於不考慮時間關係的順序型。
微程式遷移
通過微程式技術實現計算機系統功能的垂直和水平遷移。垂直遷移是指計算機系統所需功能的實現由計算機層次系統的其他級移入微程式級,以縮小語義差距(見計算機系統結構);水平遷移是指把在中央處理器上實現的功能分散到多個通用處理機,或是移到專用處理機上實現。
垂直遷移能更好地利用微程式硬體所提供的並行性和訪問微程式儲存器的速度快等特性,其目的是提高計算機系統性能,增加安全性和廠家的保密需要等。對於微程式控制機器來說並不是垂直遷移越多越好。處理不當,資源爭用反而會使效能下降。這需要進行理論分析。把垂直遷移所帶來的效能提高與設計複雜性和可維護性結合起來考慮。
水平遷移應儘可能對使用者是透明的,宜於水平遷移的功能可以有資料收集、資料保密、微診斷以及為使用者提供更好的使用介面和提高計算機系統可靠性等。
在微程式遷移中需要引用軟體工程技術,如模組化、資料抽象、封閉性、儘量少的顯式連結和明確定義的介面等,還需要有支援遷移全過程的工具,包括基元操作使用頻度分析,軟、硬體系統描述,實現與評價支援,測試與驗證輔助等。