用工程方法研製和維護固件(微程式)的過程和有關技術。固件工程包括固件的需求定義、設計和實現,以及測試維護的理論、方法和工具。固件工程是把軟體工程的概念、理論和經驗運用於微程式設計。固件工程和軟體工程的不同,不在於工程方法而在於形式化模型。固件與硬體的關係比軟體與硬體的關係密切得多;固件的形式化模型與實現微指令的微程式硬體密切相關。固件工程要求微程式硬體應是規整的和易於描述的,能把固件和軟體有機地聯繫成一個整體,並使二者具有公共術語。

  隨著器件價格的持續下降,微程序存儲器(控存)容量顯著擴大,可寫微程序存儲器已被普遍采用。從微型機直至大型機都已使用瞭微程序技術,其應用范圍已從實現機器指令系統擴展到由軟件實現的功能,如操作系統部分功能的固化實現等。這就需要在微程序設計中采用固件工程,即引用軟件工程的理論、概念和技術以提高微程序設計的質量和數量,提高其生產率,使微程序便宜、可靠和效率高,並易編、易讀和易於維護。

  基本內容 固件工程主要包括:微程序的需求定義和說明;微程序的設計和實現;微程序的測試、排錯和驗證;微程序的維護等。固件開發環境遠遠落後於軟件開發環境,實用的微程序高級語言和測試、調試工具尚都缺乏,因此其主要研究內容是微程序設計語言、微程序優化、微程序設計支持系統、微程序驗證和微程序遷移等。

  微程序設計語言 程序設計語言的已有成果不能簡單地移植於微程序設計,因為微程序設計有下列特點:

  ① 對固件的效率要求比對軟件高得多。機器指令系統由微程序實現,而軟件最終是要映射、變換成機器語言程序的。微程序的效率對軟件的效率有根本性的影響。如果微程序設計語言效率低,就沒有使用價值。因此,在微程序的優化問題未解決之前,微程序高級語言就很難得到應用。而程序設計高級語言的優化技術是在高級語言得到比較廣泛的應用之後才發展、完善起來的。

  ② 微程序是直接控制硬件的,而其硬件的並行性日益增強。因此,微指令的構成一般遠比機器指令復雜,微操作的並行性甚至可能比多處理機的並行性還復雜,而且不同機器的並行狀況又差別較大,這就使得微指令碼的生成比高級語言程序的代碼生成復雜得多。

  ③ 微程序硬件的多樣性(主要指微操作語義、微指令時間關系和數據通路結構的多樣性)和多變性給微程序高級語言的設計帶來困難,在編譯系統的設計中至今還難於使微程序象軟件那樣運行於抽象機器。

  就微程序設計語言和程序設計語言的關系來看,可以把前者看成是後者和硬件描述語言的合成。

  微程序匯編語言 微程序設計語言迄今主要仍使用微程序匯編語言。當然,所用的都是交叉匯編而且匯編系統幾乎都用高級語言編寫。為瞭采用微程序匯編語言,微程序設計者必須按復雜且並行性強的微程序硬件的具體細節來設計,生產率很低。因此,為擴大微程序應用領域和提高微程序設計效率必須發展微程序高級語言。

  微程序高級語言 要求按實現機器指令系統和部分系統軟件功能的需要來設計。微程序高級語言應是通用的、與機器無關的,又能高效和充分利用微程序硬件的並行資源。這一任務不能隻由微編譯系統來承擔,還需要由微程序設計者來承擔其中一部分。這一點與高級語言程序設計有所不同。

  與微程序硬件有關的信息應使用與機器無關的微程序高級語言來說明和描述。如何識別並在編譯過程的哪一個階段把微程序高級語言程序中的操作,或一串操作映射到相應微程序硬件資源中,是設計微程序設計語言及其編譯系統的關鍵。

  微程序高級語言尚處於初步探索階段,按某一種機器設計的微程序高級語言程序還很難運用於另一種機器。因此,研究微程序設計語言的最主要目的是提高微程序設計的效率和生產率。

  微程序優化 在微程序高級語言源程序的編譯過程中,在經過詞法、語法分析和傳統的編譯優化之後,如何把所得到的順序微操作序列裝配到水平型微指令序列中去,使得裝配後的執行時間最短,所占用的微程序存儲器空間最小,這是微程序高級語言編譯系統設計的關鍵。微程序語言與程序設計語言在編譯系統的主要差別在於代碼的生成。水平微程序的微代碼生成模型比高級語言程序復雜得多。在實際工作中難以達到最優,隻能達到近乎最優。

  已有的優化是以識別可並行的多個微操作,並把它們裝配入條數盡可能少的水平型微指令(見微程序設計)為主要過程和基本特征的。這種優化實質上是目標微程序在長度上的壓縮,所以又稱為微程序壓縮。它的困難有二,其一是如何用通用的格式來描述微操作,以使采用這種描述的算法與微程序的硬件結構無關;其二是算法的復雜性問題。隻在一個直線微程序段(指此段隻有一個入口和一個出口)內的微程序壓縮(稱局部壓縮或局部優化)就已經十分復雜,超出直線段,對整個微程序的壓縮(稱全局壓縮或全局優化)不但包含局部壓縮中的問題,而且還有如何識別全局可並行的微操作,以及在執行時間和所需微程序存儲器空間之間進行權衡等問題。

  微程序設計支持系統 它的主要任務是提高微程序設計的生產率。微程序出錯往往影響全局,因而對微程序正確性的要求比對軟件高,加之微程序幾乎都是非結構式的,修改某個錯誤可能引起另一個錯誤。通過微程序設計支持系統,盡可能嚴格地對微程序進行測試(發現錯誤)和排錯(改正錯誤)是十分必要的。

  支持系統的核心是模擬和調試程序。模擬程序的主要作用是通過微程序的模擬運行發現設計錯誤,提供評價微程序和微程序硬件的數據。為此,模擬程序應能夠真實地描述微程序硬件,尤其是其並行性;它應具有跟蹤能力,並提供所需的示蹤變量,這是查錯的主要手段;它應能提供評價用的數據,還應具有可修改性。調試程序應能跟蹤所選的機器狀態,能在任意點上停止或啟動,能進行定時控制;應有豐富、靈活的調試、跟蹤命令,以便能準確、迅速地發現微程序的出錯位置。

  微程序驗證 程序測試隻能說明存在錯誤,但不能證明無錯。因此,微程序的正確性證明,即微程序驗證,和程序的正確性證明一樣重要。微程序的正確性證明比程序的正確性證明容易實現。因為,相對來說微程序總是比較小,而且微指令的入、出關系和對微程序狀態的改變都比較簡單。這裡,結構式微程序設計同樣是微程序驗證的必要條件。

  微程序驗證工作還處於探索階段,采用的方法有歸納斷言法、符號執行法、程序狀態等效法和關系代數法等,都還限於不考慮時間關系的順序型。

  微程序遷移 通過微程序技術實現計算機系統功能的垂直和水平遷移。垂直遷移是指計算機系統所需功能的實現由計算機層次系統的其他級移入微程序級,以縮小語義差距(見計算機系統結構);水平遷移是指把在中央處理器上實現的功能分散到多個通用處理機,或是移到專用處理機上實現。

  垂直遷移能更好地利用微程序硬件所提供的並行性和訪問微程序存儲器的速度快等特性,其目的是提高計算機系統性能,增加安全性和廠傢的保密需要等。對於微程序控制機器來說並不是垂直遷移越多越好。處理不當,資源爭用反而會使性能下降。這需要進行理論分析。把垂直遷移所帶來的性能提高與設計復雜性和可維護性結合起來考慮。

  水平遷移應盡可能對用戶是透明的,宜於水平遷移的功能可以有數據收集、數據保密、微診斷以及為用戶提供更好的使用界面和提高計算機系統可靠性等。

  在微程序遷移中需要引用軟件工程技術,如模塊化、數據抽象、封閉性、盡量少的顯式連結和明確定義的界面等,還需要有支持遷移全過程的工具,包括基元操作使用頻度分析,軟、硬件系統描述,實現與評價支持,測試與驗證輔助等。