VCS學習(1)


一:如何執行(編譯執行)

  1:編譯鏈接生成二進制可執行文件

  $vcs source_file[compile_time_options],  例如 vcs +v2k filename.v -debug_all   (+2k指2001版本)

    compile_time_options 可選項

  A:基本可選項

         -Mupdate     :增量編譯,再次編譯時只編譯改變的文件,提高速率

     -R                :run after compilation,編譯后繼續執行run

       -gui             :打開DVE圖形界面

       -l<filename>:set log file name,用於寫編譯信息,大型項目中經常使用,如 -l compile.log

    -sverilog      :支持system verilog

      +v2k    :支持verilog2001的標准

  B:工藝庫可選項

      -v lib_file  :lib_file(工藝庫名字) RTL代碼里涉及到工藝庫

   -y lib_dir   :告訴vcs到哪里找這個工藝庫

     +libext+lib_ext:當用到很多庫,代替-v

     +incdir+inc_dir:代碼里如果有include,使用這個命令告訴vcs包含文件的位置。verilog代碼里面寫`include "filename.vh"

     C: 文件可選項

   -f file               :當有很多源代碼時,將這些源代碼整合到file里

  D:修改可執行文件名字

          -o foo     :可執行文件名為simv,使用此命令改名字;      如 -o my_simv

  F:define 一個宏

    +define +<macro_name>=<value> :macro_name 宏名;value 初始化值;    如+define+INCR_COUNTER

 2:執行

    $simv[run_tiime_options]

例如   ./sim -gui &(./指在當前文件,sim指編譯得到的可執行文件,gui指打開vcs的gui界面-dve,&指后台執行)將會得到執行的PID值

      -s   結束仿真時間

      $plusargs() 動態接收參數

      -E echo     

      -l logfile   把仿真信息寫入logfile文件里

二:基本知識

1:  verilog compiled simulator;包含PLI 1.0/VPI接口(調用c++/c的程序);

2:  支持多抽象層仿真 

    行為級描述(驗證,不可綜合) - RTL級描述(設計,寄存器傳輸級) - Gate-level(門級,RTL級經過綜合得到,與具體工藝              庫相關,TSMC,SMIC,CSMC)

三:vcs debug

  三種debug方法:system task calls,VCS UCLI,VCS DVE(GUI)

  考慮因素:速度,信號可見性,信號。。可用性

1:  system task calls

    $display 打印變量賦值前值

    $montor 打印變量賦值后值,變量值改變,打印值也變

    $time  仿真時間

    $readmemb  將文件里的內容讀入存儲器中,讀二進制binary

    $readmemh 將文件里的內容讀入存儲器中,讀十六進制hexadmecimal

2:  VCS UCLI命令行  效果不好   $vcs filename +v2k -ucli -R

3:  DVE

    根據此筆記的一打開DVE軟件,DVE支持交互式仿真(在終端輸入命令),支持后仿分析

          tips1:task里面的參數在波形上顯示不出來,所以最好使用display顯示出來

     tips2:debug 

      f10 單步執行(括號加外箭頭),f11單步且進入函數體執行(括號加內箭頭);每次單步仿真結束需點下箭頭重新仿真方可再次仿真

          tips3:波形知識點 

                  F鍵:波形自動,全屏

     group:將多個信號組成一組

     set radix:波形的不同顯示形式,十進制,二進制....狀態機顯示狀態為set radix - state name

     找波形里面具體數字有沒有出現:右上角空-value-數字-前后點,可發現有沒有這個數字

     compare:選中比較的兩個圖形-signal-compare-name輸入-creat-close

     構造bus:選中信號-set bus-觀察bus后的總線波形

    tips4:DPI  (在verilog里調用c語言的代碼)

                第一步:寫一個c文件,c文件要求:#include“svdpi.h“

                

 

    第二步:在verilog源文件里添加調用c代碼的語句

          

    第三步:在終端執行編譯命令時,添加c代碼文件以及sverilog命令

    

    第四步:終端執行 ./simv

    顯示hello,verilog

三:post-processing with VCD+ files

   VCD(verilog change dump)是VCS的早期波形文件,VCD+是VCD壓縮文件;大的項目波形文件很占內存與影響速度,所以產生了VCD波形文件,記錄寄存器的值,層次等;將一些系統函數(例如$vcdpluson)嵌入到源代碼中,編譯仿真產生VCD文件(后綴名為vdp),打開DVE,參考log文檔與波形文件,快速解決bug。

1:什么時候使用VCD+

  當debug一個成熟的設計時,當仿真分析需要多名設計人員參與時,當仿真采用script(如makefile)時

2:VCD+的系統函數

  $vcdpluson(level_number,module_instance)從module這個模塊開始,記錄number-1層

      level_number:  0-記錄特定模塊的所有層次模塊

              1-記錄特定模塊的頂層模塊

              n-記錄特定模塊向內的n個模塊

      module_instance:以此模塊為基准

  $vcdplusoff(module_instance) 關閉

3:VCD+的編譯執行

  compiling:  vcs files vcdplus_switches other_switches

        files: sources files

        vcdplus_switches: 更改vcd文件名,否則在simulator后默認生成vcdplus.vpd文件。+vpdfile

                 +vdpfilename.vpd

        other wsitches: vcs的其他開關選項;

        還有debug選項開關選項:-debug,-debug_all, debug_pp

  simulate:  ./simv

  打開DVE,打開vcd文件:dve -vpd vcdplus.vpd。  或者dve &—>file—>open database—>vcdplus.vpd

4:在源代碼如何添加系統函數

   `ifdef dumpme

    $vcdpluson();

   `endif

  通過是否定義dumpme(一般在腳本的complier里定義宏)+define+dumpme

5:$test$plusargs  鍵盤動態接收參數

6 :  在已有makefile文件的基礎上,使用VCD文件的步驟

  make clean -> make com -> make sim -> dve &(或者dve -dvp vcdplus.vpd) -> 查看波形,可雙擊波形上的某個數值進入源代碼 - >debug   

7:readmemb:將文件里的內容存在數組里。一般在VCD文件里沒有數組的波形,可使用$vcdplusmemon將數組導入。

8:$display

   $display("hello verilog  ",`__FILE__,`__LINE__);  //打出具體文件具體行的hello verilog,兩個下划線

   //打出的hello,verilog為紅色字體

 

 

 

 

   

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM