29 UVM Command Line Processor (CLP)

news2024/11/27 19:35:39

随着设计和验证环境的复杂性增加,编译时间也增加了,这也影响了验证时间。因此,需要对其进行优化,以便在不强制重新编译的情况下考虑新的配置或参数。我们已经看到了function or task如何基于传递参数进行行为。类似地,UVM提供了一个接口来提供命令行参数,从而提供了灵活性,在“uvm_cmdline_processor”类的帮助下可以避免重新编译testbench。它允许使用不同的配置运行测试。

uvm_cmdline_processor类提供了从命令行设置各种uvm变量的功能,例如组件详细性(component verbosity)以及整数类型和字符串的配置。

1 uvm_cmdline_processor class hierarchy

2 uvm_cmdline_processor Methods

这里讨论了命令行处理器和内置命令行参数的几种方法。

`include "uvm_macros.svh"
import uvm_pkg::*;

class my_test extends uvm_test;
  uvm_cmdline_processor clp;
  bit [31:0] addr;
  string clp_addr_str;
  string clp_pattern_str;
  string pattern;
  `uvm_component_utils(my_test)
  
  function new(string name = "my_test", uvm_component parent = null);
    super.new(name, parent);
  endfunction
  
  function void build_phase(uvm_phase phase);
    super.build_phase(phase);
    clp = uvm_cmdline_processor::get_inst();
    addr = clp.get_arg_value("+ADDR=", clp_addr_str) ? clp_addr_str.atohex(): 32'hF;
    pattern = clp.get_arg_value("+PATTERN=", clp_pattern_str) ? clp_pattern_str: "Hello";
  endfunction
  
  function void end_of_elaboration_phase(uvm_phase phase);
    super.end_of_elaboration_phase(phase);
    `uvm_info(get_full_name(), $sformatf("addr = %0h, pattern = %s", addr, pattern), UVM_LOW)
  endfunction
endclass

module tb_top;
  initial begin
    run_test("my_test");
  end
endmodule

 Please check “Run Options” while running the code.[-access +rw +ADDR=AA +PATTERN=World]

UVM: command line processor - EDA Playground

Output:

UVM_INFO testbench.sv(25) @ 0: uvm_test_top [uvm_test_top] addr = aa, pattern = World

3 Built-in command line arguments in UVM

4 System functions for command line arguments in SystemVerilog

和uvm_cmdline_processor类方法类似,SV也提供了一些系统函数。

module cmd_line_args_ex;
  bit [31:0] addr_1, addr_2;
  string pattern;
 
  initial begin
    // +ADDR argument uses $test$plusargs and $value$plusargs
    if($test$plusargs("ADDR="))
      void'($value$plusargs("ADDR=%0h", addr_1));
    else
      addr_1 = 'hF;
    
    if($test$plusargs("PATTERN="))
      void'($value$plusargs("PATTERN=%s", pattern));
    else
      pattern = "Hello";
    
    $display("address = %0h, pattern = %s", addr_1, pattern);
    
    if($test$plusargs("ENABLE"))
      $display("You have successfully received ENABLE as argument");
    
    // +ADDR argument uses $value$plusargs only
    if($value$plusargs("ADDR=%0h", addr_2))
      $display("You have successfully received %0h value for ADDR argument", addr_2);
  end
endmodule

 Please check “Run Options” while running the code.【-access +rw +ADDR=AA +PATTERN=World +ENABLE】

Output:

address = aa, pattern = World
You have successfully received ENABLE as argument
You have successfully received aa value for ADDR argument

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1349184.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

30 UVM Adder Testbench Example

1 Adder Design 加法器设计在时钟的上升沿产生两个变量的加法。复位信号用于clear out信号。注:加法器可以很容易地用组合逻辑开发。引入时钟和重置,使其具有测试台代码中时钟和重置的样子/风格。 module adder(input clk, reset, input [7:0] in1, in…

BikeDNA(二) OSM数据的内在分析1

BikeDNA(二) OSM数据的内在分析1 该笔记本分析给定区域的 OSM 自行车基础设施数据的质量。 质量评估是“内在的”,即仅基于一个输入数据集,而不使用外部信息。 对于将 OSM 数据与用户提供的参考数据集进行比较的外在质量评估&…

Halcon闭运算closing

Halcon闭运算 文章目录 Halcon闭运算 闭运算的计算步骤,为先膨胀,后腐蚀。这两步操作能将看起来很接近的元素,如区域内部的空洞或外部孤立的点连接成一体,区域的外观和面积也不会有明显的改变。通俗地说,就是类似于“填…

金蝶云星空其他出库单,审核中/审批流中可以选择序列号设置

文章目录 其他出库单,审核中,审批流中可以选择序列号设置 其他出库单,审核中,审批流中可以选择序列号设置

2023 总结:我在上海做程序员的第八年

文章目录 生活举办了婚礼拿到上海户口输出的数据看书还不够 赚钱工作副业 专业技术开源图片分析工具 AndroidBitmapMonitor成为谷歌开发者专家学习的终极目的 健康总结历史总结 大家好,我是拭心。 这篇文章里,我将从生活、赚钱、专业技术、健康几方面总…

Oracle-深入了解cache buffer chain

文章目录 1.Cache buffer chain介绍2.Buffer cache的工作原理3 Buffer chains4.Multi-versioning of Buffers5.Latches6.诊断CBC latch等待7.解决 CBC Latch等待 1.Cache buffer chain介绍 经常看到会话等待事件“latch:cache buffers chain”。 如果想知道意味着什…

Ubuntu安装FSearch

文章目录 简介安装配置Fsearch的搜索路径参考资料 简介 Fsearch是Ubuntu等Linux系统中用于文件快速搜索的软件,类似于Windows系统中的Everything。下面介绍如何在Ubuntu系统中安装并使用Fsearch,只需简单几步!🏃🏃 安…

力扣LeetCode第26题 删除有序数组中的重复项

一、题目 给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 示例 1&#xff1…

C++使用MINGW64集成Direct3D开发环境

霸王•吕布 / MinCPlusCompiler GitCodewindows mingw64 c简易开发编译工具,集成Direct3D FMOD Cmake编译工具https://gitcode.net/qq_35829452/mincpluscompiler 一.MINGW64编译器 gcc.exe C语言编译器g.exe C语言编译器mingw32-make.exe -j 4 CMake编译工具 二.MINGW64编…

Dungeon Scrawl——在线虚拟世界地图制作器

今天带来一款十分有趣的地图应用,同样也是在线地图工具,如果我们想要制作此类风格的地图,这款工具定能助我们一臂之力。 按照惯例先给出网址: Dungeon Scrawl | Free Online D&D Map Maker 进入网站,点击Start S…

CSS 缩减顶部动画

<template><!-- mouseenter"startAnimation" 表示在鼠标进入元素时触发 startAnimation 方法。mouseleave"stopAnimation" 表示在鼠标离开元素时触发 stopAnimation 方法。 --><!-- 容器元素 --><div class"container" mou…

华为模拟器eNSP报警提示解决办法

新安装的华为模拟器eNSP 启动交换机或路由器等设备是经常出现配置更改的提示&#xff0c;是不是很烦&#xff1f; Dec 29 2023 10:46:04-08:00 Huawei DS/4/DATASYNC_CFGCHANGE:OID 1.3.6.1.4.1.2011.5 .25.191.3.1 configurations have been changed. The current change nu…

设计模式—单例模式 / DCL失效问题 / 暴力破解单例 (反射/序列化)

单例模式 杂谈 前提饿汉模式&#xff1a;懒汉模式&#xff1a; 线程不安全线程安全 双重锁懒汉模式(Double Check Lock)静态内部类模式枚举单例 杂谈 和同学在聚会的时候聊起设计模式&#xff0c;聊完之后发现我对自己的设计模式的看法貌似存在误解&#xff0c;当我看到设计…

00-开篇导读:学习分库分表开源框架的正确方法

1 前言 互联网高速发展带来海量的信息化数据&#xff0c;也带来更多的技术挑战。各种智能终端设备&#xff08;比如摄像头或车载设备等&#xff09;以每天千万级的数据量上报业务数据&#xff0c;电商、社交等互联网行业更不必说。这样量级的数据处理&#xff0c;已经远不是传…

IO进程线程 day1 IO基础+标准IO

1、使用fgets统计一个文件的行号 #include <stdio.h> #include<string.h> #include<stdlib.h> int main(int argc, const char *argv[]) {FILE *fpNULL;if((fpfopen("1.c","r"))NULL){return -1;}int count0;char buf;while(buf!EOF){b…

消息队列LiteQueue

文章目录 一、简介二、设计2.1 队列结构设计2.2 队列接口设计 三、实现3.1 队列锁的实现3.2 创建队列3.3 写入队列3.4 读出数据3.5 判断队列是否为空3.6 判断队列是否为满3.7 清空队列3.8 删除队列 四、测试参考 一、简介 收到消息时先把接收到的消息放到队列中。在任务中从队…

360高级java面试真题

今年IT寒冬&#xff0c;大厂都裁员或者准备裁员&#xff0c;作为开猿节流主要目标之一&#xff0c;我们更应该时刻保持竞争力。为了抱团取暖&#xff0c;林老师开通了《知识星球》&#xff0c;并邀请我阿里、快手、腾讯等的朋友加入&#xff0c;分享八股文、项目经验、管理经验…

问界M9激光雷达解说

什么是激光雷达 激光雷达(英文:Lidar),是一种通过发射激光束来测量目标位置、速度等特征量的雷达系统。其工作原理是将激光光束照射到目标物体上,然后通过测量激光光束从发射到反射回来的时间,来计算目标物体的距离、位置、速度等参数。激光雷达通常用于测量地形、地貌、…

关键字:throw关键字

在 Java 中&#xff0c;throw关键字用于抛出异常。当程序执行过程中发生意外情况&#xff0c;如错误的输入、资源不足、错误的逻辑等&#xff0c;导致程序无法正常执行下去时&#xff0c;可以使用throw关键字抛出异常。 以下是使用throw关键字的一些示例&#xff1a; 抛出异常…

事务失效的十种常见场景

学习事务失效场景 1 概述 事务的传播类型isolationTransactionnal注解属性 事务方法未被Spring管理方法使用final类型修饰非public修饰的方法同一个类中的方法相互调用方法的事务传播类型不支持事务异常被内部catch&#xff0c;程序生吞异常数据库不支持事务未配置开启事务错…