我是靠谱客的博主 开朗玉米,最近开发中收集的这篇文章主要介绍VCS和Verdi联合仿真编写RTL代码VCS编译Verdi查看波形,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

编写RTL代码

设计文件如下:
add.v

module adder(
input clk,
input wire [31:0] a,
input wire [31:0] b,
output reg [31:0] c
);

always@(posedge clk)
    c<=a+b;

endmodule


sub.v

module suber(
input wire clk,
input wire [31:0]  a,
input wire [31:0]  b,
output reg [31:0] c
);
always@(posedge clk)
    c<=a-b;
endmodule


顶层alu.v

module alu (
input wire clk,
input wire mode,
input wire [31:0] a,
input wire [31:0] b,
output reg [31:0] out
);

wire [31:0] c1;
wire [31:0] c2;

assign out=(mode==1)?c1:c2;             //mode==1,add,mode==0,sub

adder U1(
.clk(clk),
.a(a),
.b(b),
.c(c1)
);

suber U2(
.clk(clk),
.a(a),
.b(b),
.c(c2)
);
    
endmodule

testbench

module test;

reg clk;
reg [31:0] a;
reg [31:0] b;
wire [31:0] out;
reg mode;
//
initial begin
    clk=0;
    forever begin
        #5 clk=~clk;
    end
end
//
always@(posedge clk)
    mode<=$random%2;

always@(posedge clk)
begin
    a<=$random%128+128;
    b<=$random%128+128;
end

initial
begin
    #1000
    $stop;
end

alu U(.clk(clk),
      .mode(mode),
      .a(a),
      .b(b),
      .out(out));

initial begin
   $fsdbDumpfile("./alu.fsdb");
   $fsdbDumpvars(0);
end

endmodule

其中,代码块

initial begin
   $fsdbDumpfile("./alu.fsdb");
   $fsdbDumpvars(0);
end

是必须的,建议放在一个单独的initial块

VCS编译

首先生成filelist文件,该文件包含rtl设计的所有.v文件的路径,我们通过如下命令生成:
在这里插入图片描述
然后使用vcs编译

vcs -full64 -f filelist.f -timescale=1ns/1ns -sverilog -debug_access -kdb -lca -R -l ./output.log

vcs的一些常用参数列举如下表
在这里插入图片描述
上述指令中,-l ./output.log表示生成log文件的名字是output.log并保存在当前文件夹;-sverilog选项开启SystemVerilog支持;添加-kdb选项支持输出KDB格式的数据,用于与Verdi在交互模式交换数据,而KDB格式属于"Limited Customer Availability"特性,必须通过-lca选项开启-f filelist.f是从你的filelist下开始编译;vcs -full64一定要加,-full64这是版本号,不加很可能会报错;-timescale=1ns/1ps是编译的时间精度,也需要加上,并且和Testbench应该要保持一致。
编译成功后,会得到这两个文件
在这里插入图片描述

Verdi查看波形

输入如下命令:

verdi -sv -f -Uart_rtl.f -ssf alu.fsdb

该指令的意思就是同时打开filelist.f这个list里面的文件和仿真生成的波形fsdb文件。
打开后界面如下所示

在这里插入图片描述
此时还没有波形,我们选择G1,按g,会跳出下图所示的一个框,在这个界面里,我们可以选中我们要观察的信号,然后点击apply.
在这里插入图片描述
apply之后,会出现如下波形,在信号右侧区域右键,选择Radix,选择十进制,如下图所示:
在这里插入图片描述
最终波形如下图所示
在这里插入图片描述

最后

以上就是开朗玉米为你收集整理的VCS和Verdi联合仿真编写RTL代码VCS编译Verdi查看波形的全部内容,希望文章能够帮你解决VCS和Verdi联合仿真编写RTL代码VCS编译Verdi查看波形所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部