Verdi中文教程(VCS+加法器案例)

//--------------------------------------------------------------------------------------
// 作者:蚂蚁会游泳
// 日期:2022.01.06
//--------------------------------------------------------------------------------------

前言:

本文适用于对verilog编程语言有一定了解,之前有使用过Linux系统、VCS验证工具的同学阅读。写这篇文章前我也是头一次接触verdi,想通过做笔记的方式记录一下自己的学习过程,以免日后遗忘,也希望有过verdi使用经验的同学能够指出本文的不足之处。

默认大家都已安装好了Verdi2015或其它Verdi版本,配置好了Verdi的环境变量,环境变量配置如下图:

在这里插入图片描述
其中,NOVAS_HOME为Verdi2015的安装目录;PATH是为了让系统(Linux)找到Verdi2015;

Verdi自己是不能编译也不能仿真的,需要用VCS来配合进行编译和仿真。VCS专注于编译和仿真,Verdi只是一个波形查看工具。与VCS类似的工具还有Modelsim,Modelsim集编译、仿真、波形调试于一体,用起来也很方便。仿真工具其实都大同小异,不同的公司购买的软件不同,所以没必要纠结仿真工具的好与坏,对于我们学生来讲,都需要了解一下,只需要熟悉基本操作就好。

1、准备

1.1 Makefile脚本

在Linux系统下,我们一般使用批处理文件Makefile来脚本化操作。先看一段脚本:

# Makefile For Verdi

all: compile simulate

compile:
	vcs \
	-debug_all \                     #在完全模式下进行调试,可替换为-debug_access+all
	-fsdb +define+FSDB \             #生成fsdb文件,并对所有.v源文件进行宏定义
	-l com.log \                     #生成com.log文件用于查看编译日志
	-f verif.f                       #文件列表,将verif.f所列文件全部编译

simulate:
	./simv -l sim.log                #生成sim.log文件用于查看仿真日志

dve:
	dve \
	-vpd *.vpd &                     #启动Dve查看vpd类型的波形文件

verdi:
	verdi \
	-f verif.f \                     #用Verdi加载verif.f所列全部源文件
	-nologo \
	-ssf *.fsdb &                    #启动Verdi查看fsdb类型的波形文件

clean:
	@rm -rf csrc DVEfiles simv simv.daidir ucli.key VCS*
	@rm -rf *.log *.vpd *.ddc *.svf *.SDF *Synth *Netlist*
	@rm -rf alib-52 work
	@rm -rf *.conf *.rc *.fsdb verdiLog

代码说明:

在文件夹(/sim)中新建两个文件,分别命名为:Makefile、verif.f。
用gvim打开Makefile文件,将上面的代码复制粘贴到里面后点击保存,并退出。
用gvim打开verif.f文件,将源文件添加好,点击保存,并退出。
如下图:
在这里插入图片描述

1.2 源文件

以超前进位加法器的仿真为例,在文件夹(/rtl)与(/tb)中分别新建好rtl设计代码源文件与testbench测试文件。
如下图:
在这里插入图片描述
rtl代码:

module add_ahead_N #(parameter SIZE=8)
(
    input  wire            cin,
	input  wire [SIZE-1:0] a,b,
	output wire [SIZE-1:0] sum,
	output wire            cout
);

wire [SIZE-1:0] G,P;
wire [SIZE:0] C;

assign C[0]=cin;
assign cout=C[SIZE];

generate
genvar i;
for(i=0;i<SIZE;i=i+1) begin:AHEAD
    assign G[i]=a[i]&b[i];
    assign P[i]=a[i]|b[i];
    assign C[i+1]=G[i]|(P[i]&C[i]);
    assign sum[i]=G[i]^P[i]^C[i];
end
endgenerate

endmodule

testbench代码:

`timescale 1ns/1ns
module add_ahead_N_t;

parameter SIZE=8;
reg  [SIZE-1:0] a,b;
reg             cin;
wire [SIZE-1:0] sum;
wire            cout;

//add_ahead_N #(SIZE) AHN (cin,a,b,sum,cout);
add_ahead_N   #(SIZE) AHN (cin,a,b,sum,cout);

initial begin
a=0;
b=0;
cin=0;
end

initial begin
#23
cin=0;
a=24;
b=7;

#32
cin=1;
a=42;
b=12;

#100
$finish;
end

initial begin
    $vcdpluson();
end

`ifdef FSDB
initial begin
    $fsdbDumpfile("add_ahead_N_t.fsdb");
    $fsdbDumpvars;
end
`endif

endmodule

1.3 fsdb文件

fsdb文件是一种波形文件,只能用Verdi软件打开。要想得到fsdb文件,除了要将-fsdb命令添加到前文提到的Makefile文件中外,还要在testbench文件中添加如下代码:

`ifdef FSDB
initial begin
	$fsdbDumpfile("add_ahead_N_t.fsdb");    //add_ahead_N_t为测试文件名称,可替换为其它名称
	$fsdbDumpvars;
end
`endif

波形文件有很多种,总结如下:

  • wlf #WLF文件是Modelsim支持的波形文件,可在modelsim和questasim中打开查看
  • vcd #VCD文件是IEEE1364标准(Verilog HDL语言标准)中定义的一种ASCII文件
  • fsdb #FSDB文件是Verdi 支持的波形文件,通过verilog的PLI接口,$fsdbDumpfile,$fsdbDumpvars等函 数来实现
  • shm #NC verilog 和Simvision支持的波形文件,实际上 .shm是一个目录,其中包含了.dsn和.trn两个文件
  • vpd #VCS DVE支持的波形文件,可以用$vcdpluson产生

2、软件使用教程

2.1 启动Verdi

Verdi可以在Terminal中通过命令行输入verdi &直接启动,然后在图形界面下添加所需要的源文件、fsdb文件。下面通过脚本的方式启动Verdi。

在文件夹(/sim)中,打开Terminal终端,输入如下命令:

make

调用VCS进行编译和仿真,如下图:
在这里插入图片描述
编译仿真结束后,查看一下过程文件,如下图:
在这里插入图片描述
可以看到“add_ahead_N_t.fsdb”这个fsdb文件,接下来我们用Verdi打开它,输入如下命令:

make verdi

用Verdi加载源文件和波形文件,如下图:
在这里插入图片描述
这时会弹出Verdi的图形化窗口,如下图:
在这里插入图片描述
具体步骤可参考此文:VCS与Verdi联合仿真简易教程及例子示范

2.2 Verdi快捷方式

先来简单认识一下Verdi的窗口:
在这里插入图片描述
快捷键要在对应的窗口中使用,使用之前一定要用鼠标左键点一下窗口空白处
源代码窗口:

  • x #显示信号的变化
  • ctrl+w #添加信号到波形

波形窗口:

  • f #将波形图100%显示
  • z #缩小波形
  • shift+z #放大波形
  • h #开关显示信号结构
  • Del #删除信号
  • g #加载信号

鼠标操作:

  • 拖拽信号 #左键点击选择一个信号,然后按住鼠标中键(滚轮)不松手,向其它窗口拖拽

3、后续

如果想更加深入了解VCS和Verdi,建议去读一下synopsys的官方指导文档。
文本中超前进位加法器的工程文档下载:https://sourl.cn/JSAZUw
更详细的教程,请参考:#Verdi

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值