数字IC设计——EDA软件篇——VCS使用

1. 基础知识

  • 运行机理

HDL仿真器编译代码的过程由编译,建模和仿真三个阶段(详情见该文第4大点:https://blog.csdn.net/qq_39815222/article/details/89601331),VCS将三个阶段独立开来,使compilation与elaboration可以通过仿真前的命令行单独执行,而simulation阶段则可以直接运行建立好的模型

因此VCS修改参数(parameter类型)需要在独立的elaboration阶段修改,类似的QuestaSim可在仿真阶段修改(后台事先会执行elaboration阶段)。

2. 操作

  • compile
  1. vcs +v2k  -debug_all                                     //案例:编译顶层文件 支持verilog2001标准
  2. -sverilog                                                                             //支持systemverilog
  3. -mhdl                                                                                 //实现混合HDL语言的编译和仿真
  4. -v                                                                    //列举编译的源文件
  5. -y                                                                    //列举源文件需要用到的参考库
  6. +libext+.v+.vhd+...                                                             //在参考库下寻找以.v和.vhd为扩展名的文件
  7. +incdir+dir1+dir2+...                                                          //vcs在参考目录下寻找源代码中`include指示的文件
  8. -full64                                                                                //64位编译,生成64位simv
  9. -comp64                                                                            //64位编译,生成32位simv
  10. -debug_pp                                                                         //生成vpd文件
  11. -debug                                                                               //相对于debug_pp多了UCLI调试功能
  12. -debug_all                                                                         //有相对于debug多了单步调试功能
  13. +define+macro1=+macro2=+...               //将value传递给源文件中的宏名
  14. +ad=                                                              //实现混合信号的编译和仿真
  15. -timescale=/                        //指明时间尺度
  16. +vcs+dumpvars                                                                //代替源代码中没有参数的$dumpvars任务
  • simulation
  1. -o simv1                                                                            //指定仿真文件名,产生多次不同的simv可执行文件
  2. -gui                                                                                   //用图形界面打开
  3. +vcs+stop+time                                                                //指定仿真暂停时间
  4. +vcs+finish+time                                                              //指定仿真结束时间
  5. -nospecify                                                                         //禁止模块路径延迟和时序检查,提高仿真速度
  6. +notimingcheck                                                                //禁止时序检查,提高仿真速度
  7. -V                                                                                      //verbose mode
  8. +vpdfile+                                                       //产生指定名字的vpd文件
  9. 产生*.vcd文件
    在代码中加入系统函数$vcdpluson()或者$vcdplustraceon()
  • debug
  1. dve                                                                                   //等同于simv -gui 或vcs -gui -R
  2. dve -vpd -session

3. code coverage

  • 基本命令
  1. -cm cond+tgl+lin+fsm+path          //打开code coverage分析 :条件+翻转+行+状态机+路径
  2. -cm_nocasedef                             //统计覆盖率时不统计default语句
  3. -cm_dir                     //设置覆盖率文件的路径名
  4. -cm_name               //设置统计覆盖率文件的名字
  5. 产生*.vdb文件
    统计覆盖率的文件
  6. -cm_log                     //产生log文件
  7. autograding                                 //针对性的做测试,统计每个testcase的覆盖率贡献
  8. //VCS coverage on                      //避免某段语句统计覆盖率
    //VCS coverage off               
  9. -cm_heir                 //避免某模块统计覆盖率
    该命令详情见链接:http://www.lujun.org.cn/?p=4569
  • 命令分析

$> vcs -Mupdate -cm line -cm_dir my_cov  source.v
$> simv -cm line -cm_dir int_dat_files
$> vcs -cm_pp -cm line -cm_dir my_cov -cm_dir int_dat_files


第一条命令是把source.v文件进行编译, 把编译结果放入my_cov文件夹中. 选项-cm line表示在编译时, 要加入line 覆盖率分析.
第二条命令运行仿真,同样选项-cm line选项表示仿真是加入line覆盖率分析, 并把结果存入ini_data_files目录中
第三条进行覆盖率分析, 分析文件从my_covint_dat_files这两个目录中读取, 进行line覆盖率的分析。现在一般用dve图形界面观察覆盖率报告。

  • N个testbench中N个testcase的情况

cmView会将各自的仿真的中间文件合并,因此可以使用同一个testbench,编译一次,但多次仿真,就可以得到多次仿真的覆盖报告

  1. 编译一次,运行N次,每次运行前更改$readmemb任务的文本文件,就等同于更改了输入,得到多个test文件(test1,test2......)
    simv -cm line -cm_name test1
    simv -cm line -cm_name test2

    vcs -cm_pp -cm merge_name         //运行cmViem,会在reports目录下写入一个混合的报告,或者运行dve直接观察
  2. 编译一次,运行N次,每次更改$test$plusargs认为的参数,因为每个该任务的参数对应不同$readmemb的输入文件,等于更改了输入
    simv -cm_name test1 -cm mac1
    simv -cm_name test2 -cm mac2

    dve -covdir *vdb                 //运行dve观察
  3. *编译多次,建立多个simv,运行多次,每次用的testbench不同
    vcs -o simv1 -cm...
    vcs -o simv2 -cm...                                            //多次simv,最后执行cmView
    vcs -cm_pp line -cm_dir ./simv1.vdb -cm_dir ./simv.vdb     //也可运行dve


 

4. error和warning

  • error
  1. Error-[ITSFM] Illegal `timescale for module
    Module "top" has `timescale but previous module(s)/package(s) do not.
    编译时,要将带有`timescale或者宏定义的文件列在前面。

  2. Error-[SV-IDOCBO] Illegally driving clocking block output
    Clocking block output rtr_io.cb.reset_n is illegally driven by a blocking assignment.
    interface里的clocking block里应使用非阻塞赋值 <=

     



     

你可能感兴趣的:(数字IC)