二十四 提高專業技能之 “完整DataSheet”
Write by Liupin 2010-4-9
在嵌入式軟體設計中,往往你完成一個單獨模組的軟體功能,在release時往往要一張較為完整的datasheet,從這中能擷取主要feature和對資源的要求,如CPU loading, Memeory size. 如何為軟體提供一較為完整的datasheet? 在這篇文章中,我將較為詳細的介紹。先來看看一些公司的datasheet,主要是以Codec project為例,如MP3 decoder.
- 先來看看spiritDsp 在其網站上提供的Datasheet 資訊。個人認為這是一家非常規範的公司,不僅僅其最佳化Codec效能在行內是首屈一指的,而且各項文檔也是很完善。
SPIRIT-MP3-Decoder-Datasheet.pdf
http://www.spiritdsp.com/datasheets/SPIRIT-MP3-Decoder-Datasheet.pdf
例舉Feature,Specifications and Resource Requirements, 如大家要看更為完整的datasheet就看上面的linking.
2 羅列一下Datasheet包括的內容。
1) 主要的特點
2) Specification,這一部分可有可無的,就是整體簡單介紹一下Codec。這些在相應的spec都能
擷取。
3) ResourceRequirements
這一部分有很多版本,有的像spirit這樣很詳細的,有的就只要MIPS/Code size/RW size/RO size,有的還會把stack/heap size 也加入。
MIPS/MCPS---- CPU loading parameter
ProgramMemory size
RW memorysize
RO memorysize 等
3 怎麼完善自己Codec Datasheet
1) Featureand Specification 是很容易填寫的,在codec spec and requirement book 中都會有詳細的說明。
2) ResourceRequirements
這部分往往很難填寫的完整和準確,這一部分是本blog重點探究的東西。
探究一:MIPS 與 MCPS 區別
For the platform of ADS, the MIPSand the MCPS are all retrieved from the soft simulink. The MCPS can be got asfollowing formula:
MIPS = total_instrunctions/(play_time*10^6);
MCPS = total_cycles/(play_time*10^6);
Gernerally speaking, we can concern with the MCPS just for the realdevice, we can estimate the MCPS according to the following formula:
MCPS = (decoded_time/play_time) *dominant_frequency_CPU;
where the play_time has some to do with thesample rate for audio and the frame rate for video.
從上面的可以知道MCPS和MIPS的不同。平時用得較多且實用的是MCPS, 這個能直接反應出CPU loading和 功耗。
由於一條指令可能要多個Cycles, 還有就是可能出現pipeline stall 和 跳轉,考慮這些複雜的因素,導致很難確定MCPS與MIPS的轉換關係,但我們還能得到不同ARM系列的CPI(每條指令的平均刻度數) 值來大致轉換MCPS and MIPS.
探究二:Simulator and device get the MCPS 差異
現在等到MCPS往往有二種方式,一種是在simulator環境下,如RVDS4.0下得到這些資料,另一种放到實際的devices上跑,等到在某一系統中的實際performance data.
Simulator performance testing: 只是簡單類比CPU對演算法的執行情況,對單純的演算法時間效能較準確的測試。
Devices performance testing: 由於實際的裝置中,往往有CPU不是全力在工作,所以實際CPU MHz是一個比峰值小的值,這也是導致二個值的誤差原因。
Standalone performance testing: 考慮到實際的CPU和系統,測試出來的值往往比simulator所得到的值偏大。同時實際系統中,由於系統還在跑很多別的系統程式,還有Cache的影響導致測出的資料不準確或每次測得的值發生變化。所以應該多測試幾次,在測試Codec performance時,最好不要運行別的系統程式。
探究三:時間績效參數怎樣測才會准,以及如何比較這些資料。
例如,同時的MP3 decoder, 不同的公司會提供不同的MCPS Datasheet,那如何判別那個Codec效能好。由於測試的碼流和測試的平台不一樣,往往導致這些MCPS資料沒有什麼可比性,只能做一下參考。
要得到更加準確和有參考價值的MCPS資料,那應該指定碼流和測試的平台,這樣才能得到相對準確的資料。
探究三:如何得到memory size.
1)首先弄清應該要列舉那幾種size, 也就是嵌入式系統更關注那幾個size. 我認為有以下幾個。
Program size/Code size ---- 這個是衡量Codec要多少bss 段memory, 往往有些系統會要求這個值應該小於多少的。
RO size --- 這個也就是constant table size
RW size --- 這個應該是malloc space, 也就是heap, 這個值很重要,嵌入式系統拿到這個值就知道Codec在運行中對memory需求size.
還有一個 Stack: 這個也很關鍵,有的application或CPU對這個參數也有自己的限定,所以也應該要把這個值拿到。
2 ) 如何擷取這些值。
分二種情況,一種是在VS2005/VS2008; 一種是在RVDS下。 個人覺得在RVDS下較為方便和準確
二種情況下都是通過產生對應的Map檔案來實現的。
VS2005/VS2008:開啟如下編譯選項:
RVDS 下,在IDE或makefile中,加如下編譯選項:
LFLAGS += --map --info totals --symbols --list ./test.map
RVDS下將會產生test.map檔案,檔案中有會有如下資訊,我們通過這些資訊就有得到很多size.
==============================================================================
Image component sizes
Code (inc.data) RO Data RW Data ZI Data Debug
888 208 48 0 40960 10995 Object Totals
8 4 48 0 0 0 (incl. Generated)
0 0 0 0 0 1 (incl. Padding)
51036 934 27836 680 524 16284 Library Totals
10 0 0 0 0 0 (incl. Padding)
==============================================================================
Code (inc.data) RO Data RW Data ZI Data Debug
51924 1142 27884 680 41484 18788 Grand Totals
51924 1142 27884 608 41484 18788 ELF Image Totals(compressed)
51924 1142 27884 608 0 0 ROM Totals
==============================================================================
TotalRO Size (Code + RO Data) 79808 ( 77.94kB)
TotalRW Size (RW Data + ZI Data) 42164 ( 41.18kB)
Total ROMSize (Code + RO Data + RW Data) 80416 ( 78.53kB)
==============================================================================
3) 如何得到stack size.
Stack 也就是函數的局部變數所佔空間的大小,在VS2005/VS2008下還沒有很好的方法來擷取這個資料,在RVDS下有如下方法,通過對stack先染色,然後再做測試就能擷取這個資料。