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