【个人笔记】VCS工具与命令

Title:VCS工具学习

一 介绍

  • 是什么?

    VCS (Verilog Compiler Simulator) 是synopsys的verilog 仿真软件,竞品有Mentor公司的Modelsim、Cadence公司的NC-Verilog、Verilog—XL.

    VCS能够 分析、编译 HDL的design code,同时内置了 仿真和调试 功能,以及 支持SV、验证规划、覆盖率分析和收敛的验证功能(集成了这些工具:SystemC、Verdi、UCLI Unified Command-line Interface、Built-In Coverage Metrics等);可以理解为是芯片领域的 IC前端的前半部分阶段的IDE(因为后面还要另用DC跑综合,也是前端)。

  • 在chip flow中的位置

    chip flow是前端、后端;前端分为前仿、综合(Synopsys用于跑综合的软件是DC, design compiler)、后仿,区分是有没有综合过;后端有DFT、layout、CTS、placement、route等。

  • vcs和verdi的区别

    vcs是仿真代码来生成波形的,verdi是看波形的.

  • vcs和dve的区别

    dve是VCS的GUI. (但很多地方如zx和synopsys培训机房都不装…不懂…)

    打开DVE的command:./simv -gui

二 用法学习

  • VLSI课程使用的cmd case

    编译:

    vcs -full64 +2k -debug_access+all -timescale=1ns/1ns top.v

    仿真:

    ./simv./simv -gui

  • 粗暴图示

    compile

    在这里插入图片描述

    elaborate

    在这里插入图片描述

    simulation

    在这里插入图片描述

1 简介:VCS的两种simulate flow

VCS 要进行simulate,有 two-step flow 和 three-step flow 两种方式。

  • two-step flow

    内容先compile,再simulate.

    特点:仅支持 verilog HDL 和 SV. (对我已经enough了)

    理解

    1. compile是构建design的实例层次,得到一个可执行的二进制文件simv,用于后续仿真;
    2. simulate是进行具体的仿真。
  • three-step flow

    内容先analysis,然后elaboration,再simulate.

    特点:用于VHDL和verilog两个混合design的仿真。

    理解

    1. analysis:根据不同语言进行细化解析、检查语法错误;

      analysis是根据code是VHDL、Verilog、SV等进行解析、语法检查,转为中间文件库——VHDL design,用vhldan编译、转为vhdlan文件;Verilog design用vlogan编译,转为vlogan文件;

      elaboration是根据中间文件,从顶层module开始link,得到可执行文件simv;

    2. elaboration:link各个模块,产生可执行文件simv

      建议用-top 指定top module,否则默认从-work指定的库内最顶层的module开始;若有多个top-level module,就全执行一遍。

    3. simulate依然是仿真。

2 Option参数

根本写不完,于是用到哪些,写哪些。( ̄▽ ̄)"

2.1 Option:two-step flow

compile阶段
  • 基本用法

    vcs [各种option] .v文件

  • 吐槽

    vcs -h 东西不多;

    verdi -h 东西贼多贼全,匪夷所思!

  • 版本查看option

    常见option(我用到了就是常用( ̄▽ ̄)" …):

    1. -h 就是help——查看用vcs compile的option;
  1. -ID 查看VCS版本、host ID(用来查license)等信息;
  • 文件编译option

    纯粹编译RTL文件的vcs语法是:vcs top1.v top2.v

    注意文件顺序:头文件(被调用的)得在前面

    新增各种可选的option如下:

    1. -f file (或-file)指定 待compile的file list

      **作用:**若 .v 文件太多,可以写到一个file里,用 -f 指定.

    2. -v common_file.v 指定一个verilog library文件

      **作用:**起到 “补充” 的作用;only 1个module/UDP文件.

      若RTL结构明确、调用简单,就不需要它了;

      需要-v的场合,例如是一些common.v文件被共同调用、或是一些补充的function文件(不在主RTL文件内),那就用-v导进行编译.

      初衷:方便模块的“标准化”。而 用户自定义的组合逻辑模块在VCS manual被称为 UDP(user-defined primitive).

      注意:加了-v的file和其他主RTL文件在command序列内的顺序可以乱了哈,没事儿.

    3. -y 目录path 指定一个verilog library的目录

      **作用:**起到 “补充” 的作用,目录下可以一坨module/UDP文件.

      相当于-v的增强版;最重要的是 可以和+libext+???结合使用!

      注意:目录名后面不用加/

    4. +libext+.???+ 在去library目录里查找module库文件时,追加.???后缀的文件也作为库文件

      **作用:**和-y 目录path结合使用,可以使查找库文件的过程更自定义。

      注意:可以追加多个格式,用+隔开就行,如:+libext+.???+.XML+ ;末尾的+加不加无所谓.

    5. +incdir+目录path 专门指定宏定义等各色头文件的目录

      目录后不用接/

      作用:默认的include "xxxx.sv"语句,VCS并不会默认去本地工程目录下找,需要自己指定,用这个加进去…

      宏定义的文件:装的是include、package、interface、struct的结构体、parameter参数等内容;

      注意:可以指定多个文件,用+隔开就行,末尾的+随意.

    6. +define+宏名XXX=值XXX+ 定义code中宏变量

      **作用:**相当于在代码中添加``define 宏名 值,目的是用于ifdef-else-endif`宏编译块的控制方便。

      注意:=值XXX可以爱加不加;可以添加多个宏,用+隔开就行。

  • 编译模式的option

    1. -full6464位mode下进行 compile 与 simulation;

    2. -o filename 自定义可执行文件名

      **作用:**不使用,则可执行文件为默认名 simv;

    3. timescale=1ns/1ns 统一定义time scale (time unit / time precision);

      vivado是每个.v文件中,在首行写这个;vcs可以在cmd option中统一进行设置。

    4. +v2k (或-2001)使VCS支持2001年的Verilog标准;

      **作用:**verilog有三个IEEE标准:1364-1995、1364-2001、1364-2005;后面就是SV的标准了。

      一般用这个。

    5. -v95 使VCS支持1995年的Verilog标准;

    6. -sv (或-sverilog支持SV

      支持SV IEEE的2005版.

      SV的IEE标准有:2005、2009、2012、2017.

  • 功能性option

    1. -l filename 指定log文件;

    2. -q 静音模式

      **作用:**不输出compile过程中的弹出信息,如:C编译的信息、RTL文件一览、top module、timescale等…

    3. -R VCS link完毕后,直接自动执行仿真程序(可执行文件)

      **作用:**就不需要手动执行后续的 simv [option] 了,可以一气呵成.

    4. -ntb_opts uvm1.2 load如UVM库进行compile;

      还可以load ovm、rvm等呢.

    5. -kdb VCS在compile时生成kdb库文件

      作用:产生sim.daidir/文件夹),里面存储了code信息,使后续verdi查看波形时可快速打开而不需要重新编译code;

      • kdb (Knowledge Database),是一个Elaboration Database(abbr. elabDB,VCS的three-step flow中会更细的提它);

      • 生成kdb

        是用 vcs -kdb -lca;

      • 使用kdb

        三种方式都可:

        1. verdi -ssf novas.fsdb

          让verdi打开指定波形,它会自动加载kdb;

          但是code改了以后,总是会弹窗说kdb被修改了,这还要你说嘛?就很烦…

        2. verdi -dbdir simv.daidir -ssf novas.fsdb

          多了个:手动指定了 kdb文件,verdi打开波形就不会弹窗了,清净一点~

    6. -fsdb 仿真时产生fsdb格式的波形文件

      **注意:**默认的波形文件名是:novas.fsdb

      在compile中加此option是 不够的(你会发现波形文件在compile后没生成),要想生成波形文件,一共需要三步:

      1. 在RTL的top中写个 intial block,内写:$fsdbDumpvars;

        指定生成波形的signal.

      2. 在vcs的comiple option中写 -debug_access+all

        不然RTL中不允许写$fsdbDumpvars;,会报错;

      3. 在vcs的comiple option中写 -fsdb

        不然不会生成波形;

    7. -lca 使用些用户限制功能

      **作用:**启用VCS的一些测试不足还没有发布的功能,具体功能因release版本不同而异;

      LCA (limited customer availability),用户受限功能.

simulate阶段

只是执行VCS compile阶段输出的可执行文件而已!

  • 基本用法

    在compile、link结束后,VCS会产生二进制可执行文件 simv(默认名),运行后即可进行功能仿真。

    ./simv [各种option]

  • 各种option

    常见option:

    1. -l file 指定log文件;

    2. -debug_accecss????debug mode进行仿真

      作用:这样才能看波形,但是仿真速度性能会降低;若不使用此option,则为batch mode,性能更快

      **产生文件:**此mode下,VCS会产生debug所需的文件(文件夹csrc/,包含各module的中间文件);

      **特点:**debug mode内还分为GUI模式和命令行(UCLI)模式,根据需要的自己加后面俩开关。

      • -gui debug mode之 开gui界面(默认是DVE);

        **作用:**但得满足,vcs compile时,加上 -debug_all.

        注意:如果有设置环境变量VERDI_HOME,就会打开verdi进行仿真.

        **前提:**是debug mode

      • -ucli debug mode之 命令行界面

      **注意:**debug_access后面也有各种option,来只开启部分debug功能,可以自选。参数如下:

      • -debug_access+all 表启用所有信号变化(signal access)debug capability;

      • -debug_all VCS的debug功能全开!

        -debug_access+all 还猛。

        但如果更关注信号变化,就用-debug_access+all 更好。

    3. -dardr 指定 simv.daidir

      simv.daidir是simv执行的比较稳健

2.2 Option:three-step flow

目前不用,先略~

  1. analysis阶段
  2. elaboration阶段
  3. simulate阶段

3 VCS的不同仿真模式

在VCS三步法中,VCS在elaboration后会产生个二进制可执行文件simv;而elaboration传入的一个配置参数,可决定simv仿真的工作模式:interactive mode、batch mode.

3.1 interactive mode (debug mode)

  • 特点

    可以用GUI界面(DVE或Verdi)来进行debug,也可以用命令行界面(UCLI方式)来debug.

  • 开启方式

    elaboration时,加入option:-debug_acess+all-debug_access+r

  • 用Verdi

    见【 VCS manual P125】

3.2 batch mode

  • 特点

    又称为优化模式。用这个专门跑回归的,性能最快,调试能力最拉。

  • 开启方式

    别用-debug_access

3.3 UCLI (也是debug mode)

  • 概述

    (UCLI, Unified Command-line Interface)

    其实也是属于 interactive mode,但是命令行模式。

  • 开启方式

    simv -ucli

❌ 4 波形dump细节

  • 没细看

    见:

    【VCS manual P354 Verdi UCLI】

    • UCLI似乎更兼容DVE啊,我看【dve ug的手册上,写满了和ucli的联合用法】

    【VCS manual P585 VPD, VCD】

三 个人使用经验

compile阶段

include、package的使用

  • VCS内编译文件 和 verilog内使用include的联系

    可以 直接在VCS的compile option中把相关的 .v 文件都加进去,那么 就不需要 include 了

    只是用VCS去compile top的DUT文件,则VCS发现不认识的module后会自动去include的头文件中找 并compile头文件。

    但不管是哪种,VCS内compile的DUT文件顺序 或 include头文件顺序都很重要! ——得先compile子模块、得先include子模块。

    我个人习惯的compile顺序是:DUT放VCS里、UVM放package里,然后VCS里 compile顺序是 DUT -> Interface -> UVM package -> UVM top.

  • import package和include的区别

    include文件:在compile时相当于 文本copy;

    import package:并不会copy文本,而是在此处 引入了package内文件的域,且 对子package无效故子package需要使用某package时,需要重新手动import!

    例如:需要在每个子package中都添加UVM的 uvm_pkg::*;

  • include中进行相对寻址、编译寻址的设置

    VCS发现不认识的module后,会去“编译环境”下根据include内的相对路径进行找.v文件。

    可用:+incdir+路径 来添加“编译环境”,可加多个,用 + 号分开;include内使用相对路径即可。

    • 也可以在makefile中,把各uvm文件夹都用+incdir+路径 加上,include时只用当前路径,但过于啰嗦;不如只在+incdir+路径 加外层的paht,然后include内用相对路径。
  • +libext+.sv -y path 好像是导入库文件,但我用起来毛用没有,离谱。

  • package、interface与VCS的编译关系

    这俩建议 分别 在VCS中独立compile. (synopsys lab中也是这么写的…)

    package中

    1. import package,是改变“作用域”,故要考虑“域”是否覆盖到位——因为import入的package对子package无效,需要在子package中重新import;
    2. package中使用include,要考虑的是include的顺序,应自底向上;
    3. package内只能包class(.sv),不能包module(.v)文件.

    interface中:interface后缀是.sv,但不算OOP语法,不能在类内使用,也无法被包在package中!因为引用的是DUT的signal,故得在DUT后compile;但又在UVM前使用,故得在UVM前compile…就很烦…

  • 总结

    makefile中需要写的VCS compile的内容有:

    1. DUT
    2. Interface
    3. package
    4. UVM

多么痛的领悟

  • -ntb_opts uvm-1.2 后马上接DUT、UVM,它们是一起的!别夹杂别的东西!

四 FSDB 波形的dump

  • 使用$dump…进行dump的过程我先略

用UCLI与DVE进行dump

  • .tcl的直接写法

    要求:DVE、VCS、Verdi的版本一致才行。

    dump -type fsdb
    dump -add $(project_name) -aggregates -scope "."
    run# 或是makefile里写
    # @echo "dump -type fsdb" > $@
    # @echo "dump -add $(project_name) -aggregates -scope \".\"" > $@
    # @echo "run" > $@
    
  • .tcl的格式

    dump -add <> -fid <> -depth <levels> [-aggregates] [-filter[=<>]] [-ports|-in|-out|-inout] [-power] [-fsdb_opt <>] ...

    • -fid <> 是设置file的ID——当dump的file被打开时的返回值.
    • -depth <levels> 是设置dump的scope level(仅限VPD波形格式时能用)
    • -aggregate 开启后,将会dump复杂的数据类型
    • -filter[=<>] 开启后,只会 dump后面罗列的port信号.
    • -fsdb_opt <> 开启后,后面这些option将专门用fsdbDumpvars来进行dump.
    • 其他一些option开启后,也会专门将MOS等信号用fsdbDumpvars来进行dump.

五 波形的处理

VPD波形

  • 波形文件split

    【Manual的626】 vcsplit

    • 目标文件

      VCD或VPD文件

    • 语法

      vcsplit [-o outputfile] [-scope selected_scope_or_signal] [-include include_file] [-min min_time] [-max max_time] [-level n] [-ignore ignore_file] input_file [-v] [-h]

      • input_file 输入文件名

      • -o <> 输出文件名

      • -scope <> 要单独抠出的信号范围

      • -include <> 一个文件,内装了一系列信号名或scope范围,需要抠出来的信号;一个信号占一行.

        可以和-scope一起用,取信号的“并集”.

      • -min <> -max <> 分别指要scan的开始/结束的时间

      • -ignore <> 一个文件,内装忽略、不要抠出来的信号

      • -level <数字> 要scan的hierarchy的最大层数——若没定义scan的scope、也没定义include文件,则从top开始数;定义了,就从定义的信号里的highest里开始数.

    san

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/418076.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于yolov8的西红柿检测系统python源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv8的西红柿检测系统是一种利用深度学习技术的创新应用&#xff0c;旨在通过自动化和智能化手段提高西红柿成熟度检测的准确性和效率。该系统采用YOLOv8算法&#xff0c;该算法是深度学习领域中的先进目标检测模型&#xff0c;具备实时检测和多目标识别的…

HCIA--实验五:静态路由综合实验

静态路由综合实验 一、实验内容&#xff1a; 1.需求/目的&#xff1a; 在ensp模拟器中使用四个路由器&#xff0c;并且在路由器上创建loopback接口&#xff0c;相当于连接了一台主机&#xff0c;通过配置静态路由的方式实现全网通。 二、实验过程 1.道具&#xff1a; 4个…

ubuntu16.04下qt5.7.1添加对openssl的支持

文章目录 前言一、编译安装openssl二、编译qt5.7.1三、配置qtcreator开发环境四、demo 前言 最近工作中要求客户端和服务端通过ssl加密通信,其中客户端是qt编程,服务端是linux编程.我的开发环境是ubuntu16.04;运行环境是debian9.13,是基于gnu的linux操作系统,64位arm架构. 一…

Android 15 正式发布到 AOSP ,来了解下新特性和适配需求

其实在年初的时候就整理过《2024 &#xff0c;Android 15 预览版来了》 和《提前窥探 Android 15 的新功能与适配》的相关内容&#xff0c;而随着时间进度推进&#xff0c;近日谷歌也正式发布了 Android 15 的正式版&#xff0c;虽然没什么「大亮点」&#xff0c;但是作为开发者…

STM32

&#xff08;以下操作环境为Keil5和proteus8.9&#xff09; 八种输入输出模式及他们的工作模式 分析如下 总线&#xff1a;总线提供了数据在不同组件&#xff08;如处理器、内存、输入输出设备等&#xff09;之间传输的路径&#xff0c;使数据能够快速、准确地在系统内流动。 …

【卡码网C++基础课 18.开房门】

目录 题目描述与分析一、map的基本介绍二、map的使用三、代码编写四、范围for循环 题目描述与分析 题目描述&#xff1a; 假设你手里有一串钥匙&#xff0c;这串钥匙上每把钥匙都有一个编号&#xff0c;对应着一个房门的编号。现给你一个房门编号&#xff0c;你需要判断是否能…

mesh lab导入顶点

文章目录 ubuntu上暗转meshlab导入纯三维点 ubuntu上暗转meshlab 方式一&#xff1a; sudo apt-get install meshlab方式二&#xff1a; unbuntu 上自带的软件商店的ubuntu software里面搜索mesh lab安装即可 导入纯三维点 顶点坐标&#xff1a; -0.409576 0 -0.286788 169…

OpenCV结构分析与形状描述符(7)计算轮廓的面积的函数contourArea()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 计算轮廓的面积。 该函数计算轮廓的面积。与 moments 类似&#xff0c;面积是使用格林公式计算的。因此&#xff0c;返回的面积与你使用 drawCo…

C语言程序设计(算法的概念及其表示)

一、算法的概念 一个程序应包括两个方面的内容: 对数据的描述:数据结构 对操作的描述:算法 著名计算机科学家沃思提出一个公式: 数据结构 +算法 =程序 完整的程序设计应该是: 数据结构+算法+程序设计方法+语言工具 广义地说,为解决一个问题而采取的方法和步骤…

Java中Json、String、jsonObject、jsonArray格式之间的互相转换 (Fastjson、Gson、String字符串分隔)

1.org中jackson转换json,springboot中内置jackson ObjectMapper onew ObjectMapper();List<>listnew ArrayList();String jonso.writeAsValueString(list); 一、Fastion 使用阿里的fastjson <dependency><groupId>com.alibaba</groupId><artifactId…

网络协议-SSH

SSH&#xff08;Secure Shell&#xff09;协议是一种广泛使用的网络协议&#xff0c;用于安全地进行远程登录和数据传输。SSH协议通过加密技术保证了数据的安全性&#xff0c;防止数据在传输过程中被窃听、篡改或伪造。SSH协议的通信认证过程主要包括以下几个步骤&#xff1a; …

Android Camera系列(一):SurfaceView+Camera

心行慈善&#xff0c;何需努力看经—《西游记》 Android Camera系列&#xff08;一&#xff09;&#xff1a;SurfaceViewCamera Android Camera系列&#xff08;二&#xff09;&#xff1a;TextureViewCamera Android Camera系列&#xff08;三&#xff09;&#xff1a;GLSur…

利用 Redis 实现延迟队列(点赞场景)

&#x1f308;点赞场景在前段时间有很多人都在争论&#xff0c;我也看了一些视频和文档&#xff0c;最后觉得b站技术的这篇写得很好 【点个赞吧】 - B站千亿级点赞系统服务架构设计 - 哔哩哔哩 &#x1f308;所以我也尝试用 Redis 的延迟队列来写一个点赞处理的 demo&#xff0…

『功能项目』Unity本地数据库读取进入游戏【29】

本章项目成果展示 打开上一篇28Unity连接读取本地数据库的项目&#xff0c; 本章要做的事情是通过读取本地数据库登录进入游戏场景 首先创建一个脚本文件夹&#xff1a; 新建脚本&#xff1a;MySqlAccess.cs 编写脚本&#xff1a;MySqlAccess.cs using UnityEngine; using MyS…

Java | Leetcode Java题解之第390题消除游戏

题目&#xff1a; 题解&#xff1a; class Solution {public int lastRemaining(int n) {int a1 1;int k 0, cnt n, step 1;while (cnt > 1) {if (k % 2 0) { // 正向a1 a1 step;} else { // 反向a1 (cnt % 2 0) ? a1 : a1 step;}k;cnt cnt >> 1;step s…

【二等奖成品论文】2024年数学建模国赛B题25页成品论文+完整matlab代码、python代码等(后续会更新)

您的点赞收藏是我继续更新的最大动力&#xff01; 一定要点击如下的卡片&#xff0c;那是获取资料的入口&#xff01; 【全网最全】2024年数学建模国赛B题31页完整建模过程25页成品论文matlab/python代码等&#xff08;后续会更新「首先来看看目前已有的资料&#xff0c;还会…

python画图|并列直方图绘制

前述学习过程中&#xff0c;已经知晓普通直方图绘制和堆叠直方图绘制&#xff0c;参考链接如下&#xff1a; 西猫雷婶-CSDN博客 有时候&#xff0c;我们还会遇到并列直方图绘制的需求&#xff0c;今天就探索一下。 【1】官网教程 按照惯例&#xff0c;我们先来到官网&#…

MySQL数据库的介绍

目录 1.什么是MySQL数据库 2.MySQL数据库的设计 MySQL的进一步认识 MySQL的客户端 —— mysql MySQL的服务端 —— mysqld 3.MySQL数据库的架构 MySQL架构图 连接层 服务层 存储引擎层 文件系统层 4.MySQL的存储引擎 认识存储引擎 MySQL中的存储引擎 存储引擎之…

JWT生成、解析token

目录 1. 导入JWT相关依赖2. JWT生成token3. JWT解析token4. 测试结果5. JWT加密、解密工具类 1. 导入JWT相关依赖 <!-- jwt认证模块--><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-api</artifactId><versio…

Docker中部署nacos 开启鉴权springboot连接配置

nacos开启鉴权后发现各种连不上。 按道理说所有的东西都是采用同一个docker网络连接的&#xff0c;连接的时候可以采用容器名连接。 下面是刚开始springboot中的链接配置。增加了用户名和密码 这里nacos我们用到了注册中心和配置中心。启动项目的时候配置中心没有问题&#x…