前言
如果没有安装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
[IC@IC Desktop]$ verdi
会打开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.v
和tb_counter.v
(注意,要VCS与Verdi联合仿真,需要在testbench里面必须加入``ifdef FSDB
到
endif`的代码,这样才能生成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文件,说明编译仿真成功。
使用Verdi查看波形
-
打开Verdi
verdi
-
导入工程代码
按下图点击相应说明操作,它们的意思也很直白,就不解释了
恭喜,至此**您已经完成了verdi看代码了,开心吧!**看波形再往下来。
-
导入fsdb文件
按图操作,依次点击,导入fsdb文件,以显示波形。
但是,为啥还不出现波形啊!!啊啊啊!!!我知道你很急,但是你先别急!哈哈哈
-
查看波形
接着按图操作Verdi吧。
至此,我们简单的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.f
和run_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文章来源:https://www.toymoban.com/news/detail-612140.html
感谢博主们的无私的教程分享,正是因为你们,我们的开发才能变得更为顺畅。文章来源地址https://www.toymoban.com/news/detail-612140.html
到了这里,关于Linux下VCS&Verdi入门级联合仿真教程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!