当前位置: 首页 > article >正文

VCS和Verdi联合仿真使用学习记录

环境: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

清除前

清除后


http://www.kler.cn/a/319235.html

相关文章:

  • 微信小程序——01开发前的准备和开发工具
  • kubernetes简单入门实战
  • 微澜:用 OceanBase 搭建基于知识图谱的实时资讯流的应用实践
  • SpringBoot(十八)SpringBoot集成Minio
  • Redo与Undo的区别:数据库事务的恢复与撤销机制
  • #include<string>和#include<string.h>有什么区别
  • 哪里有同等学力申硕英语历年真题答案
  • 计算机知识科普问答--17(81-85)
  • pg入门5—pg有哪些系统schema
  • git add成功后忘记commit的文件丢了?
  • Linux、Windows、Android下查看可执行文件、动态库和静态库信息的命令
  • 数据结构|二叉搜索树
  • ProgrammerAI—AI辅助编程学习指南
  • 前端实现将二进制文件流,并下载为excel文件
  • HarmonyOS鸿蒙开发实战(5.0)自定义全局弹窗实践
  • 缓存技术的核心价值与应用
  • android studio 批量修改包名 app package name
  • 技术周总结 09.16~09.22 周日(架构 C# 数据库)
  • 基于Java,SpringBoot和Vue的仓库管理商品管理电商后台管理系统
  • 交换机和路由器的区别
  • HTML-DOM模型
  • 《深度学习》—— 神经网络中的调整学习率
  • React组件如何暴露自身的方法
  • 专题·大模型安全 | 生成式人工智能的内容安全风险与应对策略
  • 由一个 SwiftData “诡异”运行时崩溃而引发的钩深索隐(六)
  • NLP(二)-文本表示