嵌入式軟硬件接口設(shè)計(jì)實(shí)例
嵌入式系統(tǒng)設(shè)計(jì)通常分為兩個(gè)部分:硬件設(shè)計(jì)和軟件開(kāi)發(fā)。這兩部分任務(wù)通常由不同的設(shè)計(jì)小組負(fù)責(zé),相互間很少有覆蓋的地方。由于軟件小組很少涉足前面的硬件設(shè)計(jì),采用這種方式進(jìn)行開(kāi)發(fā)經(jīng)常會(huì)遇到問(wèn)題,特別是硬件與軟件開(kāi)發(fā)環(huán)境之間的接口性能較差時(shí),會(huì)導(dǎo)致系統(tǒng)開(kāi)發(fā)時(shí)間延長(zhǎng)、開(kāi)發(fā)成本提高,最終推遲產(chǎn)品的上市。
最理想的解決方案是軟件小組參與硬件設(shè)計(jì),但是在時(shí)間安排、資金和人員方面往往又是不實(shí)際的。一種變通的方法是創(chuàng)建一套硬件接口規(guī)范來(lái)加速軟件開(kāi)發(fā)流程。從軟件開(kāi)發(fā)者的角度來(lái)理解最優(yōu)化的硬件接口設(shè)計(jì)能有效地防止軟件開(kāi)發(fā)中出現(xiàn)不必要的硬件問(wèn)題,這種方法對(duì)硬件設(shè)計(jì)流程造成的影響也很小。
嵌入式系統(tǒng)結(jié)構(gòu)的一般模型
從系統(tǒng)角度看,嵌入式系統(tǒng)是多種系統(tǒng)要素之間的很多接口的集合,這里羅列的主要資源是系統(tǒng)處理器。處理器接口可以分成兩大類(lèi),分別標(biāo)識(shí)為本地總線和硬件總線。值得注意的是,本文中的總線是根據(jù)處理器利用資源時(shí)的訪問(wèn)類(lèi)型單獨(dú)定義的,與具體的硬件連接沒(méi)有對(duì)應(yīng)關(guān)系。
本地總線是資源與處理器之間的接口總線,它允許無(wú)限制的連續(xù)訪問(wèn)。無(wú)限制訪問(wèn)意味著處理器能夠利用其內(nèi)部數(shù)據(jù)類(lèi)型(如字節(jié)、字和雙字)訪問(wèn)一個(gè)資源的所有要素;連續(xù)訪問(wèn)是指所有資源要素占用的資源地址空間是連續(xù)的,中間沒(méi)有任何間隔。RAM和EPROM就是與本地總線接口的常見(jiàn)范例。
硬件總線與資源的連接通常有某些限制,如大小、位置、尋址、地址空間或重定位等。只接受字寫(xiě)入的I/O端口,或者使用前必須先作映射的PCI總線上的外圍芯片是硬件總線接口的一些實(shí)例。采用硬件總線連接對(duì)軟件設(shè)計(jì)工程師訪問(wèn)資源有一定的限制,可能在軟件設(shè)計(jì)、開(kāi)發(fā)和集成過(guò)程中產(chǎn)生復(fù)雜代碼和代碼錯(cuò)誤。
正確的硬件總線接口設(shè)計(jì)能夠加快軟件設(shè)計(jì)進(jìn)程,通常也能加快硬件驗(yàn)證速度。本文重點(diǎn)介紹與可編程邏輯資源相連接的硬件總線的設(shè)計(jì)與實(shí)現(xiàn)。
系統(tǒng)定義的實(shí)例
這里考慮兩種不同的硬件實(shí)現(xiàn)方式。該系統(tǒng)是處理器控制的三軸伺服系統(tǒng),本部分的系統(tǒng)設(shè)計(jì)僅限于位置反饋控制的設(shè)計(jì),因此有助于我們專(zhuān)注于硬件接口的實(shí)現(xiàn)。
該系統(tǒng)的兩種實(shí)現(xiàn)方式都實(shí)現(xiàn)了處理器與用戶(hù)ASIC(或FPGA)的接口,從而為三軸伺服提供驅(qū)動(dòng)與反饋信息。每個(gè)系統(tǒng)中的ASIC必須利用32位數(shù)據(jù)總線使處理器與三套驅(qū)動(dòng)/反饋資源連接。每種資源包含有一個(gè)帶符號(hào)的10位驅(qū)動(dòng)寄存器、一個(gè)帶符號(hào)的8位位置寄存器和一個(gè)3位的錯(cuò)誤狀態(tài)寄存器,任何一個(gè)位置位都表示一種錯(cuò)誤狀態(tài),由它產(chǎn)生軸驅(qū)動(dòng)(axis drive)的關(guān)閉信息。
圖1和圖2表示了一種寄存器接口的可能實(shí)現(xiàn)方式,分別標(biāo)識(shí)為系統(tǒng)實(shí)現(xiàn)A和系統(tǒng)實(shí)現(xiàn)B。為了描述方便,后文以系統(tǒng)A和系統(tǒng)B分別指代這兩種實(shí)現(xiàn)。
當(dāng)采用VHDL(或其它高級(jí)硬件設(shè)計(jì)方法)實(shí)現(xiàn)時(shí),這兩種硬件接口的設(shè)計(jì)復(fù)雜性幾乎是相等的。系統(tǒng)A顯得稍微高效些,因?yàn)槠浼拇嫫鞯刂纷g碼相對(duì)簡(jiǎn)單些,所采用的硬件數(shù)量也比系統(tǒng)B少。為了減少與處理器接口的可編程器件中邏輯單元的數(shù)量,大多數(shù)硬件設(shè)計(jì)工程師會(huì)選擇系統(tǒng)A的實(shí)現(xiàn)方式。
表1所示的偽隨機(jī)碼為軸驅(qū)動(dòng)程序,可用于A、B兩個(gè)系統(tǒng)。偽隨機(jī)碼設(shè)計(jì)用于基于先進(jìn)處理器的系統(tǒng)實(shí)現(xiàn),并運(yùn)行于實(shí)時(shí)操作系統(tǒng),以通用軸控制程序的三份獨(dú)立挎貝(或任務(wù)實(shí)例)實(shí)現(xiàn)軸的控制。當(dāng)使用系統(tǒng)A中定義的接口時(shí)只需偽隨機(jī)碼中那些帶星號(hào)的代碼行。
很明顯,即使在代碼原型階段系統(tǒng)B所需的代碼也比系統(tǒng)A少很多。系統(tǒng)B中的硬件設(shè)計(jì)要稍微復(fù)雜一些,但能減輕軟件開(kāi)發(fā)的負(fù)擔(dān)。后文將回顧這兩個(gè)實(shí)例系統(tǒng)和偽隨機(jī)碼。
在閱讀本文時(shí),硬件設(shè)計(jì)工程師可能會(huì)產(chǎn)生這個(gè)問(wèn)題:“為什么第一個(gè)設(shè)計(jì)的效率要比第二個(gè)低?”。兩種實(shí)現(xiàn)方式控制軸向操作的參數(shù)是相同的,而第一種方法所需的可編程硬件器件數(shù)量顯然要比第二種少。為了正確回答這個(gè)問(wèn)題,設(shè)計(jì)工程師必須從系統(tǒng)的角度來(lái)看待這個(gè)設(shè)計(jì),而不是硬件設(shè)計(jì)工程師慣用的“邏輯門(mén)”角度。下一部分將闡述硬件設(shè)計(jì)工程師開(kāi)發(fā)系統(tǒng)硬件接口時(shí)常會(huì)遇到的一些概念,將進(jìn)一步討論這些技術(shù),并檢查將這些概念應(yīng)用于實(shí)例系統(tǒng)設(shè)計(jì)后的結(jié)果。
為了滿(mǎn)足項(xiàng)目要求,對(duì)整個(gè)系統(tǒng)結(jié)構(gòu)進(jìn)行優(yōu)化時(shí)需要在硬件與軟件實(shí)現(xiàn)之間作出折衷,現(xiàn)實(shí)中是沒(méi)有項(xiàng)目能滿(mǎn)足這里提到的所有理想軟件接口要求的。對(duì)理想狀態(tài)的認(rèn)識(shí)有助于硬件設(shè)計(jì)工程師識(shí)別并消除影響軟件設(shè)計(jì)的一些障礙。
設(shè)計(jì)原則
1. 采用標(biāo)準(zhǔn)總線訪問(wèn)
有效的嵌入式硬件接口設(shè)計(jì)的一般原則是:對(duì)軟件設(shè)計(jì)工程師來(lái)說(shuō),硬件設(shè)計(jì)應(yīng)確保對(duì)硬件資源的訪問(wèn)盡可能透明。處理器使用所有標(biāo)準(zhǔn)的讀寫(xiě)指令可以實(shí)現(xiàn)透明訪問(wèn),而不用考慮前面的訪問(wèn)內(nèi)容或時(shí)序。
像頁(yè)寄存器設(shè)置、地址線上的寫(xiě)數(shù)據(jù)編碼等都可能?chē)?yán)重影響代碼的開(kāi)發(fā),并常常需要開(kāi)發(fā)標(biāo)準(zhǔn)訪問(wèn)與所需特殊訪問(wèn)之間完成相互轉(zhuǎn)換的驅(qū)動(dòng)程序。
通常不可避免要采用一些特殊總線,但需要慎重考慮特殊訪問(wèn)空間的使用選擇,因?yàn)檫@種情況會(huì)給系統(tǒng)軟件設(shè)計(jì)帶來(lái)一定的困難。系統(tǒng)A采用了只寫(xiě)寄存器,因此要求系統(tǒng)軟件提供“影子”內(nèi)存(Shadow memory)來(lái)保存寫(xiě)入到資源的數(shù)據(jù)。而系統(tǒng)B由于允許所有的寄存器都可讀寫(xiě),因此沒(méi)有這種限制。
2. 開(kāi)發(fā)基于處理器的資源接口
硬件設(shè)計(jì)工程師習(xí)慣于從下至上分析資源接口問(wèn)題以及與系統(tǒng)總線的連接,而通過(guò)分析處理器在系統(tǒng)中對(duì)資源的訪問(wèn)過(guò)程則更好。
“處理器與資源”間的接口常常是最重要的接口,在硬件設(shè)計(jì)流程中它的效率應(yīng)是最優(yōu)先考慮的對(duì)象。統(tǒng)一規(guī)劃整個(gè)系統(tǒng)的資源訪問(wèn)對(duì)于正確理解由硬件設(shè)計(jì)選擇所引起的訪問(wèn)限制很重要。
現(xiàn)有最先進(jìn)的系統(tǒng)包含有存儲(chǔ)控制器和可再映射總線,它們會(huì)改變處理器與資源接口之間的訪問(wèn)類(lèi)型。一般地說(shuō),一個(gè)不合格的硬件接口設(shè)計(jì)在軟件小組試圖與實(shí)際資源連接前是不可能反映出來(lái)的,這一點(diǎn)對(duì)于設(shè)計(jì)硬件接口很重要。
3. 系統(tǒng)內(nèi)存映射的創(chuàng)建與維護(hù)
對(duì)于一個(gè)好的系統(tǒng)設(shè)計(jì)來(lái)說(shuō),所有資源的存儲(chǔ)器映射都非常重要。如前所述,存儲(chǔ)器映射的設(shè)計(jì)應(yīng)考慮到具體處理器要求,而不是簡(jiǎn)單地說(shuō)明一個(gè)資源所解碼的地址線類(lèi)型。如果采用的是寄存器可配置資源,如PCI總線,硬件設(shè)計(jì)工程師應(yīng)在存儲(chǔ)器映射中配置所有與該資源有關(guān)的配置寄存器,并提供用以創(chuàng)建硬件驗(yàn)證所需的靜態(tài)映射的配置寄存器初始化值。
硬件設(shè)計(jì)工程師還必須認(rèn)真考慮動(dòng)態(tài)重配置的優(yōu)越性。在可重配置總線上沒(méi)有新增(或減少)資源的系統(tǒng)能演變成一個(gè)靜態(tài)映射,方法是強(qiáng)迫配置寄存器在系統(tǒng)復(fù)位后回復(fù)到同一值。這個(gè)“靜態(tài)”系統(tǒng)圖為硬件集成和軟件開(kāi)發(fā)提供了一個(gè)穩(wěn)定的統(tǒng)一結(jié)構(gòu),同時(shí)還避免了在系統(tǒng)代碼中使用易產(chǎn)生錯(cuò)誤的指針操作。
最后,隨著系統(tǒng)的不斷成熟,存儲(chǔ)器映射也必須不斷完善,并隨著軟硬件開(kāi)發(fā)的進(jìn)展不斷改進(jìn)。
4. 統(tǒng)一的訪問(wèn)模式
當(dāng)前的嵌入式系統(tǒng)由于復(fù)雜度的提高,通常由多人共同合作進(jìn)行設(shè)計(jì)。每個(gè)硬件部件的設(shè)計(jì)必須與整體一致,這樣才能開(kāi)發(fā)出統(tǒng)一的資源訪問(wèn)模式。如果不同功能模塊的訪問(wèn)不一致的話,在軟件開(kāi)發(fā)期間就會(huì)產(chǎn)生潛在的訪問(wèn)限制錯(cuò)誤,從而可能需要為每個(gè)子系統(tǒng)設(shè)計(jì)專(zhuān)門(mén)的軟件驅(qū)動(dòng)程序。對(duì)不同邏輯塊的不一致訪問(wèn)也會(huì)使硬件集成和驗(yàn)證變得困難重重。
例如設(shè)計(jì)工程師在調(diào)試器上編輯4個(gè)十六進(jìn)制數(shù)字并不能保證處理器會(huì)使用一個(gè)16位的讀/寫(xiě)周期,因此,對(duì)軟件開(kāi)發(fā)和硬件集成中使用調(diào)試工具設(shè)置多種類(lèi)型的限制訪問(wèn)也具有一定的困難。這樣看來(lái),評(píng)估仿真器處理多個(gè)限制性訪問(wèn)地址空間的能力就非常有用,特別是在用“限制外”訪問(wèn)方式觸發(fā)總線故障的處理器結(jié)構(gòu)中。
寄存器設(shè)計(jì)
既然硬件設(shè)計(jì)工程師的重點(diǎn)已經(jīng)從邏輯門(mén)和總線轉(zhuǎn)移到了系統(tǒng)設(shè)計(jì),我們?cè)賮?lái)審視一下任何處理器系統(tǒng)中最常用到的寄存器設(shè)計(jì)。寄存器接口允許高速訪問(wèn)資源,其訪問(wèn)的效率對(duì)系統(tǒng)的性能有很大的影響。
評(píng)論