浮點模型的定點化到產(chǎn)品級代碼的生成
浮點轉(zhuǎn)換為定點是嵌入式軟件開發(fā)中的一個重要步驟,這項工作非常繁瑣,需要大量人力并且容易產(chǎn)生錯誤。用浮點數(shù)學設(shè)計的算法表示理想的算法行為,經(jīng)常必須轉(zhuǎn)換為定點數(shù)學,才能用于更加經(jīng)濟的、只支持整數(shù)的大規(guī)模生產(chǎn)的硬件。轉(zhuǎn)換后,位精確的定點仿真使您在將該設(shè)計嵌入到硬件之前就能夠研究定點數(shù)據(jù)類型的行為。
本文使用具有容錯能力的燃料系統(tǒng)模型作為示例,描述了將浮點模型定點化并生成產(chǎn)品級代碼的工具和工作流程。涵蓋的主題包括:
* 準備模型和數(shù)據(jù)
* 分析、改進以及優(yōu)化定點定標
* 生成優(yōu)化代碼
此處描述的方法采用 Simulink Fixed Point 中的兩種工具:Fixed-Point Advisor 和 Fixed-Point Tool。
準備模型和數(shù)據(jù)進行轉(zhuǎn)換
容錯燃料系統(tǒng)模型包含三個主要組件:ECU 控制器、發(fā)動機氣動力學設(shè)備以及幾個傳感器。在本文中,我們著重講述 ECU 控制器。
Fixed-Point Advisor 是一個交互式工具,旨在加速模型準備過程
圖1: 通過 Fixed-Point Advisor 準備模型。
使用 Fixed-Point Advisor,我們可完成下列步驟(在下面會詳細討論):
* 替換不支持的模塊。
* 設(shè)置信號記錄并創(chuàng)建初始參考數(shù)據(jù)。
* 指定目標硬件特性。
* 準備數(shù)據(jù)類型和定標。
* 執(zhí)行初始數(shù)據(jù)類型和定標。
* 檢查模型對于產(chǎn)品級代碼部署的適宜性。
替換不支持的模塊
Fixed Point Advisor 會檢查模型里是否有不支持定點數(shù)據(jù)類型的模塊。連續(xù)的模塊將被離散的模塊替換。Simulink 模塊支持的數(shù)據(jù)類型列表表明大多數(shù)模塊支持定點數(shù)據(jù)類型。與成百個嵌入式 MATLAB 函數(shù)(包括嵌入式算法設(shè)計中通常使用的函數(shù))一樣,Stateflow 完全支持定點數(shù)據(jù)類型。
設(shè)置信號記錄并創(chuàng)建初始參考數(shù)據(jù)
在仿真過程中,會記錄諸如輸入和輸出信號等感興趣的信號,以用于與浮點模型的等值比較以及代碼生成。我們可以記錄所有信號,或者從模型子系統(tǒng)層級中選擇信號,包括未命名的信號。
指定目標硬件特性
Fixed Point Advisor 會提醒我們?yōu)樽址汀⒄?、長字節(jié)和其他對特定處理器而言獨特的屬性指定正確的字長,以避免仿真或代碼生成時產(chǎn)生錯誤結(jié)果。
準備數(shù)據(jù)類型和定標
在初始設(shè)計中,工程師通常使用繼承數(shù)據(jù)類型傳遞,以加速原型設(shè)計并快速迭代幾個設(shè)計。當項目接近產(chǎn)品化時,他們會調(diào)整并指定每個數(shù)據(jù)類型并定標,以優(yōu)化定點結(jié)果。
Fixed-Point Advisor 通過自動執(zhí)行下列步驟,可加速此工作流程:
* 去除輸出數(shù)據(jù)類型的繼承,以幫助避免數(shù)據(jù)類型傳遞沖突。
* 放寬可能導(dǎo)致數(shù)據(jù)類型傳遞錯誤的輸入數(shù)據(jù)類型的設(shè)置或限制。
* 確定需要我們指定用于定點轉(zhuǎn)換的設(shè)計最小值和最大值的模塊。
執(zhí)行初始數(shù)據(jù)類型和定標
依據(jù)我們的初始輸入,F(xiàn)ixed-Point Advisor 可為輸入模塊、常數(shù)、參數(shù)以及具有中間數(shù)據(jù)類型的模塊(例如求和模塊)建議數(shù)據(jù)類型和初始定標。該工具使用設(shè)計或仿真浮點數(shù)據(jù)的最小值和最大值,建議初始定點數(shù)據(jù)定標。該工具可報告定標沖突并提出解決沖突的方法。然后,檢查數(shù)值錯誤并分析記錄的信號。
于是生成了初步定標的定點模型,以及比較浮點到定點模型結(jié)果的方案。
檢查模型對于產(chǎn)品級代碼部署的適宜性
我們使用 Fixed-Point Advisor 來運行最終檢查,以確定該模型對于產(chǎn)品級代碼部署的適宜性。包括:
* 指出可生成昂貴的飽和和舍入代碼的模塊。
* 指出有問題的定點操作,例如確保定點查找表有足夠的空間,以最大化代碼效率。
分析、改進以及優(yōu)化定點定標
使用 Fixed-Point Tool 可在您的模型中互動地分析、改進以及優(yōu)化定點定標。該工具首先確定溢出和/或飽和的定點值。然后,通過臨時將所有信號轉(zhuǎn)換為浮點精度并執(zhí)行另一個仿真運行,找到定標的合適動態(tài)范圍。合適的動態(tài)范圍用于計算對于每個模塊而言更合適的定點定標。然后,我們接受或拒絕每個信號的建議定標。我們還可配置該工具,以忽略所選的模塊,使您能夠?qū)为毝说哪K使用自動定標。
圖2:利用 Fixed-Point Tool 對容錯燃料系統(tǒng)模型進行自動定標。
[!--empirenews.page--]
顯示了用于容錯燃料系統(tǒng)模型的工具及其建議的定標。注意,上述步驟可用于相同的模型,使您能夠?qū)τ诟↑c設(shè)計和定點設(shè)計使用一個模型,并減少在設(shè)計迭代過程中維護獨立模型的需求。
在整個過程中,比較圖提供快速且簡單的方法,分析和對比定點設(shè)計和浮點設(shè)計的行為
圖3:比較當前定點結(jié)果與參考浮點結(jié)果,以及這些結(jié)果之間的差別。
生成優(yōu)化代碼
我們可使用 Real-Time Workshop Embedded Coder 生成針對不同目標的代碼。如果我們選擇默認 ANSI/ISO C 代碼選項,可在具有指定字長的任何目標上部署可移植代碼。我們還通過使用目標函數(shù)庫來利用處理器優(yōu)化的代碼,以將生成的數(shù)學函數(shù)、數(shù)學運算符以及內(nèi)存分配函數(shù)(例如 memcpy)自動替換為特定于目標的形式。圖 4:定點 ANSI C 代碼與為 Infineon TriCore 處理器優(yōu)化的使用目標函數(shù)庫定點代碼的比較。 比較具有飽和邏輯的 32 位整數(shù)定點相加的 ANSI C 代碼與 Infineon TriCore 優(yōu)化代碼。
圖4:定點 ANSI C 代碼與為 Infineon TriCore 處理器優(yōu)化的使用目標函數(shù)庫定點代碼的比較。
位精確的定點仿真可幫助您在 Simulink 環(huán)境內(nèi)對設(shè)計建模。Simulink Fixed Point 提供的工具可讓您自動化定點轉(zhuǎn)換工作流程的耗時部分,并研究設(shè)計以進一步改進定點性能。Real-Time Workshop Embedded Coder 對產(chǎn)品級代碼部署提供一種自動化途徑。