基于C++TCL PLI聯(lián)合仿真下的芯片驗證方法研究
4 軟件層關(guān)鍵技術(shù)
編寫參考模型和記分牌屬于驗證過程的軟件層,采用C++語言編程實現(xiàn)。把這兩個驗證組件設(shè)計成兩個函數(shù),分別為Pan_rm(char *s_indata,vectorchar*>vr_outdata)和Pan_check(char*s_indata,vectorchar*>vc_outdata),函數(shù)入口參數(shù)為字符指針類型的原因是TCL腳本語言處理的全部是字符類型的變量,腳本層生成的激勵數(shù)據(jù)為字符類型。
當仿真執(zhí)行到Verilog代碼中PLI任務(wù)的時候,PLI函數(shù)中的calltf()會調(diào)用Pan_rm函數(shù)或Pan_check函數(shù)。在發(fā)送器中,calltf()把發(fā)送端共享緩存區(qū)中的數(shù)據(jù)取出并傳給。Pan_rm函數(shù),Pan_rm函數(shù)把入口的字符類型變量轉(zhuǎn)換成整型變量,然后根據(jù)需求規(guī)格做相應(yīng)的處理,最后把處理結(jié)果放入共享隊列;在接收器中,calltf()收集設(shè)計模塊的處理結(jié)果并傳給Pan_check函數(shù),Pan_check函數(shù)取出共享隊列里面對應(yīng)的Pan_rm函數(shù)的處理結(jié)果并與Pan_check函數(shù)的入口數(shù)據(jù)進行比較,把比較的結(jié)果存人到接收端共享緩存區(qū),最后打印結(jié)果到一個輸出文件中以便驗證人員定位問題。本文引用地址:http://butianyuan.cn/article/191903.htm
5 共享緩存區(qū)
為了實現(xiàn)腳本層,時序?qū)雍蛙浖幽軌蚴褂霉蚕砭彺鎱^(qū),要把C++擴展的TCL命令、編寫的PLI函數(shù)命令以及軟件層代碼寫在同一個C++工程文件里,定義全局變量作為共享緩存區(qū)實現(xiàn)三個層次的互聯(lián),最后通過VC編譯代碼以動態(tài)庫的形式加載到仿真器里面去。
6 結(jié) 語
TCL腳本命令在仿真之前運行,一經(jīng)執(zhí)行所有的激勵數(shù)據(jù)就會生成,在PLI函數(shù)的checktf()例程里面獲取modelsim的TCL解釋器,并用TCL初始化函數(shù)將其初始化,這樣擴展的TCL命令就可以在Modelsim的解釋器里使用了。
需要注意的是,如果不在PLI函數(shù)的checktf()例程里面獲取并初始化Modelsim的TCL解釋器,那么PLI函數(shù)是加載在Modelsim內(nèi)核的,如果要修改PLI函數(shù)里面調(diào)用的全局變量,要在擴展的TCL命令之前加上vsim_kernel,這樣才可以修改全局變量。當驗證組件準備好、驗證環(huán)境搭建完畢后,編寫自動運行腳本執(zhí)行仿真過程,按照如圖2所示的操作流程自動進行驗證工作:運行自動腳本,啟動仿真器,加載動態(tài)庫,Modelsim的TCL解釋器運行TCL腳本,開始仿真推進仿真時間,觸發(fā)發(fā)送器的PLI函數(shù)發(fā)送數(shù)據(jù),軟件層分析數(shù)據(jù)得到結(jié)果,設(shè)計模塊分析數(shù)據(jù)得到結(jié)果,觸發(fā)接收器的PLI函數(shù)收集數(shù)據(jù),軟件層比較數(shù)據(jù),打印分析結(jié)果。
評論