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