linux VCS+verdi运行UVM实战(第二章)中的例子

这篇具有很好参考价值的文章主要介绍了linux VCS+verdi运行UVM实战(第二章)中的例子。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前言

介绍

建立工程

运行代码

查看波形

总结


前言

用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环境如何构建,书中有详细的描述,按着书中所讲的一步一步的敲代码就可以把环境构建起来。

linux VCS+verdi运行UVM实战(第二章)中的例子

本文主要是将这个UVM工程给运行起来,我们采用VCS+verdi的方式。工程如下所示:

将UVM环境的代码复制到各个文件中,如下图所示:

linux 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

linux VCS+verdi运行UVM实战(第二章)中的例子

总结

 直接复制UVM实战的源码,也可以自己对着源码敲。

将dut代码,agent代码,env代码以及reference model代码,直接进行文件分类,用package包起来了。

最后,直接运行代码即可。

代码链接,直接下载:https://download.csdn.net/download/qq_37708525/87337876?spm=1001.2014.3001.5503https://download.csdn.net/download/qq_37708525/87337876?spm=1001.2014.3001.5503文章来源地址https://www.toymoban.com/news/detail-402473.html

到了这里,关于linux VCS+verdi运行UVM实战(第二章)中的例子的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 第二章:25+ Python 数据操作教程(第二十二节如何从 R 调用或运行 python)持续更新

    本文介绍了如何从 R 调用或运行 python。这两种工具都有自己的优点和缺点。使用这两个工具中最好的包和功能并将其组合起来总是一个好主意。在数据科学领域,这些工具在使用方面拥有良好的市场份额。R 主要以数据分析、统计建模和可视化而闻名。而Python在深度学习和自

    2024年02月07日
    浏览(57)
  • WebRTC实战-第二章-使用WebRTC实现音视频通话

    、 什么是WebRTC|WebRTC入门到精通必看|快速学会音视频通话原理|WebRTC超全资料分享FFmpeg/rtmp/hls/rtsp/SRS WebRTC **WebRTC详细指南** http://www.vue5.com/webrtc/webrtc.html WEBRTC三种类型(Mesh、MCU 和 SFU)的多方通信架构 WebRTC API包括媒体捕获,音频和视频编码和解码,传输层和会话管理 。 假设

    2023年04月12日
    浏览(53)
  • 微信小程序开发实战课后习题解答————第二章(作业版)

    一、填空题 1.微信小程序通过   bindtap/catchtap    方式实现单击事件。 2.微信小程序的flex布局中, flex-direction: row   属性来实现子元素的横向排列 3.微信小程序中按钮通过    button   组件来实现 4.微信小程序通过  display: flex 来实现felx布局 5.微信小程序中执行页面数据加载完

    2024年02月15日
    浏览(39)
  • Linux第二章:文件权限管理

    常规文件 纯文本文件(ASCII) 二进制文件(binary) 数据文件(data) 目录 链接文件 区块设备文件:[b] 字符设备文件:[c] 数据接口文件:[s] 数据输送文件FIFO:[p] Linux文件没有所谓的扩展名,与文件自身的属性有关,与文件名无关。 具有可执行权限和文件可以执行 是两码事。

    2024年02月08日
    浏览(56)
  • 《Jetpack Compose从入门到实战》 第二章 了解常用UI组件

    书附代码 Google的图标库 ConstraintLayout约束布局需要依赖:implementation “androidx.constraintlayout:constraintlayout-compose: $constraintlayout _version” 《Jetpack Compose从入门到实战》第一章 全新的 Android UI 框架 《Jetpack Compose从入门到实战》 第二章 了解常用UI组件 《Jetpack Compose从入门到实战》

    2024年02月07日
    浏览(48)
  • Spark大数据分析与实战笔记(第二章 Spark基础-02)

    人生就像赛跑,不在乎你是否第一个到达尽头,而在乎你有没有跑完全程。 Spark于2009年诞生于美国加州大学伯克利分校的AMP实验室,它是一个可应用于大规模数据处理的统一分析引擎。Spark不仅计算速度快,而且内置了丰富的API,使得我们能够更加容易编写程序。 请参考《

    2024年02月03日
    浏览(67)
  • Spark大数据分析与实战笔记(第二章 Spark基础-05)

    成长是一条必走的路路上我们伤痛在所难免。 在大数据处理和分析领域,Spark被广泛应用于解决海量数据处理和实时计算的挑战。作为一个快速、可扩展且易于使用的分布式计算框架,Spark为开发人员提供了丰富的API和工具来处理和分析大规模数据集。 其中,Spark-Shell是Spar

    2024年02月03日
    浏览(117)
  • Spark大数据分析与实战笔记(第二章 Spark基础-01)

    宁愿跑起来被拌倒无数次,也不愿规规矩矩走一辈子,就算跌倒也要豪迈的笑。 Spark于2009年诞生于美国加州大学伯克利分校的AMP实验室,它是一个可应用于大规模数据处理的统一分析引擎。Spark不仅计算速度快,而且内置了丰富的API,使得我们能够更加容易编写程序。 Spark下

    2024年02月03日
    浏览(74)
  • Spark大数据分析与实战笔记(第二章 Spark基础-03)

    又回到了原点,就从现在开始我的新生活吧。 章节概要:Spark运行架构与原理 I. 引言 A. 概述Spark B. Spark的特点和优势 II. Spark运行架构概述 A. Spark集群模式 B. Spark运行模式 C. Spark执行引擎:Spark Core D. Spark计算模块:RDD E. Spark数据抽象模块:DataFrame和Dataset F. Spark资源管理器:

    2024年02月03日
    浏览(53)
  • 开源数据库MYSQL DBA运维实战 第二章 SQL

    1.1定义库 创建业务数据库         语法:CREATE  DATABASE   数据库名;         数据库命名要求:                 区分大小写                 唯一性                 不能使用如create  select                 不能单独使用数字和特殊符号如-                

    2024年02月20日
    浏览(88)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包