TURBO51嵌入式微處理器功能驗證
4 RTL模擬仿真和覆蓋率及代碼風(fēng)格檢查
4. 1 RTL仿真
在功能時序文檔和制定RTL 模擬仿真計劃時,RTL編寫和模擬仿真在每個子模塊, 宏模塊, 系統(tǒng)級設(shè)計功能行為描述和驗證計劃完成后才開始, 每個子模塊RTL編碼完成后放入用行為級描述的模型進(jìn)行仿真, 再用EDA 工具提供的代碼檢查工具作RTL代碼檢查, 再仿真直到達(dá)到代碼覆蓋率, 然后層層向上做宏模塊和系統(tǒng)級的RTL 代碼檢查和基于代碼覆蓋率的仿真。驗證的主要排錯和測試在這個階段進(jìn)行, 包括檢查是否與8051標(biāo)準(zhǔn)完全兼容的驗證, 高風(fēng)險區(qū)的驗證和運行操作系統(tǒng)及應(yīng)用程序。
這里面使用了兩個標(biāo)準(zhǔn), 即由EDA工具給出的測試激勵對已設(shè)計邏輯的代碼覆蓋率和自己定義的臨界功能覆蓋率。
在模擬仿真中, 對臨界指令組合采用手工匯編語言編寫激勵。在兼容性測試中, 包括指令集測試,位尋址空間遍歷,上電測值測試, 寄存器文件讀寫遍歷, LS變量RAM 遍歷, 代碼空間分頁切換,中斷控制, 8051標(biāo)準(zhǔn)外設(shè), 定計, IO, 擴(kuò)展外設(shè)驗證, SOC 總線讀寫, PWM 脈寬調(diào)制, 在線程序燒入, 基礎(chǔ)應(yīng)用:
軟件I2C讀寫, 從外部讀取64KB 數(shù)據(jù)和系統(tǒng)測試,基于操作系統(tǒng)的遙控按鍵解碼和對片上其它器件的參數(shù)讀取。在此期間使用閃存的仿真模型,對于指令集測試, 在現(xiàn)有商用軟件開發(fā)環(huán)境下創(chuàng)建測試激勵, 對全部111條指令, 按 標(biāo)準(zhǔn)8051手冊上對每條指令的執(zhí)行結(jié)果值, 按分支目標(biāo), 分支方向, 對標(biāo)識位的影響這幾個方面進(jìn)行測試。先在基準(zhǔn)平臺上進(jìn)行單步運行,記下每條指令的每種狀態(tài)值, 再將這些值作為正確依據(jù), 執(zhí)行完一項比較一項結(jié)果, 如相同就繼續(xù)向前, 同時一條IO 輸出一個方波,如不同則進(jìn)入本條指令結(jié)果, 標(biāo)記, 分支的死循環(huán), 通過查這個死循環(huán)地址便可快速定位是錯在哪條指令的什么地方, 同時另一IO輸出另一種方波。此程序先在基準(zhǔn)平臺運行通過,不進(jìn)死循環(huán), 再把它轉(zhuǎn)成數(shù)據(jù)文件導(dǎo)入仿真模型。寄存器文件讀寫也是依據(jù)8051手冊, 區(qū)分不同尋址方式對應(yīng)的寄存器文件。在測試結(jié)果中,最重要的一個觀測點是指令提交地址寄存器, 它記錄了真正的處理器運行走向, 只要它未出現(xiàn)異常, 這個測試項就認(rèn)為無嚴(yán)重錯誤。RTL模擬在TURBO51中分為測試激勵生成, 結(jié)果檢測和覆蓋率分析三個部分。TURBO51采用了手工編寫臨界條件和基礎(chǔ)測試程序,通過后再運行實際應(yīng)用程序和操作系統(tǒng)。此階段完成的標(biāo)準(zhǔn)是對代碼和功能覆蓋率的檢查。在模塊級RTL的編寫過程中一邊對代碼風(fēng)格和仿真測試覆蓋率進(jìn)行檢查,同時進(jìn)行綜合以測試關(guān)鍵路徑對設(shè)計時序的滿足。作為輔助驗證, 自動指令生成指令庫, 指令生成控制器生成的測試激勵同時也在一個行為級8051指令集模擬器仿真模型中一起運行, 逐條進(jìn)行結(jié)果比較, 當(dāng)發(fā)現(xiàn)結(jié)果不一致時對指令進(jìn)行記錄,當(dāng)發(fā)現(xiàn)分支不一致時仿真停止或仿真量到達(dá)一定規(guī)模時也停止仿真, 供查看代碼覆蓋率用。
4. 2 覆蓋率和代碼風(fēng)格檢查
基于模擬仿真的驗證的困難是無論采用的測試激勵是來自真實應(yīng)用還是指令自動生成, 都無法證明整個處理器不出錯。因此TURBO51仿真驗證的完成標(biāo)準(zhǔn)是在錯誤收斂了的情況下增加更多的測試向量, 使EDA 工具提供的設(shè)計邏輯覆蓋率達(dá)到塊級100%和表達(dá)式級93% , 功能覆蓋率達(dá)到100% 。
功能覆蓋率的測試是設(shè)計規(guī)格書中定義的全部行為和驗證計劃的全部臨界點。在進(jìn)行覆蓋率檢查的過程中,可以得出目前的總覆蓋率和對一個模塊中某個狀態(tài)未被測試向量覆蓋的邏緝和輸入值, 它指明了漏洞存在, 指導(dǎo)手工編寫直接針對未覆蓋邏緝的測試。另外代碼覆蓋在TURBO51的設(shè)計中也被用于排除冗余或重復(fù)的邏輯, 節(jié)省不必要的關(guān)鍵路徑開銷和邏輯資源。代碼檢查: 代碼檢查使用EDA 工具所提供的功能。使代碼在綜合中不會產(chǎn)生異常, 使模擬仿真的結(jié)果與FPGA 不一致。在這里用形式驗證工具對修改后和修改前的代碼進(jìn)行等價性比較。表1是各大模塊的RTL 仿真代碼覆蓋率, 表2是主要模塊在不同測試激勵下的代碼塊覆蓋率和表達(dá)式覆蓋率。均由Cadence Incisive 給出。
表1 主要模塊代碼測式覆概率。
表2 主要模塊在不同的測試激勵下的覆蓋率
5 物理原型驗證
物理原型驗證是AS IC 設(shè)計中通常采用的另一種重要的驗證手段。它是將RTL 描述通過針對FPGA目標(biāo)器件的綜合及優(yōu)化, 布局布線及優(yōu)化并同時進(jìn)行了靜態(tài)時序分析后形成ASIC 設(shè)計的另一種物理實現(xiàn)形式。它能比RTL 模擬仿真更接近真實的AS IC, 能在系統(tǒng)板上在功能上完全取代ASIC 進(jìn)行工作, 但最高速度一般比ASIC 慢一半以上。在這些都完成并通過了設(shè)計描述文檔和驗證文檔的審核后進(jìn)行FPGA 硬件加速仿真,完全在系統(tǒng)應(yīng)用環(huán)境下檢驗兼容性及正確性并做出初步性能*測。相對于仿真而言, 它能在提高系統(tǒng)運行速度上提高幾個數(shù)量級。
評論