解決軟件和硬件接口問題的嵌入式系統設計實例
嵌入式系統設計通常分為兩個部分:硬件設計和軟件開發。這兩部分任務通常由不同的設計小組負責,相互間很少有覆蓋的地方。由于軟件小組很少涉足前面的硬件設計,采用這種方式進行開發經常會遇到問題,特別是硬件與軟件開發環境之間的接口性能較差時,會導致系統開發時間延長、開發成本提高,最終推遲產品的上市。
最理想的解決方案是軟件小組參與硬件設計,但是在時間安排、資金和人員方面往往又是不實際的。一種變通的方法是創建一套硬件接口規范來加速軟件開發流程。從軟件開發者的角度來理解最優化的硬件接口設計能有效地防止軟件開發中出現不必要的硬件問題,這種方法對硬件設計流程造成的影響也很小。
嵌入式系統結構的一般模型
從系統角度看,嵌入式系統是多種系統要素之間的很多接口的集合,這里羅列的主要資源是系統處理器。處理器接口可以分成兩大類,分別標識為本地總線和硬件總線。值得注意的是,本文中的總線是根據處理器利用資源時的訪問類型單獨定義的,與具體的硬件連接沒有對應關系。
本地總線是資源與處理器之間的接口總線,它允許無限制的連續訪問。無限制訪問意味著處理器能夠利用其內部數據類型(如字節、字和雙字)訪問一個資源的所有要素;連續訪問是指所有資源要素占用的資源地址空間是連續的,中間沒有任何間隔。RAM和EPROM就是與本地總線接口的常見范例。
硬件總線與資源的連接通常有某些限制,如大小、位置、尋址、地址空間或重定位等。只接受字寫入的I/O端口,或者使用前必須先作映射的PCI總線上的外圍芯片是硬件總線接口的一些實例。采用硬件總線連接對軟件設計工程師訪問資源有一定的限制,可能在軟件設計、開發和集成過程中產生復雜代碼和代碼錯誤。
正確的硬件總線接口設計能夠加快軟件設計進程,通常也能加快硬件驗證速度。本文重點介紹與可編程邏輯資源相連接的硬件總線的設計與實現。
系統定義的實例
這里考慮兩種不同的硬件實現方式。該系統是處理器控制的三軸伺服系統,本部分的系統設計僅限于位置反饋控制的設計,因此有助于我們專注于硬件接口的實現。
該系統的兩種實現方式都實現了處理器與用戶ASIC(或FPGA)的接口,從而為三軸伺服提供驅動與反饋信息。每個系統中的ASIC必須利用32位數據總線使處理器與三套驅動/反饋資源連接。每種資源包含有一個帶符號的10位驅動寄存器、一個帶符號的8位位置寄存器和一個3位的錯誤狀態寄存器,任何一個位置位都表示一種錯誤狀態,由它產生軸驅動(axis drive)的關閉信息。
圖1和圖2表示了一種寄存器接口的可能實現方式,分別標識為系統實現A和系統實現B。為了描述方便,后文以系統A和系統B分別指代這兩種實現。
當采用VHDL(或其它高級硬件設計方法)實現時,這兩種硬件接口的設計復雜性幾乎是相等的。系統A顯得稍微高效些,因為其寄存器地址譯碼相對簡單些,所采用的硬件數量也比系統B少。為了減少與處理器接口的可編程器件中邏輯單元的數量,大多數硬件設計工程師會選擇系統A的實現方式。
表1所示的偽隨機碼為軸驅動程序,可用于A、B兩個系統。偽隨機碼設計用于基于先進處理器的系統實現,并運行于實時操作系統,以通用軸控制程序的三份獨立挎貝(或任務實例)實現軸的控制。當使用系統A中定義的接口時只需偽隨機碼中那些帶星號的代碼行。
很明顯,即使在代碼原型階段系統B所需的代碼也比系統A少很多。系統B中的硬件設計要稍微復雜一些,但能減輕軟件開發的負擔。后文將回顧這兩個實例系統和偽隨機碼。
在閱讀本文時,硬件設計工程師可能會產生這個問題:“為什么第一個設計的效率要比第二個低?”。兩種實現方式控制軸向操作的參數是相同的,而第一種方法所需的可編程硬件器件數量顯然要比第二種少。為了正確回答這個問題,設計工程師必須從系統的角度來看待這個設計,而不是硬件設計工程師慣用的“邏輯門”角度。下一部分將闡述硬件設計工程師開發系統硬件接口時常會遇到的一些概念,將進一步討論這些技術,并檢查將這些概念應用于實例系統設計后的結果。
為了滿足項目要求,對整個系統結構進行優化時需要在硬件與軟件實現之間作出折衷,現實中是沒有項目能滿足這里提到的所有理想軟件接口要求的。對理想狀態的認識有助于硬件設計工程師識別并消除影響軟件設計的一些障礙。
設計原則
1. 采用標準總線訪問
有效的嵌入式硬件接口設計的一般原則是:對軟件設計工程師來說,硬件設計應確保對硬件資源的訪問盡可能透明。處理器使用所有標準的讀寫指令可以實現透明訪問,而不用考慮前面的訪問內容或時序。
像頁寄存器設置、地址線上的寫數據編碼等都可能嚴重影響代碼的開發,并常常需要開發標準訪問與所需特殊訪問之間完成相互轉換的驅動程序。
評論