<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > EDA/PCB > 設計應用 > 基于C++TCL PLI聯合仿真下的芯片驗證方法研究

          基于C++TCL PLI聯合仿真下的芯片驗證方法研究

          作者: 時間:2009-11-05 來源:網絡 收藏

          4 軟件層關鍵技術
          編寫參考模型和記分牌屬于驗證過程的軟件層,采用C++語言編程實現。把這兩個驗證組件設計成兩個函數,分別為Pan_rm(char *s_indata,vectorchar*>vr_outdata)和Pan_check(char*s_indata,vectorchar*>vc_outdata),函數入口參數為字符指針類型的原因是腳本語言處理的全部是字符類型的變量,腳本層生成的激勵數據為字符類型。
          當仿真執(zhí)行到Verilog代碼中任務的時候,函數中的calltf()會調用Pan_rm函數或Pan_check函數。在發(fā)送器中,calltf()把發(fā)送端共享緩存區(qū)中的數據取出并傳給。Pan_rm函數,Pan_rm函數把入口的字符類型變量轉換成整型變量,然后根據需求規(guī)格做相應的處理,最后把處理結果放入共享隊列;在接收器中,calltf()收集設計模塊的處理結果并傳給Pan_check函數,Pan_check函數取出共享隊列里面對應的Pan_rm函數的處理結果并與Pan_check函數的入口數據進行比較,把比較的結果存人到接收端共享緩存區(qū),最后打印結果到一個輸出文件中以便驗證人員定位問題。

          本文引用地址:http://www.ex-cimer.com/article/191903.htm


          5 共享緩存區(qū)
          為了實現腳本層,時序層和軟件層能夠使用共享緩存區(qū),要把C++擴展的命令、編寫的函數命令以及軟件層代碼寫在同一個C++工程文件里,定義全局變量作為共享緩存區(qū)實現三個層次的互聯,最后通過VC編譯代碼以動態(tài)庫的形式加載到仿真器里面去。


          6 結 語
          腳本命令在仿真之前運行,一經執(zhí)行所有的激勵數據就會生成,在PLI函數的checktf()例程里面獲取modelsim的TCL解釋器,并用TCL初始化函數將其初始化,這樣擴展的TCL命令就可以在Modelsim的解釋器里使用了。

          需要注意的是,如果不在PLI函數的checktf()例程里面獲取并初始化Modelsim的TCL解釋器,那么PLI函數是加載在Modelsim內核的,如果要修改PLI函數里面調用的全局變量,要在擴展的TCL命令之前加上vsim_kernel,這樣才可以修改全局變量。當驗證組件準備好、驗證環(huán)境搭建完畢后,編寫自動運行腳本執(zhí)行仿真過程,按照如圖2所示的操作流程自動進行驗證工作:運行自動腳本,啟動仿真器,加載動態(tài)庫,Modelsim的TCL解釋器運行TCL腳本,開始仿真推進仿真時間,觸發(fā)發(fā)送器的PLI函數發(fā)送數據,軟件層分析數據得到結果,設計模塊分析數據得到結果,觸發(fā)接收器的PLI函數收集數據,軟件層比較數據,打印分析結果。


          上一頁 1 2 3 下一頁

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();