1. 基础知识

运行机理

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

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

2. 操作

analyze

-j10                                                                                    //多核编译,该例为10核

compile

vcs +v2k  -debug_all                                     //案例:编译顶层文件 支持verilog2001标准

-sverilog                                                                             //支持systemverilog

-mhdl                                                                                 //实现混合HDL语言的编译和仿真

-v                                                                    //列举编译的源文件

-y                                                                    //列举源文件需要用到的参考库

+libext+.v+.vhd+...                                                             //在参考库下寻找以.v和.vhd为扩展名的文件

+incdir+dir1+dir2+...                                                          //vcs在参考目录下寻找源代码中`include指示的文件

-full64                                                                                //64位编译,生成64位simv

-comp64                                                                            //64位编译,生成32位simv

-debug_pp                                                                         //生成vpd文件

-debug                                                                               //相对于debug_pp多了UCLI调试功能

-debug_all                                                                         //有相对于debug多了单步调试功能

+define+macro1=+macro2=+...               //将value传递给源文件中的宏名

+ad=                                                              //实现混合信号的编译和仿真

-timescale=/                        //指明时间尺度

+vcs+dumpvars                                                                //代替源代码中没有参数的$dumpvars任务

+error+                                                                //将编译时运行的NTB错误增加到N

+memcbk                                             //dve中查看多维数组波形,通常也需要在testbench中加$vcdplusmemon

simulation

-o simv1                                                                            //指定仿真文件名,产生多次不同的simv可执行文件

-gui                                                                                   //用图形界面打开

+vcs+stop+time                                                                //指定仿真暂停时间

+vcs+finish+time                                                              //指定仿真结束时间

-nospecify                                                                         //禁止模块路径延迟和时序检查,提高仿真速度

+notimingcheck                                                                //禁止时序检查,提高仿真速度

-V                                                                                      //verbose mode

+vpdfile+                                                       //产生指定名字的vpd文件

产生*.vcd文件

在代码中加入系统函数$vcdpluson()或者$vcdplustraceon()

debug

dve                                                                                   //等同于simv -gui 或vcs -gui -R

dve -vpd -session

3. code coverage

基本命令

-cm cond+tgl+lin+fsm+path          //打开code coverage分析 :条件+翻转+行+状态机+路径

-cm_nocasedef                             //统计覆盖率时不统计default语句

-cm_dir                     //设置覆盖率文件的路径名

-cm_name               //设置统计覆盖率文件的名字

产生*.vdb文件

统计覆盖率的文件

-cm_log                     //产生log文件

autograding                                 //针对性的做测试,统计每个testcase的覆盖率贡献

//VCS coverage on                      //避免某段语句统计覆盖率

//VCS coverage off

-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_cov和int_dat_files这两个目录中读取,进行line覆盖率的分析。现在一般用dve图形界面观察覆盖率报告。

N个testbench中N个testcase的情况

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

编译一次,运行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直接观察

编译一次,运行N次,每次更改$test$plusargs认为的参数,因为每个该任务的参数对应不同$readmemb的输入文件,等于更改了输入

simv -cm_name test1 -cm mac1

simv -cm_name test2 -cm mac2

dve -covdir *vdb                 //运行dve观察

*编译多次,建立多个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

Error-[ITSFM] Illegal `timescale for module

Module "top" has `timescale but previous module(s)/package(s) do not.

编译时,要将带有`timescale或者宏定义的文件列在前面。

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

Error-[...]找不到某些文件

这个时候先要确认该文件确实已经添加到VCS可遍历的目录里去,若源文件已添加仍找不到,可使用+incdir+选项将源文件所在目录添加进去;

其次观察一下编译的log文件,检查是否编译命令是否正确,经常会出现列举编译文件格式不规范,少加号、换行符的情况。

vcd文件中存储多维数组 vcs_IC设计——EDA软件篇——VCS使用相关推荐

  1. vcd文件中存储多维数组 vcs_怎样在Modelsim软件中产生一个.vcd文件并且显示波形?...

    解决方案ID: rd07062010_692 最后修改: 2012 年9 月11 日 产品类别: 设计软件 产品领域: 仿真/一致性验证 产品子领域: ModelSim-Altera(仿真/一致性验证 ...

  2. vcd文件中存储多维数组 vcs_VCS课时4: 使用VCD文件进行后处理

    课程目标 原来是互动的过程,这一节课主要讲的是仿真平台完成任务,用DVE打开打开波形文件 查看波形文件 查看log文件 最早的是VCD文件,在这基础上推出的VCD+文件,文件比较大,读取慢 在仿真代码 ...

  3. Verilog中的二维数组及其初始化

    Verilog中的二维数组 Verilog中提供了两维数组来帮助我们建立内存的行为模型.具体来说,就是可以将内存宣称为一个reg类型的数组,这个数组中的任何一个单元都可以通过一个下标去访问.这样的数组 ...

  4. 二维数组在c语言中的作用,C语言中的二维数组

    1.二维数组的定义和引用 一. 数据类型 数组名[常量表达式1][常量表达式2]; (1)假如有个二维数组array[n][m],则行下标的取值范围0~n-1 (2)列下标的取值范围0~m-1 (3) ...

  5. java代码中fastjson生成字符串和解析字符串的方法和javascript文件中字符串和json数组之间的转换方法...

    1.java代码中fastjson生成字符串和解析字符串的方法 List<TemplateFull> templateFulls = new ArrayList<TemplateFu ...

  6. 【C 语言】文件操作 ( 读取文件中的结构体数组 | feof 函数使用注意事项 )

    文章目录 一.读取文件中的结构体数组 | feof 函数使用注意事项 二.代码示例 一.读取文件中的结构体数组 | feof 函数使用注意事项 读取文件结构体时 , 可以循环读取文件中的数据 , 只使 ...

  7. java 数组存入数据库_Java中关于二维数组的理解与使用

    今天练习的时候遇到一个题目,题目需求是这样的: 需求说明: 根据3个班各5名学生某门课程的成绩,正确使用二维数组计算如图所示3个班各自的总成绩 分析: 要实现这个功能需要存储两个信息: 一个是班级信息 ...

  8. c语言字符串二维数组的动态分配应,C语言中动态分配二维数组复习过程.doc

    C语言中动态分配二维数组复习过程.doc C语言中动态分配二维数组在C中动态分配内存的,对于单个变量,字符串,一维数组等,都是很容易的.C中动态分配二维数组的方法,很少有C语言书中描述,我查找了有的C ...

  9. scala中的二维数组_Scala中的多维数组

    scala中的二维数组 多维数组 (Multi-dimensional arrays) An Array that stores data in the form multidimensional m ...

最新文章

  1. Leetcode:114. Flatten Binary Tree to Linked List
  2. mysql 一周一月_mysql查询当天、本周,本月,上一个月的数据
  3. 基于netty的websocket协议实现
  4. python 二进制文件_使用Python进行二进制文件读写的简单方法(推荐)
  5. android 购物车抛物线,添加到购物车抛物线动画
  6. java中如何将非整数保留到小数点后指定的位数
  7. mysql的安装胚子_下列哪个制剂是以主要药味缩写加剂型的原则命名的
  8. C++set容器去重法
  9. Python当前线程休眠1秒钟
  10. ubuntu安装vasp_用强大的GROMACS分析工具分析VASP的动力学结果
  11. cus系统前台改版 beta1.1发布
  12. manjaroLinux安装卸载oh-my-zsh
  13. 速达pro服务器显示试用,速达v3-pro商业版突然变成试用版了,加密狗的灯不亮了,是什么原因- _0...
  14. synchronized锁住的对象
  15. 【HTTP Live Streaming】(四)苹果公司提供的7款 hls 工具
  16. 探索GIS+物联网应用场景 MapGIS IoT实时大数据解决方案
  17. 504 压测geteway_504 Gateway Time-out是怎么回事?
  18. java中使用poi导出ppt(图片和表格)
  19. seo伪原创文章优化(怎么找可以做伪原创的文章)
  20. Android开发常见面试

热门文章

  1. Android Studio从入门到精通的免费视频教程
  2. POJ 1753 翻棋子 (dfs+递归)。
  3. 微信hook——登录界面的账号密码
  4. shells - 有效登录 shell 的路径名
  5. 墨天轮沙龙 | 北京大学李文杰:面向知识图谱应用的图数据库系统gStore
  6. php 图片生成封面,在线图片生成或制作或编辑的网站
  7. 医疗电子方案——血压计方案
  8. RS485自行收发的实现方法
  9. 一个完整的php项目示例
  10. 【团队介绍】命劫开发