jjzjj

Synopsys VCS工具介绍

奶味靓女 2023-04-08 原文

概述

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. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  2. Unity 热更新技术 | (三) Lua语言基本介绍及下载安装 - 2

    ?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------

  3. 基于C#实现简易绘图工具【100010177】 - 2

    C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.

  4. postman接口测试工具-基础使用教程 - 2

    1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,

  5. ruby-on-rails - 有没有一种工具可以在编码时自动保存对文件的增量更改? - 2

    我最喜欢的Google文档功能之一是它会在我工作时不断自动保存我的文档版本。这意味着即使我在进行关键更改之前忘记在某个点进行保存,也很有可能会自动创建一个保存点。至少,我可以将文档恢复到错误更改之前的状态,并从该点继续工作。对于在MacOS(或UNIX)上运行的Ruby编码器,是否有具有等效功能的工具?例如,一个工具会每隔几分钟自动将Gitcheckin我的本地存储库以获取我正在处理的文件。也许我有点偏执,但这点小保险可以让我在日常工作中安心。 最佳答案 虚拟机有些人可能讨厌我对此的回应,但我在编码时经常使用VIM,它具有自动保存功

  6. ruby - 使用 Ruby 开发工具包将文件上传到 Amazon S3 - 2

    我正在尝试上传文件。一个简单的hello.txt。我正在关注文档,但无法将其上传到我的存储桶。#STARTAWSCLIENTs3=Aws::S3::Resource.newbucket=s3.bucket(BUCKET_NAME)begins3.buckets[BUCKET_NAME].objects[KEY].write(:file=>FILE_NAME)puts"Uploadingfile#{FILE_NAME}tobucket#{BUCKET_NAME}."bucket.objects.eachdo|obj|puts"#{obj.key}=>#{obj.etag}"endresc

  7. ruby - 在 StockChart (highchart) 中以编程方式显示柱形图的工具提示 - 2

    我有一个Highstock图表(带有标记和阴影的线条),并且想以编程方式显示一个highstock工具提示,例如,当我选择某个表上的一行(包含图表数据)我想显示相应的highstock工具提示。这可能吗? 最佳答案 股票图表thissolution不起作用:在thisexample你必须更换这个:chart.tooltip.refresh(chart.series[0].data[i]);为此:chart.tooltip.refresh([chart.series[0].points[i]]);解决方案可用here.

  8. ABB-IRB-1200运动学分析MATLAB RVC工具分析+Simulink-Adams联合仿真 - 2

    一、机器人介绍        此处是基于MATLABRVC工具箱,对ABB-IRB-1200型号的微型机械臂进行正逆向运动学分析,并利Simulink工具实现对机械臂进行具有动力学参数的末端轨迹规划仿真,最后根据机械模型设计Simulink-Adams联合仿真。 图1.ABBIRB 1200尺寸参数示意图ABBIRB 1200提供的两种型号广泛适用于各作业,且两者间零部件通用,两种型号的工作范围分别为700 mm 和 900 mm,大有效负载分别为 7 kg 和5 kg。 IRB 1200 能够在狭小空间内能发挥其工作范围与性能优势,具有全新的设计、小型化的体积、高效的性能、易于集成、便捷的接

  9. H2数据库配置及相关使用方式一站式介绍(极为详细并整理官方文档) - 2

    目录H2数据库入门以及实际开发时的使用1.H2数据库的初识1.1H2数据库介绍1.2为什么要使用嵌入式数据库?1.3嵌入式数据库对比1.3.1性能对比1.4技术选型思考2.H2数据库实战2.1H2数据库下载搭建以及部署2.1.1H2数据库的下载2.1.2数据库启动2.1.2.1windows系统可以在bin目录下执行h2.bat2.1.2.2同理可以通过cmd直接使用命令进行启动:2.1.2.3启动后控制台页面:2.1.3spring整合H2数据库2.1.3.1引入依赖文件2.1.4数据库通过file模式实际保存数据的位置2.2H2数据库操作2.2.1Mysql兼容模式2.2.2Mysql模式

  10. Ruby & Syslog & 自定义工具 - 2

    我是syslog的新手。我们决定使用系统日志来跟踪Rails应用程序中的一些特殊事件。问题是我不想使用默认的/var/log/system.log文件,而是使用自定义文件,例如/var/log/myapp_events.log.我看到我必须像这样在/etc/syslog.conf中定义我自己的设施:myapp_events.*/var/log/myapp_events.log重新启动syslogd后,我发现我可以直接在bash控制台中使用它:syslog-s-kFacilitymyapp_eventsMessage"thisismymessage"该消息按预期出现在/var/log/m

随机推荐