VCS + verdi + Makefile

VCS + verdi + Makefile operate

1.需要的文件:
工程目录结构:奇偶校验

UN_gen
	-sim
		filelist.f
		Makefile
	-src
		UN_par_gen.v
	-tb
		tb_width_16_par_type_0.sv

UN_par_gen.v,以及测试激励的tesbench:tb_width_16_par_type_0.sv
注意:对于testbench文件,需要额外建立一个initial块,调用产生有关fsdb格式的波形文件:

initial begin
    $fsdbDumpfile("./tb_width_16_par_type_0.fsdb");// 调用fsdbunpfile函数,产生.fsdb波形文件
    $fsdbDumpvars();  // 调用fsdbDumpvars函数,声明需要保存的信号的波形,括号不加参数则默认全部保存
  end

UN_par_gen.v

module UN_par_gen(datain, parity);

  parameter integer width = 16;
  parameter integer par_type = 0;

  input  [width-1:0] datain;
  output             parity;

  generate
    // even check //
    if(par_type == 0) begin:p_t_0
      assign parity = ~(^datain);
    end
    // odd check //
    else begin:p_t_1
      assign parity = ^datain;
    end
  endgenerate

endmodule

tb_width_16_par_type_0.sv

`timescale 1ns/1ps
module tb;
  parameter PERIOD = 5;
  parameter integer width = 16;
  parameter integer par_type = 0;

  integer error_count = 0;

  // UN_par_gen inputs //
  reg [width-1:0] datain;

  // UN_par_gen outputs //
  wire parity;

  UN_par_gen#(
    .width(width),
    .par_type(par_type)
  )
  u_UN_par_gen(
    .datain(datain),
    .parity(parity)
  );

  initial begin
    datain = 0;
    #PERIOD;
    forever begin
      datain = datain + 1;
      #PERIOD;
    end
  end

  initial begin
    #((1<<width)*PERIOD + PERIOD);
    $stop;
  end

  initial begin
    $fsdbDumpfile("./tb_width_16_par_type_0.fsdb");// 调用fsdbunpfile函数,产生.fsdb波形文件
    $fsdbDumpvars();  // 调用fsdbDumpvars函数,声明需要保存的信号的波形,括号不加参数则默认全部保存
  end
  
endmodule

2.filelist文件
filelist.f里存放所有需要仿真的’.v’及’.sv’文件
在sim目录下创建filelist.f:

find ../src ../tb -name "*.v" -or -name "*.sv" > ../sim/filelist.f

3.Makefile文件


all  : vcs verdi

vcs   :
	vcs  \
              -f filelist.f  \
              -timescale=1ns/1ps \
              -debug_acc+dmptf -debug_region+cell+encrypt  -full64  -R  +vc  +v2k  -sverilog  -debug_all  \
              -P ${LD_LIBRARY_PATH}/novas.tab  ${LD_LIBRARY_PATH}/pli.a  \
              |  tee  vcs.log  

verdi  :
	verdi -f filelist.f -ssf tb.fsdb 

clean  :
	 rm  -rf  *~  core  csrc  simv*  vc_hdrs.h  ucli.key  urg* *.log  novas.* *.fsdb* verdiLog  64* DVEfiles *.vpd

说明:
VCS仿真分为两个步骤:编译(vcs_compile) + 仿真(vcs_simulate)。具体详见VCS常见编译参数说明。
verdi 表示启动 Verdi 工具的命令;
-ssf dump.fsdb 表示指定 Verdi 可识别的波形文件 dump.fsdb,该文件可由 -ucli 接口命令生成

make vcs
make verdi

在这里插入图片描述

4.UCLI/tcl
如果不想对testbench进行改动,也不想重新编译仿真顶层来修改fsdb信息,可以直接修改脚本完成对dump fsdb的控制,就可以UCLI (Unified Command Line Interface, 统一命令行接口) 命令行来dump fsdb。

dump_fsdb.tcl的脚本如下:

global env
fsdbDumpfile "$env(TEST_NAME).fsdb"
fsdbDumpvars 0  tb
run

TCL脚本引用环境变量;
设置波形文件名称,名称受 $env(TEST_NMAE)控制;注:这个TEST_NMAE 是从仿真的 Makefile文件中,通过 export TEST_NMAE得到。
fsdbDumpvars(0) 表示会 dump 所有层次的信息;注:0代表dump所有层次,非0代表dump的最高层次;
设置完dump 信息,启动仿真。此时仿真器受UCLI命令行控制;

补充知识

find [路径] [匹配条件] [动作]

参数说明 :

路径是要查找的目录路径,可以是一个目录或文件名,也可以是多个路径,多个路径之间用空格分隔,如果未指定路径,则默认为当前目录。

expression 是可选参数,用于指定查找的条件,可以是文件名、文件类型、文件大小等等。

匹配条件 中可使用的选项有二三十个之多,以下列出最常用的部份:

-name pattern:按文件名查找,支持使用通配符 * 和 ?。如果匹配多个文件名可以用 "-or -name"连接
-type type:按文件类型查找,可以是 f(普通文件)、d(目录)、l(符号链接)等。
-size [+-]size[cwbkMG]:按文件大小查找,支持使用 + 或 - 表示大于或小于指定大小,单位可以是 c(字节)、w(字数)、b(块数)、k(KB)、M(MB)或 G(GB)。
-mtime days:按修改时间查找,支持使用 + 或 - 表示在指定天数前或后,days 是一个整数表示天数。
-user username:按文件所有者查找。
-group groupname:按文件所属组查找。

动作: 可选的,用于对匹配到的文件执行操作,比如删除、复制等。

find 命令中用于时间的参数如下:

-amin n:查找在 n 分钟内被访问过的文件。
-atime n:查找在 n24 小时内被访问过的文件。
-cmin n:查找在 n 分钟内状态发生变化的文件(例如权限)。
-ctime n:查找在 n
24 小时内状态发生变化的文件(例如权限)。
-mmin n:查找在 n 分钟内被修改过的文件。
-mtime n:查找在 n*24 小时内被修改过的文件。
在这些参数中,n 可以是一个正数、负数或零。正数表示在指定的时间内修改或访问过的文件,负数表示在指定的时间之前修改或访问过的文件,零表示在当前时间点上修改或访问过的文件。

正数应该表示时间之前,负数表示时间之内。

例如:-mtime 0 表示查找今天修改过的文件,-mtime -7 表示查找一周以前修改过的文件。

关于时间 n 参数的说明:

+n:查找比 n 天前更早的文件或目录。

-n:查找在 n 天内更改过属性的文件或目录。

n:查找在 n 天前(指定那一天)更改过属性的文件或目录。

VCS常用编译参数说明

-full64 在 64-bit 模式下编译、仿真,用于 64 位操作系统
-notice 详细的显示编译信息
-debug_all 仿真时可以使用 UCLI 接口,可以设置 value、time 断点。可以输出 fsdb/vpd 波形,可以使用 Verdi 和 DVE 波形查看工具。可以被下列参数选项替代:-debug_acc+all
-j8 指定编译器可并行编译的进程数为 8
-timescale=1ns/1ps 指定仿真时间单位与精度,RTL 设计中没有指定 timescale 时,使用此设置
+plusarg_save 使能传参功能。simv 仿真时可将具体数值传递给设计中的相关变量
+libext+.v+.V+.sv+.svh 识别 .v、.sv 等多种格式的设计文件
-sverilog 支持 SystemVerilog 编译
+memcbk 使能多维数组变量 (Memory 类型) 的回调。配合 UCLI 接口,设置波形打印的信号范围时,指定 “+all” 选项,可以查看多维数组变量的波形
-P <path/novas.tab> <path/pli.a> 指定使用的 PLI 表文件与库文件 pli.a 。其中 .tab 文件可以理解为 PLI 接口说明,pli.a 可以理解为系统函数库。当然也可以指定用户自定义的 table 文件和自定义的函数库。
-cpp /usr/bin/g++-4.4 指定 VCS 可识别的 g++ 版本
-cc /usr/bin/gcc-4.4 指定 VCS 可识别的 gcc 版本
-f 指定包含所有设计文件列表的文件名,文件中可包括源代码文件的路径名称,和编译选项参数等。
-top test 设置顶层模块为 test。因为仿真包括 testbench,所以要设置最顶层的 testbench 为 top design。
-l vcs_com.log 输出 VCS 编译的 log 至文件 vcs_com.log 中

TCL + UCLI

1.$ fsdbDumpfile
语法:
$fsdbDumpfile(fsdb_name[,limit_size])
含义:
指定波形文件名,第二个参数可选择用来限制波形的大小(MB)。
例如:

$ fsdbDumpfile(“tb_top.fsdb”,10240);

其中文件名可能被$fsdbDumpvars覆盖。

2.$ fsdbDumpvars
语法:
$fsdbDumpvars([depth, instance][, “option”])
含义:
depth表示要加载波形的层次;0表示当前instance下的所有变量以及其它module实例的波形,1表示当前instance中的变量的波形,不包括当前instance中的其它module实例的波形,2表示包含当前instance以及其中的第一级子instance的波形;以此类推。
instance指定要加载波形的module名。
option加载波形的选项,如:
+IO_Only – 只加载IO port信号;
+Reg_Only – 只加载reg类型信号;
+mda – 加载memory和MDA信号;
+packedmda – 加载packed MDA;
+struct – 加载structs;
+parameter – 加载parameter;
+fsdbfile+filename – 指定fsdb文件名字。

  • 28
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值