概述
目录
前言
介绍
建立工程
运行代码
查看波形
总结
前言
用VCS+verdi运行了下UVM实战中的例子(第二章)。
介绍
在某宝上花了几十块,买了个虚拟机(已经安装好VCS+verdi)。直接用UVM实战中,现成的uvm代码跑了下。
建立工程
UVM实战源码下载地址:UVM实战源码下载
书中DUT的功能:通过rxd接收数据,再通过txd发送出去。其中rx_dv是接收的数据有效指示,tx_en是发送的数据有效指示。具体代码如下所示:
module dut(clk,rst_n,rxd,rx_dv,txd,tx_en);
input clk;
input rst_n;
input [7:0]rxd;
input rx_dv;
output [7:0]txd;
output tx_en;
reg[7:0] txd;
reg tx_en;
always @(posedge clk) begin
if (!rst_n) begin
txd <= 8'b0;
tx_en <= 1'b0;
end
else begin
txd <= rxd;
tx_en <= rx_dv;
end
end
endmodule
具体的代码说明和UVM环境如何构建,书中有详细的描述,按着书中所讲的一步一步的敲代码就可以把环境构建起来。
本文主要是将这个UVM工程给运行起来,我们采用VCS+verdi的方式。工程如下所示:
将UVM环境的代码复制到各个文件中,如下图所示:
如果第一次接触UVM,建议对着实战源码一句一句的敲。然后去编译,看哪里有问题,可以学习一些经验。
写一个简单的makefile,如下所示:
simulate ?= vcs
FILELIST = ./../tb/top.f
tc ?= test_case
DUMP_EN ?= 1
LOG_DIR = ${shell mkdir -p ./log}
WAVE_DIR = ${shell mkdir -p ./wave}
ifeq ($(DUMP_EN), 1)
WAVE = +define+WAVE_DUMP -fsdb
else
WAVE =
endif
comp:
vcs
-f $(FILELIST)
-kdb -lca
-full64
-sverilog -v2k
-ntb_opts uvm-1.1
-debug_access+all -debug_region+cell+encrypt
+lint=TFIPC-L +warn=all -error=IWNF
-top top_tb
-Mupdate
+memcbk
+libext+.v+.V+.sv+.vp
+systemverilogext+.sv+.SV+
+nospecify +notimingcheck
-timescale=1ns/100ps
$(LOG_DIR)
$(WAVE_DIR)
$(WAVE)
+tc_name=$(tc)
-l ./log/$(tc)_compile.log
sim:
./simv
-l ./log/$(tc)_sim.log
-ucli -i do.ucli
+UVM_MAX_QUIT_COUNT=6,NO
+UVM_VERBOSITY=UVM_LOW
+UVM_TESTCASE=${tc}
+UVM_TESTNAME=${tc}
+TC_NAME=$(tc)
+vpdfileswitchsize=300
run: comp sim
verdi:
verdi
-f $(FILELIST)
-sverilog -v2k -sv
-ntb_opts uvm-1.1
+libext+.v+.V+.sv+.vp
+nospecify +notimingcheck
-timescale=1ns/100ps
-ssf ./wave/$(tc)_wave.vf
clean:
rm -f ./wave/*
rm -f *.log
rm -rf simv*
rm -rf simv.daidir
在top_tb中,增加一个dump波形的代码。
initial begin:WAVE_GEN
string tc_name;
if ($value$plusargs("TC_NAME=%s", tc_name)) begin
$display("tc_name=%s", tc_name);
end
`ifdef WAVE_DUMP
`define DUMP_SCOPE top_tb
$display("start dump wave");
$fsdbAutoSwitchDumpfile(300, $sformatf("./wave/%s_wave.fsdb", tc_name), 100);
$fsdbDumpvars(0, `DUMP_SCOPE, "+all");
`endif
end
增加filelist文件,将dut文件和验证环境的文件添加到filelist中。
-f $UVM_TEST_PATH/my_test/tb/dut.f
-f $UVM_TEST_PATH/my_test/tb/env.f
-f $UVM_TEST_PATH/my_test/tc/tc.f
-f $UVM_TEST_PATH/my_test/tb/tb.f
$UVM_TEST_PATH/my_test/tb/top_tb.sv
将UVM源码放到位置linux中(位置自己定),并在为其添加环境变量。
export UVM_HOME="$SNPSYS_HOME/uvm-1.1"
UVM源码下载地址:UVM源码下载
运行代码
编译仿真代码。
直接在terminal输入:make run tc=XXXX(XXXX是testcase的名字)
make run tc=my_case0
查看波形
仿真完之后,运行make verdi,打开FSDB波形文件。
make verdi tc=my_case0
总结
直接复制UVM实战的源码,也可以自己对着源码敲。
将dut代码,agent代码,env代码以及reference model代码,直接进行文件分类,用package包起来了。
最后,直接运行代码即可。
最后
以上就是积极枫叶为你收集整理的linux VCS+verdi运行UVM实战(第二章)中的例子介绍建立工程运行代码查看波形总结的全部内容,希望文章能够帮你解决linux VCS+verdi运行UVM实战(第二章)中的例子介绍建立工程运行代码查看波形总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复