UVM
文章平均质量分 80
XtremeDV
行走在码农和硅农之间
展开
-
github上包含VIP的仓库
NAMEOWNERSTARSURLDESCRIPTIONtvip-axitaichi-ishitani47https://github.com/taichi-ishitani/tvip-axiAMBA AXI VIPAHB2GodelMachine43https://github.com/GodelMachine/AHB2AMBA AHB 2.0 VIP in SystemVerilog UVMriscv-vipjerralph29https://...原创 2020-12-08 21:57:04 · 3494 阅读 · 1 评论 -
github上点赞前100的关于UVM的仓库
NAMEOWNERSTARURLDESCRIPTIONuvmprimerraysalemi174SystemVeriloghttps://github.com/raysalemi/uvmprimerlogictymonx136SystemVeriloghttps://github.com/tymonx/logicUVMReferenceVerificationExcellence110SystemVeriloghttps://github.com...原创 2020-12-07 21:58:44 · 4982 阅读 · 0 评论 -
推荐一款好用的IC设计中生成register model的工具
无意中发现一个开源的工具,使用systemRDL文件作为输入,可以生成寄存器相关的RTL module,UVM中使用的regmodel,C和verilog的头文件(包含寄存器某个字段的偏移以及mask bits),以及html的文档。资源如下:https://github.com/zhajio1988/Open_RegModel生成的html文档示例如下:https://systemr...原创 2019-10-18 10:44:13 · 2818 阅读 · 2 评论 -
SystemVerilog:如何处理UVM中的reset(第2部分)
前一段时间,我写了一篇有关如何处理UVM agent组件中的reset的文章。有人问了一个很好的问题:如何处理计分板上的reset?在本文中,我将与您分享我在验证环境中处理reset的方式。假设我们有一个带有APB接口的DUT,用于访问某些内部寄存器。与在agent中处理reset一样,在完整的验证环境中,我尝试在每个组件中实现handle_reset()函数,并且应从env组件中的一...翻译 2019-10-13 11:03:55 · 2466 阅读 · 2 评论 -
SystemVerilog:如何处理UVM中的reset(第1部分)
即使听起来很简单,但在实际实现中,在UVM agent中处理reset也不是那么简单。在本文中,我将介绍一种处理reset的通用机制,该机制可以在任何UVM agent中重复使用。让我们考虑一下,我们有一个具有以下架构的UVM agent:步骤#1:处理agent组件中的reset因为agent是最重要的组件,所以我们可以在其中实现一些逻辑,该逻辑可以检测到reset何时变为活动...翻译 2019-10-12 21:46:41 · 5851 阅读 · 1 评论 -
UVM糖果爱好者教程 - 17.寄存器读方法(read())揭秘
在上一篇文章“寄存器访问方法”中,我们查看了RAL的主要方法并展示了它们的工作方式。这篇文章将进一步关注read()方法,并展示该方法如何实际读取并返回寄存器的值。具体来说,我们将更详细地解释我们在上一篇文章中看到的read()方法的第1到第5步。以下序列图显示了read()方法中涉及的步骤。我们假定用户像这样调用方法:uvm_status_e status;uvm_reg_data_t val...翻译 2018-06-19 15:17:20 · 2836 阅读 · 1 评论 -
UVM糖果爱好者教程 - 18.配置数据库(config_db)重访
在文章“配置数据库”中,我们查看了jelly_bean验证环境的配置流程。我们还查看了配置数据库中的配置流程做了哪些幕后工作。本文将重点介绍访问配置数据库的语法和语义。在配置中,我们使用配置数据库存储并检索了jelly_bean_if,jelly_bean_env_config和jelly_bean_agent_config。下图显示了左侧配置中使用的组件层次结构和右侧配置数据库(显示为云朵状)。...翻译 2018-06-19 16:25:51 · 859 阅读 · 0 评论 -
UVM糖果爱好者教程 - 19.Analysis FIFO
这篇文章将解释如何使用AnalysisFIFO。 假设我想要一个记分板来比较两种jelly beans; 一个流是用于“期望的”jelly beans,另一个是用于“实际的”jelly beans。 同时假设jelly beans被异步喂入记分板。 为了同步jelly beans,我使用了两个analysis FIFO: ...翻译 2018-06-19 16:54:42 · 1693 阅读 · 0 评论 -
UVM糖果爱好者教程 - 32.定义do_print
当我们之前实现“do”钩子时,我们定义了convert2string函数,但是我们没有定义我们自己的do_print函数。这是因为convert2string非常灵活且重量轻,因为它不需要提供打印格式的所谓打印策略。但是如果您定义了自己的do_print,则可以立即享受预定义的打印格式。您也可以创建自己的格式。本文展示了如何使用do_print。定义do_print定义do_print本身并不是很...翻译 2018-06-28 14:48:21 · 5760 阅读 · 0 评论 -
UVM糖果爱好者教程 - 16.寄存器访问方法
UVM的寄存器抽象层(RAL)提供了几种访问寄存器的方法。 这篇文章将解释寄存器访问方法的工作原理。 在Register Abstraction中,我们介绍了RAL的概述并解释了如何定义寄存器。 在这篇文章中,我们将介绍如何访问寄存器。uvm_reg_field的属性在深入了解寄存器访问方法之前,让我们看看如何存储寄存器值。 如寄存器抽象中所示,uvm_reg_field是表示寄存器的位的最低寄存...翻译 2018-06-19 14:28:11 · 6005 阅读 · 0 评论 -
UVM糖果爱好者教程 - 27.打印消息冗余度
UVM具有丰富的报告功能。 本文介绍如何使用冗长阈值来过滤消息。预定义的冗余度级别UVM预先定义了六个详细程度; UVM_NONE到UVM_DEBUG。 这些级别只不过是整数枚举值(图中的括号显示值)。 带有UVM_NONE级别的消息始终打印,而具有其他详细级别的消息如果需要打印则需要更高的阈值。 预定于的冗余度级别冗余度级别举例作为一个例子,我添加了几个具有不同详...翻译 2018-06-25 16:08:15 · 4494 阅读 · 0 评论 -
UVM糖果爱好者教程 - 26.sequence仲裁
我们的jelly-bean业务表现良好,因此我们同时开始接受多份jelly-bean订单。有些客户也要求加急运输。但如何优先处理请求?现在是了解序列仲裁的时候了。今天的jelly-bean订单假设我们今天收到了以下jelly-bean订单:标准订单 - 四颗APPLE果冻豆优先顺序 - 四个蓝莓果冻豆优先顺序 - 四个BUBBLE_GUM果冻豆隔夜订单 - 四颗巧克力果冻豆在我们的jelly_be...翻译 2018-06-25 14:36:50 · 1496 阅读 · 2 评论 -
YAMM - 另一个内存管理器(uvm_mem)
YAMM概述另一个内存管理器(YAMM)是一个SystemVerilog库,为基于内存的操作提供支持,由Ionut Tolea和Andrei Vintila在2016年慕尼黑SNUG会议上发表了论文“另一个内存管理器”(YAMM):缓冲区可以按照任何粒度或地址对齐的6种分配模式进行分配缓冲区可以由用户插入(非重叠)缓冲区可以通过地址或句柄来解除分配缓冲区可以通过地址或句柄在内存空间中搜索缓冲区支持...翻译 2018-06-29 15:30:36 · 3135 阅读 · 0 评论 -
UVM糖果爱好者教程 - 25.使用C模型
我们经常使用C模型作为参考模型。 由于SystemVerilog的直接编程接口(DPI),使用C模型从未如此简单。 我们将向您展示如何在我们的jelly bean记分板中使用C模型。原始记分板这是我们在UVM 1.2中的Jelly Bean Taster中使用的原始记分板。 记分板检查风味,酸味和味道的组合是否符合预期(第9和10行)。class jelly_bean_sb_su...翻译 2018-06-25 10:51:06 · 2304 阅读 · 4 评论 -
UVM糖果爱好者教程 - 15. “Do”钩子函数
这篇文章将解释用户可定义的do_ *钩子函数。 在Field Macros中,我们看到标准数据方法(如copy()和compare())提供了用户可定义的钩子函数,如do_copy()和do_compare()。 我将在这篇文章中定义这些钩子函数。具有“do”功能的Jelly Bean事务类。让我们将“do”函数添加到jelly_bean_transaction类。do_copydo_copy()...翻译 2018-06-15 14:58:01 · 5384 阅读 · 2 评论 -
UVM糖果爱好者教程 - 14. 字段宏(Field Macros)
本文将解释UVM字段宏(`uvm_field_ *)如何工作。 在事务和序列中,我们使用UVM字段宏来自动实现jelly_bean_transaction的标准数据方法,如copy(),compare()和pack()。`uvm_object_utils_begin(jelly_bean_transaction) `uvm_field_enum(flavor_e, flavor, UVM_A...翻译 2018-06-15 14:38:19 · 3457 阅读 · 0 评论 -
UVM糖果爱好者教程 - 28. 打印消息记录
在之前的文章中,我们解释了如何使用冗余度阈值来过滤消息。 本文解释如何将消息发送到一个或多个文件。消息示例举例来说,我们向功能覆盖率收集器添加了几个不同严重程度的消息宏。class jelly_bean_fc_subscriber extends uvm_subscriber#( jelly_bean_transaction ); // ... function void write( j...翻译 2018-06-26 18:29:05 · 1366 阅读 · 3 评论 -
UVM糖果爱好者教程 - 29.后门访问时HDL路径
我们的 jelly-bean品尝业务非常成功,因此我们决定将我们的业务扩展为与另一名 jelly-bean类品牌合作。 然而,在合并过程中,我们发现合作伙伴的寄存器结构与我们的略有不同。 我们希望通过后门访问合作伙伴的寄存器,而无需修改我们已有的寄存器模型。 但是,我们如何指定HDL路径呢?伙伴关系(DUT)这就是新的DUT(jelly_bean_partnership)的外观。 ...翻译 2018-06-27 11:04:09 · 3926 阅读 · 1 评论 -
UVM糖果爱好者教程 - 20. TLM 1
UVM支持端口(TLM 1)和套接字(TLM 2)作为事务级接口。 这篇文章将解释TLM 1. TLM 1似乎令人望而生畏,因为它有许多端口,出口和“imp”,但一旦你了解了基本知识,TLM 1就不会太困难。Ports端口定义了使用哪种访问方法。 TLM 1中有23个端口类。每个端口都是uvm_port_base类的子类,而uvm_port_base类又是uvm_tlm_if_base类的子类(或...翻译 2018-06-20 17:22:32 · 877 阅读 · 0 评论 -
关闭axi vip的system configuration打印信息
class sys_cfg_catcher extends uvm_report_catcher; function new(string name="sys_cfg_catcher"); super.new(); endfunction function pattern_match(string str1, str2); int l1, l2; ...原创 2019-09-23 10:54:55 · 1985 阅读 · 5 评论 -
UVM中interface数组的set,get
从tb top使用uvm_config_db set interface数组,我这么写for(i=`num_of_master;i>0;i--) beginuvm_config_db#(virtual tv_ahb_master_intf)::set(null, "*", "vintf_master", vintf_master[i]);end结果直接报语法错误,google后...原创 2019-09-23 10:27:00 · 2166 阅读 · 7 评论 -
UVM1.2 相对于UVM1.1的变化
新功能和更改功能变量uvm_sequence_base::starting_phase已弃用,并由两个新方法set_starting_phase和get_starting_phase取代,这些方法阻止在phase中间修改starting_phase。此更改与UVM 1.1不向后兼容,但变量starting_phase虽然已弃用,但尚未从基类库中删除。新方法uvm_sequence_base:...翻译 2019-09-06 09:40:43 · 6141 阅读 · 0 评论 -
关于uvm_mem model的使用
uvm_mem提供了mem write和read的方法,在write方法中,有offset形参,这个形参意指访问的location处于连续地址空间中的偏移。在通过uvm_reg_map转换成physical address时,会加上base_addr。通常访问一段mem,我们会使用连续的地址进行访问,例如mem.write(0, data0) mem.write(1, data1)等,从0...原创 2019-01-02 11:31:50 · 5452 阅读 · 0 评论 -
发现了一个UVM源码的bug
瞎用,发现了一个UVM-1.2中uvm_reg_map.svh的bug。详细见下图红框中的代码:既然child_blk是null,那么除了能调用其静态方法外,其他方法(默认都是动态类型)是不能调用的。所以第1145行中红框中的代码是错误的,会报null object access 错误。并且1142行的uvm_error永远不会打印,每次运行到1142就报null object acces...原创 2018-11-28 10:17:23 · 1802 阅读 · 6 评论 -
为uvm_reg访问添加额外信息,参数uvm_object extension的用法
uvm_reg类为我们提供了寄存器访问的write和read方法,通常需要传递的参数有status, value, path, map, prior,其中prior是传递给sequencer的。如果我们需要为一个寄存器访问对应的总线传输添加额外的信息,例如protected access, locking, bursts,master_id等,那么我们需要添加一个umv_object...原创 2018-11-29 16:40:34 · 680 阅读 · 0 评论 -
开源uvm reg model (UVM 寄存器模型)生成工具
open-register-design-toolOrdt is a tool for automation of IC register definition and documentation. It currently supports 2 input formats:SystemRDL - a stardard register description format relea...原创 2018-09-27 17:34:44 · 4007 阅读 · 2 评论 -
UVM糖果爱好者教程 - 34. 定制UVM 1.2中的消息格式
本文介绍如何使用UVM 1.2自定义消息格式。步骤0 - 默认格式在更改消息格式之前,让我们看看在使用uvm_info宏时默认输出的外观:UVM_INFO testbench.sv(86) @ 0: reporter [top] This is a message from top.UVM_INFO testbench.sv(41) @ 0: uvm_test_top.my_env_h [my_...翻译 2018-06-28 16:22:54 · 1366 阅读 · 0 评论 -
UVM糖果爱好者教程 - 31.provides_responses?
这是一篇关于何时应设置寄存器适配器的provides_responses位的简短文章。原始Jelly Bean Driver这是Register Abstraction中使用的原始jelly_bean_driver。驱动程序使用get_next_item(第23行)获取请求,然后更新请求本身以存储来自DUT的响应(第33行)。最后,它调用item_done(第35行)。由于驱动程序不会返回单独的响...翻译 2018-06-28 13:50:53 · 1566 阅读 · 0 评论 -
UVM糖果爱好者教程 - 30.后门访问的背后
在之前的文章(通过后门访问寄存器和后门访问HDL路径)中,我们使用了configure,add_hdl_path和add_hdl_path_slice,然后这些函数神奇地创建了HDL路径。 作为一名用户,这很好,但作为一名专家,你想知道后面发生了什么吗? 这篇文章将带你窥探一下后门访问的背后。寄存器块的HDL路径寄存器块将其HDL路径存储在队列中。 确切地说,它可以有多个队列(在以字符串为键的池中...翻译 2018-06-28 10:45:26 · 6772 阅读 · 0 评论 -
UVM糖果爱好者教程 - 13. 配置数据库(uvm_config_db)
这篇文章将解释配置数据库(uvm_config_db)是如何工作的。 在配置类中,我们使用uvm_config_db来存储jelly_bean_if,jelly_bean_env_config和两个jelly_bean_agent_configs。 这篇文章将分析配置数据如何存储和检索。 下面显示了与配置数据库相关的类图。 请注意,为了避免混乱,我们只显示了与jelly_bean_if和jelly...翻译 2018-06-15 11:22:01 · 2578 阅读 · 0 评论 -
一个好用的开源在线时序图(波形图)绘制网站
网页分为上下两个面板,上面板输入一些代码,下面板就会显示对应的波形。有网页在线编辑和windows .exe安装版。https://wavedrom.com/editor.htmlhttps://github.com/zhajio1988/wavedrom...原创 2018-06-01 13:49:49 · 18462 阅读 · 3 评论 -
UVM糖果爱好者教程 - 24.通过后门访问寄存器
这篇文章将增加对寄存器抽象中定义的寄存器的后门访问。 通过附加几行代码,您可以通过后门访问寄存器。DUT我们使用与寄存器抽象中定义的相同的DUT(jelly_bean_taster)。 被测设备有两个寄存器,如下所示。 DUT 寄存器DUT将寄存器的每个字段定义为reg(第4至8行)。module jelly_b...翻译 2018-06-22 14:41:42 · 5688 阅读 · 0 评论 -
在SystemVerilog Constraints中调用function(约束中调用函数)的陷阱
这里有一个例子:class constraint_container; rand int unsigned a, b, c; function int unsigned get_a(); return a; endfunction function int unsigned value_of(int unsigned value); return value;...翻译 2018-03-13 17:40:18 · 2966 阅读 · 0 评论 -
SystemVerilog $random()可以被约束吗?
你不应该在SystemVerilog中使用$random,不幸的是,SystemVerilog LRM仍然有使用$random的例子。 你应该使用$urandom,$urandom_range或std::randomize()来获得大多数现代验证环境所需的随机稳定性。你可以对简单范围约束使用$urandom_range(Min,Max),或对单个变量使用std :: randomize(myvar...翻译 2018-03-13 17:20:35 · 6239 阅读 · 0 评论 -
UVM糖果爱好者教程 - 4.代理
上一篇文章集中讨论了 jelly-bean系统的transaction和sequence。本文将深入解释验证环境中的验证组件。interface在这一部分,将提供接口(jelly_bean_if)的一般解释及其绑定验证组件和jelly-bean(DUT)的作用。下图显示了jelly_bean_if的内容。实质上,jelly_bean_if已包含从jelly_bean_transaction中的属性...翻译 2018-03-19 16:00:27 · 1902 阅读 · 0 评论 -
SystemVerilog应该在什么时候用 带.clone()方法的$cast?
在UVM的例子中,你会发现很多地方使用了$cast,其中一些是$cast(rhs_,rhs.clone()),而另一些则没有使用.clone()($ cast(rhs_,rhs))。那么到底什么时候应该使用.clone()方法呢?实际用不用.clone()方法取决于你是否计划修改正在$cast的对象。在SystemVerilog中,类变量的赋值或$cast只会将句柄复制到对象,而不是对象本身。 大...原创 2018-03-13 16:57:25 · 7687 阅读 · 4 评论 -
SystemVerilog 类对象,变量和句柄
类对象是你在调用其构造函数 new()时创建的类定义的实例。 在SystemVerilog中,所有类对象都是动态创建的; 在时间0之后或之后.LRM不指定如何或何时可以销毁对象 - 只有当它不能被销毁时。类变量是变量的值表示对类对象的引用。 像任何其他变量一样,类变量的生命周期取决于它的定义方式和位置(静态,自动或动态)。类句柄表示对类对象的引用的值。 您永远无法查看或表示句柄的文字值(除特殊句柄...翻译 2018-03-13 16:11:38 · 4588 阅读 · 0 评论 -
关于SystemVerilog向下类型转换
Question: SystemVerilog是否支持向下类型转换(将基类对象转换为派生类对象)? 如果可以,怎么做?以下downcast示例不起作用:class base; int a = 5;endclassclass extend extends base; int b = 1;endclassmodule test; initial begin base ...翻译 2018-03-13 15:00:30 · 1536 阅读 · 0 评论 -
UVM中的p_sequencer和m_sequencer
p - parent sequencer - 要处理的实际sequencer类型的句柄,这个是自己定义的。m - m_表示隐藏或局部变量(member),m_sequencer是uvm_sequencer_base类型,定义在uvm_sequence_item类中。可以使用`uvm_declare_p_sequencer宏声明p_sequencer。但是你也可以在sequence中做以下相同的事情...原创 2018-03-19 11:14:29 · 15904 阅读 · 3 评论 -
关于systemverilog randomize()的简单问答
Question:我认为随机化单个变量给验证工程师提供了更大的灵活性。 也许systemverilog的设计者没有足够的预见到这一点。 也许他们可以看看其他语言,并借鉴一些良好的语言功能。LRM中的12.10节(在线随机变量控制)似乎表明我们可以将参数传递给randomize()来指定要随机化的特定变量。 你能否对此发表评论?Answer: 我同意随机化单个变量给验证工程师提供了更大的灵活性,但这...原创 2018-03-12 23:16:33 · 11722 阅读 · 0 评论