当前位置:   article > 正文

IC设计——EDA软件篇——VCS使用_vcs 显示多维数组

vcs 显示多维数组

1. 基础知识

  • 运行机理

HDL仿真器编译代码的过程由编译,建模和仿真三个阶段(详情见该文第4大点:IC设计——Verilog HDL学习笔记_KGback的博客-CSDN博客),VCS将三个阶段独立开来,使compilation与elaboration可以通过仿真前的命令行单独执行,而simulation阶段则可以直接运行建立好的模型

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

2. VCS常用option

可参考链接:[VCS]VCS常用命令詳解 - it610.com

  • analyze
  1. -j10                                                                                    //多核编译,该例为10核
  • compile
  1. vcs +v2k  <file_name> -debug_all                                     //案例:编译顶层文件 支持verilog2001标准
  2. -sverilog                                                                             //支持systemverilog
    vcs联合编译v/sv/c++代码:vcs联合编译v/sv/c++代码_sxlwzl的专栏-CSDN博客_vcs编译c
  3. -mhdl                                                                                 //实现混合HDL语言的编译和仿真
  4. -v <file_name>                                                                   //列举编译的源文件
  5. -y  <dir_name>                                                                  //列举源文件需要用到的参考库
  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=<value>+macro2=<value>+...               //将value传递给源文件中的宏名
  14. +ad=<file_name>                                                              //实现混合信号的编译和仿真
  15. -timescale=<time_unit>/<time_precision>                        //指明时间尺度
  16. +vcs+dumpvars                                                                //代替源代码中没有参数的$dumpvars任务
  17. +error+<N>                                                                //将编译时运行的NTB错误增加到N
  18. +memcbk                                             //dve中查看多维数组波形,通常也需要在testbench中加$vcdplusmemon
  19. -f filelist.f                                        // 当文件较多时,为避免添加失误,可使用filelist.f文件
     
  • simulation
  1. -o simv1                                                                            //指定仿真文件名,产生多次不同的simv可执行文件
  2. -gui                                                                                   //用图形界面打开
  3. +vcs+stop+time                                                                //指定仿真暂停时间
  4. +vcs+finish+time                                                              //指定仿真结束时间
  5. -nospecify                                                                         //禁止模块路径延迟和时序检查,提高仿真速度
  6. +notimingcheck                                                                //禁止时序检查,提高仿真速度
  7. +vpdfile+<file_name>                                                       //产生指定名字的vpd文件
  8. 产生*.vcd文件
    在代码中加入系统函数$vcdpluson()或者$vcdplustraceon()
  9. -licwait 10                                                                         // 等待可用license 10minutes
  • debug
  1. dve  -full64                                                                   //等同于simv -gui 或vcs -gui -R
  2. dve -full64 -vpd <vpd_file> -session <session_file>    //打开波形
    可参考链接:dve的启动 - yuanpin318的日志 - EETOP 创芯网论坛            
  • ucli命令

  1. 读取二维数组内容
    memory -write <signal> -file <output_file>

3. 与Verdi联调

  • UFE工作流程

在database准备阶段,可以使用UFE工作流可以简化设计流程

  1. 在vcs编译时添加-kdb选项来开启UFE工作流
  2. 编译后加载波形和设计,两种方法:
    一种是加载没有FSDB的设计,即运行:
    verdi -dbdir <path>/sim.daidir
    另一种是加载有FSDB的设计,即运行:
    verdi -ssf <my>.fsdb
  • pre-load工作流

在大型设计的仿真调试时,可以使用pre-load工作流来实现较快的打开速度和较少的内存花销

  1. vcs编译时加-kdb=shell选项
  2. 运行后可以先读取配置文件,再加载波形和数据,注意需要设置环境变量VERDI_SHELLDB,例如:
    verdi -dbdir simv.daidir -preload <preloadFile>、
  • 使用TFV自动trace信号

Temporal Flow View可以通过图形的方式将电路结构和信号时序表现出来,从而追寻引发触变的源信号。

基于TFV,可以使用TraceX组件,可以追寻信号被置为X的原因。

  • 电路图debug

主要debug功能有:

  1. trace fanin/fanout
  2. 可以图形化地展现FSM
  • 波形比较

verdi通过nCompare来比较两个fsdb文件,同时可以载入规则文件来设置比较的触发条件、误差的容忍值等,例如:

nCompare -rule <rule_file> -fsdb <a.fsdb> -fsdb <b.fsdb> -report <report_file>

4. code coverage

基本命令

  1. -cm cond+tgl+lin+fsm+path          //打开code coverage分析 :条件+翻转+行+状态机+路径
  2. -cm_nocasedef                             //统计覆盖率时不统计default语句
  3. -cm_dir    <dir_name>                  //设置覆盖率文件的路径名
  4. -cm_name  <file_name>              //设置统计覆盖率文件的名字
  5. 产生*.vdb文件
    统计覆盖率的文件
  6. -cm_log      <file_name>               //产生log文件
  7. autograding                                 //针对性的做测试,统计每个testcase的覆盖率贡献
  8. //VCS coverage on                      //避免某段语句统计覆盖率
    //VCS coverage off               
  9. -cm_heir <fime_name>                //避免某模块统计覆盖率
    该命令详情见链接:vcs产生code coverage与function coverage | 骏的世界

流程

vcs 覆盖率收集2——覆盖率选项 + 合并覆盖率_vcs覆盖率-CSDN博客

  • 命令分析

$> 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   <merge_name>  //也可运行dve
  • 初始值的确定

参考链接:vcs initreg选项的使用_kevindas的博客-CSDN博客

5. error和warning

  • 同名module编译问题

vcs编译解决 module名重复的冲突问题_cy413026的博客-CSDN博客_vcs两步法和三步法区别

  • 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里应使用非阻塞赋值 <=

  3. Error-[...]找不到某些文件
    这个时候先要确认该文件确实已经添加到VCS可遍历的目录里去,若源文件已添加仍找不到,可使用+incdir+选项将源文件所在目录添加进去;
    其次观察一下编译的log文件,检查是否编译命令是否正确,经常会出现列举编译文件格式不规范,少加号、换行符的情况。

     



     

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/660073
推荐阅读
相关标签
  

闽ICP备14008679号