VCS常用仿真選項開關及步驟總結


轉自:https://blog.csdn.net/bcs_01/article/details/79803304

轉自:https://blog.csdn.net/wonder_coole/article/details/79618696

 

1.VCS的仿真選項分編譯(compile-time)選項和運行(run-time)選項,同時本文增加了調試選項。

1.1 VCS常用的編譯選項

選項

說明

-assert dumpoff | enable_diag | filter_past

定義SystemVerilog斷言(SVA)

dumpoff:禁止將SVA信息DUMP到VPD中

enable_diag:使能SVA結果報告由運行選項進一步控制

filter_past:忽略$past中的子序列

-cm <options>

指定覆蓋率的類型,包括:line(行覆蓋)、cond(條件覆蓋)、fsm(狀態機覆蓋)、tgl(翻轉率覆蓋)、path(路徑覆蓋)、branch(分支覆蓋)和assert(斷言覆蓋)。

如果包括兩種或以上的覆蓋率類型,可用“+”,如-cm line+cond+fsm+tgl

-cm_assert_hier <filename>

將SVA覆蓋率統計限定在文件列表中指定的module層次。

-cm_cond <arguments>

進一步細化條件覆蓋率的統計方式,包括:basic,std,full,allops,event,anywidth,for,tf,sop等選項。

-cm_count

在統計是否覆蓋的基礎上,進一步統計覆蓋的次數

-cm_dir <directory_path_name>

指定覆蓋率統計結果的存放路徑,默認是simv.cm

-cm_hier <filename>

指定覆蓋率統計的范圍,范圍在文件中定義,可以指定module名、層次名和源文件等。

-cm_log <filename>

指定仿真過程中記錄覆蓋率的log文件名

-cm_name <filename>

指定保存覆蓋率結果的文本文件的名稱

-cm obc

使能可觀察(observed)覆蓋率的編譯。傳統的覆蓋率跟功能的正確性毫無關聯,可觀察覆蓋率通過設置觀察點,一定程度上將代碼行覆蓋率與功能正確性關聯起來。

-comp64

在64-bit模式下對設計進行編譯,並生成32-bit格式的可執行文件用於32-bit模式仿真

-debug 或 -debug_all

使能UCLI命令行

-e <new_name_for_main>

指定PLI應用時main()程序的名稱

-f <filename>

指定文件列表的文件名,文件中可包括源代碼文件的路徑和名稱,也可以包括編譯選項參數

-file filename

類似於-f,但文件內容更靈活,可以包含PLI選項和對象文件,可以使用轉義字符等

-full64

在64-bit模式下編譯,生成64-bit模式仿真的可執行文件

-h or -help

列舉常用的編譯選項和運行選項的參數

-I

交互模式的編譯,讓VCS自動包括+cli,-P virsims.tab選項,並支持VirSim后處理模式下生成VCD+文件。

-ID

顯示及其的hostid或dongle ID

-ignore <keyword_argument>

屏蔽SV中unique/priority型的if或case語句的告警信息,參數包括:unique_checks、priority_checks、all。

-j<number_of_processes>

設定並行編譯的進程數,“j”后面沒有空格

-l <filename>

指定記錄VCS編譯和運行信息的log文件名

-line

使能VriSim中的單步運行

-lmc-swift

使能LMC SWIFT接口

-Mdir=<directory>

指定一個目錄讓VCS存儲編譯產生的文件,默認是csrc

-Mlib=<directory>

指定一個目錄讓VCS搜索某個模塊是否需要重新編譯。

與-Mdir配合,可以實現不同模塊的增量編譯。

-Mmakeprogram=<program>

指定用於make對象的程序,默認是make

-Mupdate[=0]

默認情況下,VCS編譯時會覆蓋上次編譯生成的makefile。如果想保留上次的makefile,使用-Mupdate=0;如果不帶=0,則進行增量編譯,並覆蓋上次的makefile。

-noIncrComp

關閉增量編譯

-notice

顯示詳細的診斷信息

-ntb

使能ntb(Native TestBench),支持OpenVera驗證平台語言結構。

-o <name>

指定編譯生成的可執行文件的名稱,默認是simv

-timescale=<time_unit>/<time_precision>

源代碼文件中有的包括`timescale編譯指令,有的不包括,如果在VCS命令行中,不包括`timescale的源代碼文件在最前面,VCS會停止編譯。使用-timescale選項為這些在前面且又沒有`timescale的源文件指定timescale

-override_timescale=<time_unit>/<time_precision>

讓源文件統一使用指定的timescale

-P <pli.tab>

指定PLI表文件

-pvalues+<parameter_name>=<value>

改變指定參數的值

-parameters <filename>

通過文件的方式改變參數的值,參數的路徑和改變的值均在文件中定義

-q

安靜模式,屏蔽VCS的編譯信息

-R

在編譯之后立即執行產生的可執行文件

-s

剛開始仿真時即停止,一般與-R和+cli配合使用

-V

使能verbose模式

-v <filename>

指定verilog庫文件

-y <dir_pathname>

指定verilog庫路徑

+libext+<extension>

讓VCS在verilog庫路徑下搜索指定的擴展名文件,與-y配合

-vera

指定標准的Vera PLI表文件和對象庫

+acc+1|2|3|4

使能PLI中的ACC(PLI 1.0的一種方式)

+cli+[<module_name>=]1|2|3|4

使能CLI調試功能

+autoprotect[<file_suffix>]

生成一個加密的源文件

+protect[<file_suffix>]

生成一個加密的源文件,只加密`protect/`endprotect部分

+putprotect+<target_dir>

指定加密文件存放的目錄

+csdf+precompile

在VCS編譯源代碼時預先SDF文件

+define+<macro_name>=<value>

定義一個文本宏,與源文件中的`ifdef配合

+error+<n>

將編譯時運行的NTB錯誤增加到N

+incdir+<directory>

指定VCS搜索`include指令使用的包含文件的目錄,可以用“+”定義多個目錄。

+maxdelays

使用SDF文件中的max值

+mindelays

使用SDF文件中的min值

+typdelays

使用SDF文件中的typ值

+nbaopt

刪除非阻塞賦值語句中的延時

+neg_tchk

使能時序檢查中的負延時

+nospecify

屏蔽specify塊中的路徑延時和時序檢查

+notimingcheck

屏蔽specify塊中的時序檢查

+nowarnTFMPC

屏蔽編譯時的“Too few module port connections”告警信息

+no_notifier

屏蔽一些時序檢查系統任務中定義的notifier寄存器的翻轉(toggling),但不影響時序violation的報告

+no_tchk_msg

屏蔽時序檢查的告警信息,但不關閉時序檢查時notifier寄存器的翻轉(toggling)

+optconfigfile+<filename>

指定Radiant技術和二態仿真用到的配置文件名

+prof

讓VCS在仿真過程中生成一個vcs.prof文件,記錄設計中最耗CPU時間的module、層次和verilog結構

+race

讓VCS在仿真過程中生成一個race.out文件,記錄設計中所有的競爭冒險

+radincr

增量編譯時使能Radiant技術

+sdf_nocheck_celltype

SDF反標時不檢查SDF文件中的CELLTYPE的一致性

+sdfverbose

顯示SDF反標時的詳細告警和錯誤信息

+v2k

支持Verilog-2001標准

+vc[+abstract][+allhdrs][+list]

使用DirectC接口時,使能verilog直接調用C/C++函數

+vcs+flush+log

加速編譯仿真時log文件緩存的刷新頻率

+vcs+flush+all

+vcs+flush+log,+vcs+flush+dump和+vcs+flush+fopen的集合

+vcs+initmem+0|1|x|z

初始化設計中所有存儲器的值

+vcs+initreg+0|1|x|z

初始化設計中所有寄存器的值

+vcs+lic+wait

一直等待license

+vpi

使能VPI

+warn=[no]ID|none|all,...

使能或關閉告警信息

1.2 VCS常用的運行選項 

選項

說明

-a <filename>

將仿真顯示的log信息附件在指定文件尾部

-E <program>

執行指定的程序用來顯示生成simv可執行文件時VCS使用的編譯選項

-i <filename>

指定一個VCS執行仿真時包含CLI命令的文件,一般與-ucli配合

-k <filename> | off

指定一個文件,用來記錄VCS仿真過程中的CLI和VirSim交互命令,默認是vcs.key,off選項是關閉記錄。

-sverilog

支持SystemVerilog

-ucli

使能UCLI命令

-vcd <filename>

指定VCD波形文件名,默認是verilog.dump,會被源代碼文件中的$dumpfile覆蓋

+vcs+learn+pli

追蹤當前仿真的ACC選項,記錄在pli_learn.tab文件中,下次仿真時可以用+applylearn來重新編譯。

+vcs+nostdout

關閉所有$monitor和$display的文本輸出,但依然會記錄在-l的log文件中。

+vera_load=<filename.vro>

定義Vera對象文件

+vera_mload=<filename>

定義一個包括多個Vera對象文件的文本文件

1.3  VCS調試模式常用選項

選項

說明

-RI

編譯完成之后馬上啟動VirSim,進入交互模式

-RIG

不編譯,啟動VirSim使用已有的可執行文件,進入交互調試模式。

+sim+<simv_name>

指定使用的可執行文件名,與-RIG配合

-RPP

運行后處理(Post-Processing)模式:啟動VirSim,使用VCD+文件

-PP

支持在源代碼文件中調用$vcdpluson生成VPD文件

+cfgfile+<filename>

定義一個VCS使用的已建好的場景配置文件

+vslogfile[+<filename>]

保存一個VirSim命令的log文件,默認是VirSim.log

 2.VCS/VCSMX 一般仿真步驟

VCS仿真可以分成兩步法或三步法, 對Mix language, 必須用三步法。仿真前要配置好synopsys_sim.setup文件,里邊有lib mapping等信息。設置環境變量'setenv SYNOPSYS_SIM_SETUP /xxx/xxx/synopsys_sim.setup'. VCS對應的waveform工具有DVE和Verdi, DVE因為是原生的,所以VCS對DVE非常友好。但DVE已經過時了,其對uvm等新feature支持的不好。Verdi是Debussy公司的產品,現在已被Synopsys收購並着力發展,說以Verdi是未來的潮流。但由於其原來是Synopsys第三方產品,所以VCS對其支持並不是很友好。 如果要支持Verdi,需要設置好NOVAS_LIB_PATH的環境變量,並且在命令行中添加-kdb的option,knowledge database(kdb)是VCS支持Verdi時的重要概念。另外,VCS支持vpd和fsdb兩個格式的dump wave。 fsdb的文件相對比較小。

Step 1: analysis  verilog/system verilog/VHDL;

     命令例子:
     

  1. vlogan -kdb -work DEFAULT [rtl.defs] -f filelistname -l logfilename +incdir+include_dir_name top.v //對verilog file 進行analysis
  2. vlogan -kdb -sverilog +define+SVA_OFF -work DEFAULT -f vlog.flist -l logfilename.log //對systemverilog進行analysis
  3. vhdlan -kdb -vhdl87 -full64 -work $VCS_LIB -f VHDL87_FILELIST -l vhdl87.log //對VHDL87進行analysis
  4. vhdlan -kdb -93 -full64 -work $VCS_LIB -f VHDL93_FILELIST -l vhdl93.log //對VHDL93進行analysis

Step 2: Elaboration

     命令例子:

 vcs -kdb -lca -noIncrComp +lint=TFIPC-L +lint=PCWM -debug_all -P /xxx/synopsys/verdi/xxxxxx/novas_new_dumper.tab  /xxx/synopsys/verdi/xxx/pli.a top_module_name  -l elab.log -Mdir=/xxx/incr_compile -o /xxx/simv

Step 3: Run simulation

     命令例子:

simv +FSDBDUMP +FSDBFILE=xxx.rtl.fsdb +PLUSSEED +seed=146123456 -l /xxx/xxx.sim.log

simv +VPDDUMP +VPDFILE=xxx.rtl.fsdb +PLUSSEED +seed=146123456 -l /xxx/xxx.sim.log

在仿真中產生coverage database

1. 在analysis step不需要做特殊處理(vlogan/vhdlan)

2. 在elaboration step需要添加這些option:

“-cm line+cond+fsm+tgl+branch -cm_linecontassign -cm_cond allops+anywidth+event -cm_noseqconst -debug_all”

3. 在simulation step添加這些option:“-cm line+cond+fsm+tgl+branch”

仿真產生的coverage data會放在simv.vdb目錄下,用“dve -covdir *.vdb”會以GUI形式打開

coverage 相關命令

產生coverage report的命令

urg -lca -dir <simv1.vdb simv2.vdb ….> -format <text|html|both> -log <log_file_name> -report <report directory name>

例如

urg -lca -dir simv.vdb -format text -log urg.log 在默認的report目錄urgReport產生各個metrics(line/fsm/branch/condition)的報告 

urg -lca -dir simv.vdb -metric line+fsm -format text -log urg.log 只產生line和fsm的報告

urg -lca -dir simv.vdb -format text -log urg.log –show summary <levels of hierarchy>

coverage merge的命令

urg -lca -f <file with list of simv.vdb directories> -map <module name> -format text -log <log_file_name> -dbname <merged .vdb name> -report <report directory name>

例如:
urg -lca -f urgfile -map dut_name -format text -log coverage.log -dbname merged_simv -report merged_coverage

urg -lca -dir simv1.vdb simv2.vdb -map dut_name -format text -log coverage.log -dbname merged_simv -report merged_coverage


免責聲明!

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



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