新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 解決軟件和硬件接口問題的嵌入式系統設計實例

        解決軟件和硬件接口問題的嵌入式系統設計實例

        作者: 時間:2013-10-23 來源:網絡 收藏

        那些包含有屬于多個功能要素的域的寄存器同樣需要特殊驅動程序支持,這樣才能使多個進程安全地訪問每個域。而配置為“只寫”功能的域需要分配影子內存來保存寄存器域中的前一狀態值。硬件設計工程師原來設想的簡單的“屏蔽/寫”操作現在變成了繁雜的多步功能調用,首先必須禁止中斷和任務切換,然后讀本地存儲器,屏蔽輸入輸出值,再進行硬件寄存器寫,最后開放中斷和多任務切換。如果寄存器中所有域能得到有效安排,通過一個軟件任務就能訪問全部域的話,上述情況就能得到有效避免。

        由于系統A將屬于不相關功能的多個域組合放在一個寄存器中,因此它需要使用特殊的驅動程序。而系統B則遵循“單個寄存器內的域按任務進行組織”的原則,將每個域放置在屬于自己的專用寄存器中,因此能高效地訪問資源中的每個軸參數。

        3. 十六進制數字對齊

        硬件設計工程師還應該明白針對處理器和軟件開發環境進行對齊約束。如果將域放置在錯誤的地址上而超出字的邊界,將迫使軟件設計工程師只能按塊訪問每個域,進而增加訪問復雜性,降低訪問的速度。在調試過程中,用零值填充域是非常有用的,可以使每個域的最低位對齊十六進制數字(4位)的邊界:當在邏輯分析儀、調試儀或仿真器上顯示寄存器情況時,十六進制數字對齊會有助于域值的可視化提取。系統A的寄存器域是沒有對齊的,因此從原始的十六進制數據中提取域值很困難。由于控制域沒有對齊,在查錯時屏蔽測試輸入也十分困難。而系統B的所有域都是按十六進制偶數數字對齊,因此通過寄存器讀可以很容易地確定每個域的狀態,并且能方便地將某個域設為指定值。

        4. 域位置的分配與順序

        寄存器內域的設置也會嚴重影響軟件實現的效率。布爾域和多位域通常與位置無關,但當列舉域和數字域被放置在寄存器的最低位(LSB)時對它們的訪問效率通常是最高的(LSB的實際位數取決于處理器類型,位0不一定是LSB)。將域配置在寄存器的LSB中可以有效地消除對域內容屏蔽后的移位操作,也使測試設備或進行可視化檢查的調試儀訪問寄存器時能更容易地識別域值。

        系統A中用于軸2和軸3的域值在使用前必須要求軟件進行屏蔽和移位。而系統B則將所有數字域配置在寄存器的LSB中,從而能完成更有效的訪問。系統B的集成性也更好,資源寄存器的十六進制數據能真正分離成正確的域值。

        5. 未用數據位

        寄存器中的未用位同樣也會影響軟件實現的效率。所有未用位應回歸為零,并且寫入操作時無需對它們作特殊的處理,這樣可以避免不必要的屏蔽與清除操作。這個規則的唯一一個例外是包含數字域為2的補碼的寄存器,并且在寄存器中剩余的最高位(MSB)沒有用的情況。在這種情況下,使硬件實現符號將域的MSB擴展到未用位就非常有用。以這種方式擴展的數字域能夠被處理器直接訪問,因為帶符號的數值無需軟件符號的擴展。當對特殊的數字域變量的訪問速度嚴重影響整體系統性能時,將該類型的域與“單個寄存器單個域”結合起來考慮將非常有用。由于無需屏蔽或符號擴展,這些域能以內部數據訪問的方式直接訪問。

        當系統A中需要從寄存器提取域值時,要求軟件對每個數字域值進行符號擴展,而系統B允許通過對寄存器的內部整數訪問直接訪問域值。

        6. 域類型選擇

        域類型的正確選擇也能極大地提高軟件實現效率。在打開或關閉獨立資源功能時布爾域是最有效的。要注意的是,只有當寄存器是可讀寫時單位域才容易編碼。如果硬件寄存器對域的訪問有限制,就需要專門的緩沖器(有可能再加上一個專門的驅動程序)來保存當前的內容。限制性訪問同時也會限制一些編程構造的使用,如位域(bit field),從而影響系統代碼的可讀性,且無助于減少編程錯誤。

        當表達資源狀態的數據需要占用一定范圍的值時數字域就很有用。當一個域能保持正值和負值使用時,帶符號的表達式通常需要更多的軟件工作。另外,還要避免在數字域中對其它數據進行編碼(如利用域符號表示一個不相關的資源狀態)。

        從硬件實現來看,多位域更有效,但在寫入系統代碼時會增加代碼的復雜度。列舉類型通常能更好地反映資源中相關功能的實際可用性,可以有效防止沖突功能的采用(如將存儲器塊切換到本地總線上)。列舉類型還應提供這樣的可選項:無條件允許切換之間存在“停放帶”,無條件允許系統軟件中存在“先中斷再實現”的代碼切換。

        系統A中對軸驅動域的“只寫”訪問使軟件對目標域的訪問效率很低,必須用RAM保存寫過程中不作修改的過去的軸內容。系統B中由于每個寄存器都只有一個域并允許讀寫操作,因此不存在這樣的問題。

        實例系統的性能評估

        為了評估最終系統軟件的性能,將列表1中的偽隨機碼正確轉換成C代碼并同時用于A、B系統中,然后利用內部存儲器中的結構模擬每個系統的硬件接口。代碼中應避免使用位域,因為標準C實現不能在限制性訪問的地址空間上正確工作。系統代碼模擬運行于PowerPC,編譯工具采用的是Green Hills MultiC,目標操作系統是VxWorks,編譯器設置在中級優化度(目的是幫助調試,并允許設計工程師把每條匯編指令與每一行C代碼聯系起來)。

        表1列出了偽隨機碼的每一行,并給出了每個系統實現所用到的匯編指令與功能調用數量。另外還對兩個實現所用的代碼執行速度進行測試。子程序升級系統B軸的速度要比系統A快5.3倍,這主要歸功于任務阻塞與去阻塞功能調用的去除。要注意的是實際系統中的加速效果可能并不明顯,因為實際的硬件訪問時間對總的執行時間影響最大。

        在實驗中要提升兩個實現所用編譯器的優化度,結果發現優化度的提高對系統B無效,對系統A來說只是減少了很少的代碼,并且速度卻稍有降低。這樣的結果表明,系統B的硬件接口在軸域的資源訪問上非常接近內部訪問的效能。

        另外,為了對兩種實現所用到的硬件設備進行評估,要用VHDL對硬件接口進行編碼,然后用賽靈思的Webpack軟件進行綜合,并把設計映射到賽靈思的Virtex FPGA中。采用Virtex系列芯片的結果是系統A要消耗56個功能片(slice),系統B要消耗85個功能片。V300E-PQ240器件總共具有3072個片,因此系統A占用可用資源的1.8%,系統B則占2.8%。9500系列器件的內部資源更有限些,比如XC95288XL-PQ208,系統A將占用該器件可用資源的18%,系統B則占30%。

        仔細考察這兩個設計發現,系統B所用的額外資源中最主要的驅動源是組合型軸尋址方案。為了驗證這一結果,重新組織寄存器映射,以便將每個軸作為一個獨立資源使用,單個軸映射按地址位邊界對齊。這一變通的實現方式保留了系統B的所有軟件接口優點,同時減少了整體硬件器件的使用,Virtex系列器件的片利用率能降低2.3%,9500系列的利用率能降低22%。

        硬件設計會極大地影響系統軟件實現的復雜性和質量。一個好的硬件設計要求設計人員能根據硬件實現與最終軟件設計環境的復雜性做出決定,正確理解硬件接口設計對軟件的影響能極大地改進系統質量、性能和可靠性,同時減少系統開發的周期與成本。


        上一頁 1 2 3 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 新田县| 张家口市| 江都市| 藁城市| 孟津县| 百色市| 塔河县| 泽州县| 浦城县| 秀山| 建阳市| 贵定县| 天镇县| 东山县| 平定县| 阿拉善右旗| 边坝县| 滦南县| 安吉县| 沭阳县| 广州市| 利川市| 莱阳市| 固镇县| 胶州市| 黎川县| 江都市| 崇信县| 湟中县| 南丰县| 肃宁县| 独山县| 根河市| 宁明县| 大名县| 都昌县| 河西区| 信丰县| 安顺市| 阜新| 收藏|