• 【VCS+Verdi联合仿真】~ 以计数器为例


    0. 前言

    首先,先声明一下,我写这篇博客的时候我就是一个纯小白,实不相瞒,刚刚学了一天,哈哈哈,没错,你没看错,就是一天!!!主要是因为前天因为刷题和找工作的需要,需要熟悉VCS和Verdi的联合仿真(据说是很好用,随大流呗!!!),所以才会有接下来的一些相关博客,我准备把它搞成一个专栏,以便于后边有朋友需要,做个参考,话不多说,直接开干。

    1. 概述

    相信大家多多少少接触过一款或者多款EDA的相关软件吧,你比如Vivado,Quartus,它们都已经包含了RTL,编译,仿真,综合,看波形,烧板子等功能。那为什么不用这个呢?难道是公司有问题???哈哈,你想多了,公司可比我们学校学的东西超前十年到二十年不止吧,所以说,多向公司学学没毛病的。反观VCS和Verdi就很专一了,VCS专注于编译及仿真,Verdi专注于看波形。再就是VCS编译仿真速度极快,效率极高,为大家节约时间,Verdi看波形也十分方便debug,它支持信号追溯,无缝增加信号波形等功能。

    2. 从“0”开始学习

    环境: CentOS7
    代码编写: Vim
    编译仿真: VCS
    波形查看: Verdi

    关于虚拟机的安装请移步我的另一篇博客,传送门

    关于VCS和Verdi相关EDA工具的安装可以评论区或者私聊我都可以获取的。

    =============================================================================================
    好了我们接着往下看===>

    这里默认VCS和Verdi环境都已配好,配置环境参考我的博客,.bashrc文件的配置

    2.1 进入虚拟机,选择“”打开终端

    在这里插入图片描述

    2.2 创建相关文件

    2.2.1 通过linux命令创建相应的文件,这里我以计数器为例,需要创建Counter文件夹,

    (注意的是,Linux传送门在这里,点击传送门

    $cd _Project/ 		# cd 文件夹名称
    
    #下边的是我文件夹_Project里边的文件
    # Counter
    
    • 1
    • 2
    • 3
    • 4

    2.2.2 在Counter文件夹中创建3个文件夹

    mkdir module tb verification   # 创建3个文件,名字为module、tb、 verification
    
    # 下边是结果
    drwxrwxr-x. 2 ICer ICer 23 629 17:43 module
    drwxrwxr-x. 2 ICer ICer 27 629 17:55 tb
    drwxrwxr-x. 2 ICer ICer 39 629 21:03 verification
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2.2.3 在module中创建rtl代码

    vim counter.v    # 通过vim编辑器创建counter.v文件
    
    # 对于相应的写代码过程可以参考vim的使用看看,等我有时间也写一篇关于vim使用的文章,根据大家的需要来吧,如果有需要评论区告诉我!!!
    
    • 1
    • 2
    • 3

    写完之后的代码:

      1 module counter(                                                                                                                                                       
      2     input clk,
      3     input rst,
      4     output reg [5:0] count
      5 );
      6  
      7     always @ (posedge clk or negedge rst) begin
      8         if(!rst) begin
      9             count <= 0;
     10         end
     11         else begin
     12             count <= count + 1;
     13         end
     14     end
     15 endmodule
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    2.2.4 在tb中创建测试代码

    vim tb.sv    # 通过vim创建tb.sv文件
    
    • 1

    写完之后的代码:

      1 module tb_counter();                                                                                                                                                  
      2  
      3 reg         clk,rst;
      4 wire    [5:0]   counter;
      5  
      6 counter u1(clk,rst,counter);
      7  
      8 always #(5) clk = ~clk;
      9  
     10 initial begin
     11     clk <= 0;
     12     rst <= 0;
     13     #20;
     14     rst <= 1;
     15     #50;
     16     if(counter != 5)
     17         $display("Failure 1: the counter should be 5 but it is %d",counter);
     18   else
     19     $display("You gotta the right result!");
     20     $finish;
     21 end
     22    
     23 //.v file
     24 //`ifdef FSDB
     25 //initial begin
     26 //  $fsdbDumpfile("tb_counter.fsdb");
     27 //  $fsdbDumpvars;
     28 //end
     29 //`endif
     30    
     31 //.sv file
     32 initial begin
     33         $fsdbDumpfile("tb.fsdb");       
     34         $fsdbDumpvars;
     35 end
     36 endmodule
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    2.2.5 在verification中file_list和脚本文件

    # 这个文件可以不加后缀,主要作用就是组织一下前边的rtl代码和测试文件的路径,便于脚本文件调用
    vim file_list     
    
    # 这个文件是个脚本文件,通过make指令调用(具体可以看看Makefile的使用,我这里有个文档资料,需要同样是私信或评论区留言即可)
    #它的作用是统筹调度一切文件的运行顺序,是个老大哥
    vim Makefile      
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    写完之后的代码:

    all: \
      3         vcs \
      4         verdi
      5  
      6 #-------------------------------------------------------------------------------------------------------
      7 # VCS
      8 vcs   :
      9     vcs  \
     10         -f file_list \
     11         -timescale=1ns/1ns \
     12         -full64  -R  +vc  +v2k  -sverilog  -debug_access+all  \
     13         |tee vcs.log  
     14 #-------------------------------------------------------------------------------------------------------
     # verdi
     34    
     35 verdi  :
     36     verdi -sv -f file_list -ssf tb.fsdb &
     37    
     38 #-------------------------------------------------------------------------------------------------------
     39 clean  :
     40      rm  -rf  *~  core  csrc  simv*  vc_hdrs.h  ucli.key  urg* *.log  novas.* *.fsdb* verdiLog  64* DVEfiles *.vpd
     41      rm -rf INCA_libs irun*
     42      rm -rf modelsim.ini transcript work
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    2.3 万事俱备,只欠运行

    2.3.1 运行vcs

    $make vcs	# 通过make指令调用Makefile运行vcs
    
    
    • 1
    • 2

    运行结果:
    在这里插入图片描述
    在这里插入图片描述
    图中标出来的是原有的,剩下的都是仿真生成的,恐怖不???哈哈哈,习惯就好了

    2.3.2 运行verdi

    make verdi    # 通过make指令调用Makefile运行verdi
    
    • 1

    运行结果:
    在这里插入图片描述
    在这里插入图片描述
    没有波形???
    这里还需要一步,就是添加你想要观察的信号,看下图即可。
    在这里插入图片描述
    这不就完事了吗?怎么样,你学废了吗?
    把学废了打在评论区!!!

    2.4 事后的好习惯

    看完波形之后,不是之前产生了很多文件啥的吗?你不得收拾收拾啊!吃完饭得收拾收拾,咋办?
    别忘了Makefile中最后不是有个clean指令吗?干就完了!!!

    make clean		# 清理产生的文件
    
    • 1

    结果:
    在这里插入图片描述
    就剩下我们仿真之前的文件喽!!!

    3. 总结

    通过这一天的学习,你还真别说,vcs和verdi联合仿真还是真的好用啊,到这里,我学的远远不够,只是掌握了一点点小小的皮毛,还得不断地学习,参考他人的优点,希望大家共同学习,共同进步,如有错误,欢迎大家批评指正!!!

    好了,完结撒花,多多三连,持续更新。

    =========================================================================
    未完待续…

  • 相关阅读:
    代码安全审计规范
    声卡喊话IP喇叭,IP网络吸顶天花喇叭
    ElasticSearch Client问题整理2
    类和对象-java
    Linux启动流程及systemd服务详解
    几种Python处理Excel数据的方法!
    EIVideo的安装笔记
    【百度AI_文字识别】示例身份证图片识别(代码官方文档完整,只需获得修改参数、下载类)
    一文看懂这些海外社媒平台属性,跨境外贸必看
    【Redis学习笔记】第五章 Linux环境安装Redis
  • 原文地址:https://blog.csdn.net/qq_40549426/article/details/125530500