概述

VCS全称为Verilog Compiled Simulator

VCS仿真

当我们完成了一个模块的设计文件编写后 ,需要

  • 使用VCS进行编译(compile),生成优化的仿真可执行文件
  • 对该Verilog设计进行仿真(simulate),执行用户的testbench,报告仿真结果
  • 调试(debug)(两种方式)
    基于Test:使用CLI(command line interface 命令行界面)
    基于GUI(图形用户界面):使用VirSim

VCS可支持多种抽象级别的仿真,包括行为级,RTL级,门级(with SDF support)和Sign_off

VCS的安装目录

仿真过程

  1. 将Verilog源代码编译为可执行文件

vcs design.v

  • 解析Verilog源文件,检查是否存在语法错误
  • 构建层次结构
  • 检查编译选项
  • 执行优化(optimization)
  • 生成并链接目标代码,run time routines和用户PLI以创建simv仿真二进制可执行文件
  1. 运行可执行的simv以进行模拟(simulate)

simv

  • exercise design with testbench stimulus(测试台激励)
  • 打印 PLI 和 Verilog 系统任务(task)和函数(functions)

编译的命令形式

vcs source_files [compile_time_options]

  • source_file:被测模块(DUT design for test)的全部Verilog源文件
  • compile_time_options(可选):控制VCS编译源文件的方式
  • 对于优化(optimization)的可见性(visibility)和性能很重要
  • 执行后产生仿真二进制可执行文件simv

VCS调试(debugger)

VCS调试支持:

  • 追踪和定位error
  • 三种general method
    1. Verilog系统任务调用
    2. VCS CLI
    3. VCS VirSIm
  • 通过Verilog系统任务进行调试时考虑四个因素
    1. 仿真速度
    2. 信号可视性(由系统任务指定)
    3. 信号可追踪性
    4. 可用性/可行性
      有助于快速的视觉反馈
      可能需要多次迭代插入Verilog系统任务的调用,然后进行编译和模拟

常见的Verilog系统任务命令:

  • Debug visibility

$display //将格式化信息打印到控制台
$strobe //类似于 $display,但是要等到该时刻所有的操作都执行完后才开始打印
$monitor //监视列表信号,每当列表中的信号发生改变时,打印整个列表中信号的格式化信息
$time //返回当前仿真的时间(64位整数)

PS:
用 $display()显示当前变量的值。
用 $strobe()显示用非阻塞赋值的变量值。
用 $monitor()监控和输出参数列表中的表达式或变量值。

  • Stopping simulation

$stop //暂停仿真
$finish //退出仿真

  • Simulation stimulus and reference

$readmemh //read ASIC data from a disk file(16进制)
$readmemb //read ASIC data from a disk file(2进制)

基于CLI的调试

编译并唤醒CLI debugger

方法一:

vcs source.v +cli+3 -R -s
//-s 唤醒CLI并在0时刻终止仿真

方法二:

vcs source.v +cli+3
simv source.v -s

//+cli+1 可读取nets和寄存器并写入寄存器(或写作+cli 或 -I)
//+cli+2 enable callback(e.g. break@var)
//+cli+3 Enable force and release of nets not including registers
//+cli+4 Enable force and release of nets including registers

-line //Enable source code single stepping capability(编译时间选择)

//+cli+2 增加10%的运行时间,+cli+3 增加50%
//-line 增加的运行时间远大于100%
//为了加快仿真速度,请本地化CLI scope
vcs +cli+modA=2 +cli+modB=3 source.v

基于VirSim的交互模式的调试

流程概述:

  1. 使用VirSim交互模式唤醒VirSim GUI以编译Verilog设计
  2. 通过交互界面设置仿真time step(步长),在Source窗口和波形窗口设置breakpoint来进行仿真
  3. 在波形窗口(Waveform)、寄存器窗口(Register)、逻辑窗口(Logic)和源代码窗口(Source)检查仿真结果,并定位代码中的错误

零碎补充

  • VCD文件:全称为Verilog Change Dump文件(dump:转储),

  • VCD+文件:类似于VCD文件,储存了转换时间,网络(nets)和寄存器的值,以及设计的层次结构(hierarchy)。相比于二进制文件,需要更少的磁盘空间,加载更快,支持记录源代码的执行顺序。内置VCD+系统任务,用于控制VCD+文件的内容和大小。VCD文件可以转换为VCD+文件

  • VCD+系统任务举例:$vcdpluson 、 $vcdplusoff 、 $vcdplustraceon 、 $vcdplustraceoff 、
    $vcdplusautoflushon 、 $vcdplusautoflushoff 、 $vcdplusflush 、 $vcdplusdeltacycleon 、 $vcdplusdeltacycle 、 $vcdplusglichon 、 $vcdplusglichoff 、 $vcdplusevevt

  • PLI:Programming Language Interface,C程序和Verilog仿真器之间的接口,支持用户自定义任务或函数

  • 规范编码
    避免在时序逻辑中使用repeat, wait, fork_jion, assign_deassign, force_release, disable, case
    避免在他task中使用延时,task声明时不要有延时(如 #10 task_sync(s);)
    避免在非阻塞赋值中使用延时(如 q <= #1 d;)

Synopsys VCS工具介绍相关推荐

  1. Cadence和Synopsys工具介绍

    参考博文:https://blog.csdn.net/qq_28284627/article/details/52062031 和 https://blog.csdn.net/palaciopku/a ...

  2. VCS 工具学习笔记(1)

    目录 引言 平台说明 关于VCS 能力 Verilog 仿真事件队列 准备 VCS工作介绍 工作步骤 支持 工作机理 编译命令格式 编译选项 示例 仿真命令格式 仿真选项 示例 库调用 -y 总结 实 ...

  3. VCS工具学习笔记(4)

    目录 引言 VCD文件及生成 实际操作 makefile 编译仿真 打开波形文件 其他 1.$vcdpluson() 参数更改 2. $vcdplusmemon() 3.__FILE__  , __L ...

  4. SYNOPSYS VCS Makefile文件编写与研究

    SYNOPSYS VCS Makefile文件编写与研究 这个Makefile是synopsys提供的模板,看上去非常好用,你只要按部就班提供实际项目的参数就可以了.我们来看这个文件的头部说明: ma ...

  5. irun和vcs工具,检测TB环境零延时无限循环以及zero-delay组合逻辑

    文章目录 前言 一.irun工具 三.vcs工具 总结 前言 在写TB代码时,如果循环退出条件没注意,可能使循环一直不能退出,而且该循环又是没有延时的,因此就出现了zero-delay(零延时)的无限 ...

  6. VCS工具学习笔记(3)

    目录 引言 技术文档 DVE介绍 实践 使用技巧总结 调用光标 局部区域放大 全局查看 进制切换 信号分组 数据查找 信号比较 单步调试 设置总线 PLI/DPI 引言 按照视频的讲解进度,继续学习 ...

  7. 软件包管理 之 软件在线升级更新yum 图形工具介绍

    作者:北南南北 来自:LinuxSir.Org 提要:yum 是Fedora/Redhat 软件包管理工具,包括文本命令行模式和图形模式:图形模式的yum也是基于文本模式的:目前yum图形前端程序主要 ...

  8. IDEA IntelliJ 开发工具介绍

    IntelliJ IDEA 开发Java的IDE 官网:https://www.jetbrains.com/ 下面是该工具介绍,有兴趣的可以看下,基本一堆废话: 集成开发环境(IDE,Integrat ...

  9. postman 接口测试工具介绍

    postman 接口测试工具介绍 https://www.cnblogs.com/fly_dragon/p/9186745.html

最新文章

  1. 2021年大数据ZooKeeper(三):Zookeeper数据模型和节点类型
  2. 我的Java开发学习之旅------JAVA 笔记ClassLoader.getResourceAsStream() 与 Class.getResourceAsStream()的区别...
  3. redis 模糊删除实现
  4. 终版!思科网络设备基础命令大全(三)
  5. MySQL查看索引使用情况
  6. 不连续曲线 highcharts_无人车运动规划中常用的方法:多项式曲线
  7. Hacker News热文:请停止学习框架,学习领域驱动设计(DDD)(获500个点赞)
  8. thinkphp6 redis并发解决处理方案
  9. 打开wmware没反应_白酒打开后能存放多久?
  10. HDU 1255 覆盖的面积(线段树+扫描线)
  11. (转)区块链:为什么说finchain是下一代金融应用平台
  12. Ubuntu安装JDK教程
  13. 苹果清除感染 XCodeGhost 的应用
  14. SpringBoot集成EasyUI
  15. ps快捷键-csdn
  16. 桌面图标背景色解决方案
  17. net中winform教程 浏览器控件,还是微软的WebView2最好用
  18. 二叉树层次遍历(借助队列实现)
  19. 历时54年,完成了1574架飞机生产,“天空女王”波音747正式停产 | 美通社头条...
  20. uni-app+uview 购物车模块组件(笔记)

热门文章

  1. 关于服务器被入侵+植入病毒木马
  2. Maven 环境踩坑及完整配置
  3. 饥荒联机云服务器_WeGame饥荒联机版专用服务器多层世界搭建教程
  4. 数据隐藏技术揭秘笔记
  5. python 读取合并单元格的数据_Python使用xlrd实现读取合并单元格
  6. Unity* 原生 X86 支持使Square Enix的Hitman GO*卓尔不凡
  7. 未来两周目标计划---C++ and Disassembly(不积跬步无以至千里,不积小流无以成江海)...
  8. 如何在linux编写perl脚本,关于linux:如何在perl脚本中插入awk命令?
  9. 【Python Sympy】将表达式化为关于x的多项式,求出多项式系数
  10. crm自动编号(第二天再次001从开始)