Linux下VCS&Verdi入门级联合仿真教程

前言

如果没有安装VCS和Verdi,可以先移步到VCS & Veidi 下载与安装教程 一站式虚拟机套餐,感谢这位博主大大的分享,极大的减轻了我工具安装带来的烦恼。

VCS&Verdi介绍

博主在上一篇博文《ASIC设计流程及对应EDA工具简介》中介绍了ASIC设计流程中常用的EDA工具。大家使用过的Vivado工具基本上可以完成RTL编写、编译、仿真、综合、跑波形、生成比特流等工作。**VCS主要实现编译仿真、Verdi主要用于看波形。**但是为什么不直接使用Vivado呢?
对于学生来说,一个Vivado足够了,但是有一个问题就是慢。企业里更倾向于使用IC设计各个流程中更为专业的EDA工具,另外,Vivado主要是为了给自家的FPGA开发板设计的EDA工具,更倾向于用户的使用。相比之下, VCS和Verdi更适合公司进行开发,VCS工具具有仿真速度快、效率高的优点,可以节约开发时间,Verdi看波形更加方便,且方便debug,比Modelsim还好用,虽然上手较难,但是受用无穷。

另外,VCS+Verdi主要是用于前仿真,然后想后仿,那就得需要再用DC (Design Complier) 来逻辑综合。

VCS&Verdi使用演示

开发环境:Red Hat Enterprise Linux Server release 6.7

虚拟机:VMware Workstation Pro 17

编辑器:vim

VCS版本:VCS2014

Verdi版本:Verdi2015

1.VCS&Verdi安装

博主是直接使用的VCS & Veidi 下载与安装教程 一站式虚拟机套餐进行的安装,检测VCS和Verdi是否安装成功

在Terminal中

[IC@IC Desktop]$ vcs
image-20230311164001742
[IC@IC Desktop]$ verdi
image-20230311165828758

会打开Verdi的GUI界面。

2.新建项目

接下来主要借鉴博客Linux下VCS与Verdi联合仿真简易教程及例子示范_vcs verdi_one努力翻身的咸鱼的博客,侵删。

完成一个计数器的项目的仿真和调试

  • 新建counter文件夹

    mkdir counter && cd counter
    
  • 新建counter.v文件

    vim counter.v
    

    复制下面内容到counter.v

    module counter(
            input                   clk,
            input                   rst,
            output  reg     [5:0]   count
    );
    always @(posedge clk or negedge rst)
    begin
            if(!rst)
                    count <= 0;
            else
                    count <= count + 1;
    end
    endmodule
    
    

    复制进去,可能代码会很乱,可以尝试下用linux下的代码自动对齐快捷键gg+=+G

  • 新建tb_counter.v文件

    vim tb_counter.v
    

    复制下面内容到tb_counter.v

    module tb_counter();
    
    reg 		clk,rst;
    wire	[5:0]	counter;
    
    counter u1(clk,rst,counter);
    
    always #(5) clk = ~clk;
    
    initial begin
    	clk <= 0;
    	rst <= 0;
    	#20;
    	rst <= 1;
    	#50;
    	if(counter != 5)
    		$display("Failure 1: the counter should be 5 but it is %d",counter);
      else
      	$display("You gotta the right result!");
    	$finish;
    end
    
    `ifdef FSDB
    initial begin
    	$fsdbDumpfile("tb_counter.fsdb");
    	$fsdbDumpvars;
    end
    `endif
    endmodule
    
    

    这样在counter文件夹下就有两个文件counter.vtb_counter.v

    注意,要VCS与Verdi联合仿真,需要在testbench里面必须加入``ifdef FSDBendif`的代码,这样才能生成fsdb文件提供Verdi读取,不然不会输出波形)

  • 新建timescale.v

    vim timescale.v
    
    `timescale 1ns/10ps
    

    这里是设置module的时间单位和时间精度

3.仿真调试&波形查看
VCS仿真调试
  • counter文件夹下打开Terminal,输入vcs命令
vcs -R -full64 +v2k -fsdb +define+FSDB -sverilog counter.v tb_counter.v timescale.v -l run.log

-R表示自动运行仿真
-full64表示在 64 位模式下编译设计并创建 64 位可执行文件以在 64 位模式下进行仿真。
+v2k表示使用Verilog-2001标准
-fsdb表示支持对fsdb相应操作
+define+FSDB相当于在verilog头文件里加上`define FSDB
-sverilog表示支持system verilog
输入.v文件的顺序可以不同(顺序是随意的)
-l run.log表示将终端显示的信息在run.log中储存;

​ vcs查看各种指令option的方法

vcs -help

常用仿真选项:vcs常用仿真选项_vcs nowarn_lobbiy的博客-CSDN博客

如果报错如下:

Undefined env variables
  Environment variables NOVAS_HOME or DEBUSSY_HOME is not set.
  Please set one of these variables and continue.

解决办法:问题记录_飞机飞得高的博客-CSDN博客

记得解决完之后,重新打开counter文件夹,才会生效,因为source命令会有延迟性。

再次输入vcs命令后,会出现下面log,并且在文件夹下生成.fsdb文件,说明编译仿真成功。
image-20230311181709027

使用Verdi查看波形
  • 打开Verdi

    verdi
    
  • 导入工程代码

​ 按下图点击相应说明操作,它们的意思也很直白,就不解释了

在这里插入图片描述 在这里插入图片描述

​ 恭喜,至此**您已经完成了verdi看代码了,开心吧!**看波形再往下来。

  • 导入fsdb文件

    按图操作,依次点击,导入fsdb文件,以显示波形。

    在这里插入图片描述
在这里插入图片描述

但是,为啥还不出现波形啊!!啊啊啊!!!我知道你很急,但是你先别急!哈哈哈

  • 查看波形

    接着按图操作Verdi吧。

image-20230311184209841

​ 至此,我们简单的VCS与Verdi联合仿真例子就大功告成咯,是不是很开心~

​ 但是,这也太麻烦了,来回点来点去的,太难用了吧。所以借鉴其他博主的博客,有了下面的 **“VCS&Verdi提高效率”**一节。

VCS&Verdi提高效率

1.自动编译和打开Verdi

提高效率的途径当然是可以自动化的脚本了。再windows下尝试用filelist配合bat脚本实现自动化的波形查看,当然在linux下更方便了。

思路

​ 有一个检索文件可以把工程里面的文件的路径都记录下来。——>filelist文件

​ 有一个文件可以通过检索文件,自动执行vcs命令,并打开波形。——>shell bash脚本

​ 说干就干!

创建file.f文件

​ 内容如下:输入工程文件的路径,当然如果你的文件在其他文件夹下,只要改成相对路径就可以

./tb_counter.v
./counter.v
./timescale.v

​ 这里.v的顺序不重要,只需要将包含的文件写进去便行;

​ 那么vcs文件就得变成这种。

vcs -R -full64 +v2k -fsdb +define+FSDB -sverilog -f file.f -l run.log

​ 此时,-f代表着你在使用.f文件了,之后如果想再添加.v文件,就在file.f中添加便可~

​ 到这一步,稍微简单了一点,但是我还是要输入vcs还要打开verdi啊,能不能更方便呢?当然可以!

创建bash脚本文件run_sim(不需要后缀)
vim run_sim
  • 输入以下内容

     ```bash
    

#!/bin/bash
vcs -R -full64 +v2k -fsdb +define+FSDB -sverilog -f file.f -l run.log
verdi
```

​ 然后在Terminal输入如下命令,将run_sim转为执行文件:

chmod -x run_sim
实现自动化编译和打开verdi

​ 每次只需要在Teminal敲下

source run_sim

​ 就可以自动打开verdi了,是不是节省了很多时间。其他工程只需要修改file.frun_sim文件就可以了。

2.Verdi的灵活使用

想必大家在使用Vivado或者Modelsim看波形时,也有过下面这些困扰吧:①为了增加某几个信号的波形,重新仿真一遍(贼耗时间);②为了追踪一个信号它在某几个时刻的变化原因,需要对着波形图琢磨几遍(贼耗时间)…

但是,Verdi可以解决这些问题,在Verdi看增加信号波形无需再次仿真,追踪信号只需要在代码窗口里点击相应信号便能看到它是由哪些信号决定的。

操作如下:

增加特定信号波形

ctrl+w

  • 在导入.v文件以及.fsdb文件后,如果我们要增加某信号波形,可以鼠标单击代码窗口的对应信号,然后再键盘输入ctrl+w,这样该信号的波形便直接导入波形窗口并显示了,不需要再次仿真,是不是超级方便!!!
在这里插入图片描述
观察特定clk下每个变量的变化
  • 为了让debug更加快捷,我们可以在代码窗口单击键盘的x键,以显示出每个wire和reg在特定clk时的值的变化,再也不需要盯着波形来回看了!

    在这里插入图片描述
生成特定的电路结构
  • verdi也能生成.v文件对应的电路结构图,具体如下图所示:

    在这里插入图片描述

verdi还有很多快捷键,比如ctrl+4将.v文件中所有信号波形全部导入波形窗口**(这个我试了不管用,大家可以自己试一下)**,在波形窗口按f自动适配波形大小,按z缩小波形,按Z放大波形,等等,许多便捷操作,以及用命令行或者脚本直接verdi读取fsdb文件并显示等,这些大家可以自行上网查询~

直接导入.v和波形文件到Verdi
  • 这里再举个命令行直接调用verdi并直接导入.v文件,.fsdb文件的操作。同时我们也能像先前生成runrand脚本文件那样,创建一个新脚本文件调用下面的命令,从而提高效率~

    verdi -ssf tb_counter.fsdb -2001 -sverilog tb_counter.v counter.v
    

完整的脚本文件可以变成:

#!/bin/bash
vcs -R -full64 +v2k -fsdb +define+FSDB -sverilog -f file.f -l run.log
verdi -ssf tb_counter.fsdb -2001 -sverilog tb_counter.v counter.v

这只是借鉴别人的博客总结的入门博客,希望对大家有帮助。

参考链接:

VCS & Veidi 下载与安装教程 一站式虚拟机套餐_vcs虚拟机_不吃葱的酸菜鱼的博客

VCS & Verdi使用入门演示-by_Sky_SiliconThink

Linux下VCS与Verdi联合仿真简易教程及例子示范_vcs verdi_one努力翻身的咸鱼的博客

数字IC设计流程及工具简要介绍_by_Jacky

感谢博主们的无私的教程分享,正是因为你们,我们的开发才能变得更为顺畅。

  • 14
    点赞
  • 100
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

搞IC的小冯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值