环境:linux
工具:vcs,verdi
最近学习如何在linux环境下使用vcs编译仿真,使用verdi查看波形。VCS 是 Synopsys 开发的一款高性能的 Verilog 和 SystemVerilog 编译仿真工具。它广泛用于数字电路设计和验证,特别是在 ASIC 和 FPGA 设计中。Verdi 是 Synopsys 提供的一款高级调试和可视化工具,主要用于硬件设计的调试和分析。它通常与 VCS 一起使用,以便在仿真过程中提供更好的可视化和调试体验。
vcs和verdi软件环境
由于在linux服务器上支持Environment Modules。他支持安装有不同版本的多种编译器和其他软件。可以按需要加载。
加载LICENSE和EDA工具。
这里直接使用module load加载工具license。
module load license vcs/all_vS-202109SP1 verdi/verdi_vS-202109SP1
加载完成后使用module list查看已经加载工具版本
module list
新建RTL代码
新建RTL文件夹
mkdir rtl
在此文件夹下新建RTL代码(.v文件)
vi test.v
代码如下
// *********************************************************************************/
// Project Name :
// Author : i_huyi
// Email : i_huyi@qq.com
// Creat Time : 2024/9/18 15:39:42
// File Name : .v
// Module Name :
// Called By :
// Abstract :
//
// CopyRight(c) 2020, xxx xxx xxx Co., Ltd..
// All Rights Reserved
//
// *********************************************************************************/
// Modification History:
// 1. initial
// *********************************************************************************/
// *************************
// MODULE DEFINITION
// *************************
`timescale 1 ns / 1 ps
module test#(
parameter U_DLY = 1
)
(
input wire clk , // (input )
input wire rst_n , // (input )
);
//----------------------------------------------
// localparam
//----------------------------------------------
//----------------------------------------------
// register
//----------------------------------------------
reg clk_div ;
//----------------------------------------------
// wire
//----------------------------------------------
//----------------------------------------------
// assign
//----------------------------------------------
//------------------------------------------------------------
//------------------------------------------------------------
always @ (posedge clk or negedge rst_n)
begin
if(rst_n == 1'b0)begin
clk_div <= 1'b0;
end
else begin
clk_div <= ~clk_div;
end
end
//------------------------------------------------------------
//------------------------------------------------------------
//------------------------------------------------------------
//------------------------------------------------------------
endmodule
新建仿真文件vtf_test.v
vi vtf_test.v
代码如下
// *********************************************************************************/
// Project Name :
// Author : i_huyi
// Email : i_huyi@qq.com
// Creat Time : 2024/9/18 15:39:42
// File Name : .v
// Module Name :
// Called By :
// Abstract :
//
// CopyRight(c) 2020, xxx xxx xxx Co., Ltd..
// All Rights Reserved
//
// *********************************************************************************/
// Modification History:
// 1. initial
// *********************************************************************************/
// *************************
// MODULE DEFINITION
// *************************
`timescale 1 ns / 1 ps
module vtf_test;
//----------------------------------------------
// localparam
//----------------------------------------------
//----------------------------------------------
// register
//----------------------------------------------
reg clk ;
reg rst_n ;
//----------------------------------------------
// wire
//----------------------------------------------
//----------------------------------------------
// assign
//----------------------------------------------
//------------------------------------------------------------
//------------------------------------------------------------
test u_test(
.clk (clk ), // (input ) (input )
.rst_n (rst_n )// (input ) (input
);
//------------------------------------------------------------
//------------------------------------------------------------
initial
begin
clk =0;
rst_n =0;
#100;
rst_n =1;
#1000;
$finish(0);
end
//此代码生产fsdb文件为verdi读取波形
initial
begin
$fsdbDumpfile("tb.fsdb");
$fsdbDumpvars(0);
end
always #5 clk = ~clk;
//------------------------------------------------------------
//------------------------------------------------------------
endmodule
保存后文件如下
使用filelist文件保存
新建sim文件夹
mkdir sim
在sim文件中使用filelist,将我们要进行编译仿真的.v文件放在一起。
使用命令找到当前文件夹下的所有.v文件编辑成一个.f的文件清单(filelist)。
find -name "*.v" > filelist.f
由于我们存放.v的文件在上一层目录
这里写为
find ../rtl -name "*.v" > filelist.f
使用vcs编译文件使用verdi查看波形
这里介绍一下VCS主要指令
|---------------|----------------------------------------------------------------------------|
| 指令 | 介绍 |
| -sverilog | 用VCS编译,支持SystemVerilog |
| -full64 | 这是你安装的VCS版本,如果是64位需要此指令,否则会错 |
| -R | 表示编译完成之后直接运行可执行文件,如果缺少此指令,编译完成后VCS就会退出,如果你要生成fsdb波形文件的话就需要这个指令,否则生成不了这个文件。 |
| -debug_all | 表示调用UCLI和DVE,并为进一步调试DVE建立所需要的文档,继续用VCS看波形用此命令 |
| -debug_access | 这个命令是要生成fsdb波形,后面用Verdi看波形就要用到它了 |
| --gui | 调用 VCS 的图形界面 |
在上述的tb文件中,为了使得编译后生成.fsdb波形文件。需要在testbench中加入如下命令
initial
begin
$fsdbDumpfile("tb.fsdb");
$fsdbDumpvars(0);
end
第一步使用vcs编译文件
说明一下,我这里使用的服务器,所以在所有的操作命令前面都增加了
bsub -Is xxx(操作指令)
使用vcs编译文件指令
bsub -Is vcs -f filelist.f -timescale=1ns/1ns -full64 -R +vc +v2k -sverilog -debug_access+all | tee vcs.log
执行完成后可以看到生成了tb.fsdb和vcs.log文件。
使用verdi查看波形
bsub -Is verdi -sv -f filelist.f -ssf tb.fsdb
等待一段时间后打开了verdi软件
这里的二分频电路仿真波形已经出现
新建makefile文件
这里我们新建makefile将上述复杂的操作写入makefile中,来简化上述的过程。
vi Makefile
内容如下
all:
vcs
verdi
#---------------------------------------
#vcs
vcs:
bsub -Is vcs -f filelist.f -timescale=1ns/1ns -full64 -R +vc +v2k -sverilog -debug_access+all | tee vcs.log
#---------------------------------------
#verdi
verdi:
bsub -Is verdi -sv -f filelist.f -ssf tb.fsdb
#---------------------------------------
#clean
clean:
rm -rf *~ core csrc simv* vc_hdrs.h ucli.key urg* *.log novas.* *.fsdb* verdiLog 64* DVEfiles *.vpd
rm -rf INCA_libs irun*
rm -rf modelsim.ini transcript work
:
接下来就可以使用make命令来进行仿真了
启用vcs编译
bsub -Is make vcs
启用verdi查看波形
bsub -Is make verdi
清除生成的一些列文件
bsub -Is make clean
清除前
清除后