UVM糖果爱好者教程
文章平均质量分 88
本专栏提供关于(UVM)的简单教程。不关注AHB,AXI或其他系统总线,而是基于jelly-bean生成器的示例。TB将以受限制随机的方式生成许多jelly-bean风味,并且评估哪种是可口风味。本教程翻译自Keisuke Shimizu先生的博客cluelogic.com。
XtremeDV
行走在码农和硅农之间
展开
-
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 · 1439 阅读 · 0 评论 -
UVM糖果爱好者教程 - 33.定义do_record
这是关于“do”钩子函数系列的最后一篇文章。 do_record函数是由记录对象属性的uvm_object记录函数调用的用户可定义的钩子。定义do_record定义do_record不是很困难。我们来定义jelly_bean_transaction的do_record。我记录了与我在do_print中打印的属性相同的属性。我使用了UVM定义的记录宏(第14至19行)。class jelly_bea...翻译 2018-06-28 14:59:13 · 2018 阅读 · 1 评论 -
UVM糖果爱好者教程 - 32.定义do_print
当我们之前实现“do”钩子时,我们定义了convert2string函数,但是我们没有定义我们自己的do_print函数。这是因为convert2string非常灵活且重量轻,因为它不需要提供打印格式的所谓打印策略。但是如果您定义了自己的do_print,则可以立即享受预定义的打印格式。您也可以创建自己的格式。本文展示了如何使用do_print。定义do_print定义do_print本身并不是很...翻译 2018-06-28 14:48:21 · 6003 阅读 · 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 · 1666 阅读 · 0 评论 -
UVM糖果爱好者教程 - 30.后门访问的背后
在之前的文章(通过后门访问寄存器和后门访问HDL路径)中,我们使用了configure,add_hdl_path和add_hdl_path_slice,然后这些函数神奇地创建了HDL路径。 作为一名用户,这很好,但作为一名专家,你想知道后面发生了什么吗? 这篇文章将带你窥探一下后门访问的背后。寄存器块的HDL路径寄存器块将其HDL路径存储在队列中。 确切地说,它可以有多个队列(在以字符串为键的池中...翻译 2018-06-28 10:45:26 · 7031 阅读 · 0 评论 -
UVM糖果爱好者教程 - 29.后门访问时HDL路径
我们的 jelly-bean品尝业务非常成功,因此我们决定将我们的业务扩展为与另一名 jelly-bean类品牌合作。 然而,在合并过程中,我们发现合作伙伴的寄存器结构与我们的略有不同。 我们希望通过后门访问合作伙伴的寄存器,而无需修改我们已有的寄存器模型。 但是,我们如何指定HDL路径呢?伙伴关系(DUT)这就是新的DUT(jelly_bean_partnership)的外观。 ...翻译 2018-06-27 11:04:09 · 4070 阅读 · 1 评论 -
UVM糖果爱好者教程 - 28. 打印消息记录
在之前的文章中,我们解释了如何使用冗余度阈值来过滤消息。 本文解释如何将消息发送到一个或多个文件。消息示例举例来说,我们向功能覆盖率收集器添加了几个不同严重程度的消息宏。class jelly_bean_fc_subscriber extends uvm_subscriber#( jelly_bean_transaction ); // ... function void write( j...翻译 2018-06-26 18:29:05 · 1458 阅读 · 3 评论 -
UVM糖果爱好者教程 - 27.打印消息冗余度
UVM具有丰富的报告功能。 本文介绍如何使用冗长阈值来过滤消息。预定义的冗余度级别UVM预先定义了六个详细程度; UVM_NONE到UVM_DEBUG。 这些级别只不过是整数枚举值(图中的括号显示值)。 带有UVM_NONE级别的消息始终打印,而具有其他详细级别的消息如果需要打印则需要更高的阈值。 预定于的冗余度级别冗余度级别举例作为一个例子,我添加了几个具有不同详...翻译 2018-06-25 16:08:15 · 4727 阅读 · 0 评论 -
UVM糖果爱好者教程 - 26.sequence仲裁
我们的jelly-bean业务表现良好,因此我们同时开始接受多份jelly-bean订单。有些客户也要求加急运输。但如何优先处理请求?现在是了解序列仲裁的时候了。今天的jelly-bean订单假设我们今天收到了以下jelly-bean订单:标准订单 - 四颗APPLE果冻豆优先顺序 - 四个蓝莓果冻豆优先顺序 - 四个BUBBLE_GUM果冻豆隔夜订单 - 四颗巧克力果冻豆在我们的jelly_be...翻译 2018-06-25 14:36:50 · 1535 阅读 · 2 评论 -
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 · 2461 阅读 · 4 评论 -
UVM糖果爱好者教程 - 24.通过后门访问寄存器
这篇文章将增加对寄存器抽象中定义的寄存器的后门访问。 通过附加几行代码,您可以通过后门访问寄存器。DUT我们使用与寄存器抽象中定义的相同的DUT(jelly_bean_taster)。 被测设备有两个寄存器,如下所示。 DUT 寄存器DUT将寄存器的每个字段定义为reg(第4至8行)。module jelly_b...翻译 2018-06-22 14:41:42 · 5849 阅读 · 0 评论 -
UVM糖果爱好者教程 - 23.将Jelly Bean Taster移植到UVM 1.2
我的第一批UVM教程(#1至#6)已于三年前发布。 从那以后,UVM(以及我的知识)已经发展,我一直想更新我的文章和代码。 但这并不容易,因为我的文章和代码紧密结合,读者的一些评论甚至提到了特定的代码行。UVM 1.2大约两个月前,Accellera发布了新的UVM 1.2,它激励我更新我的 jelly bean taster。 我认为是时候进行大修了。 有趣的是,我的代码几乎不需要修改。 我做的...翻译 2018-06-22 11:00:05 · 1014 阅读 · 0 评论 -
UVM糖果爱好者教程 - 22. Phasing
当我们在Agent中创建jelly_bean_driver时,我们编写了build_phase函数和run_phase任务,但是实际调用它们的人是谁?答案是uvm_phase类。UVM PhasesUVM有九个常见的phase类别(以黄色显示)和十二个运行时间phase类别(以粉色显示)。这些phase类是从uvm_topdown_phase,uvm_bottomup_phase或uvm_task...翻译 2018-06-21 17:49:49 · 826 阅读 · 0 评论 -
UVM糖果爱好者教程 - 21. TLM 1示例
在之前的文章中,我们看了TLM 1类的概述。 本文将为您提供一些使用TLM 1类的示例代码。components我们创建了以下组件来演示不同类型的TLM 1接口。 jelly_bean_sequencer(最左边的组件)创建jelly_bean_transaction的一个对象,名为jb_req。 jb_req通过几个TLM 1接口一直传送到右边(jelly_bean_transporter)。 ...翻译 2018-06-21 10:09:34 · 874 阅读 · 2 评论 -
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 · 913 阅读 · 0 评论 -
UVM糖果爱好者教程 - 19.Analysis FIFO
这篇文章将解释如何使用AnalysisFIFO。 假设我想要一个记分板来比较两种jelly beans; 一个流是用于“期望的”jelly beans,另一个是用于“实际的”jelly beans。 同时假设jelly beans被异步喂入记分板。 为了同步jelly beans,我使用了两个analysis FIFO: ...翻译 2018-06-19 16:54:42 · 1761 阅读 · 0 评论 -
UVM糖果爱好者教程 - 18.配置数据库(config_db)重访
在文章“配置数据库”中,我们查看了jelly_bean验证环境的配置流程。我们还查看了配置数据库中的配置流程做了哪些幕后工作。本文将重点介绍访问配置数据库的语法和语义。在配置中,我们使用配置数据库存储并检索了jelly_bean_if,jelly_bean_env_config和jelly_bean_agent_config。下图显示了左侧配置中使用的组件层次结构和右侧配置数据库(显示为云朵状)。...翻译 2018-06-19 16:25:51 · 931 阅读 · 0 评论 -
UVM糖果爱好者教程 - 17.寄存器读方法(read())揭秘
在上一篇文章“寄存器访问方法”中,我们查看了RAL的主要方法并展示了它们的工作方式。这篇文章将进一步关注read()方法,并展示该方法如何实际读取并返回寄存器的值。具体来说,我们将更详细地解释我们在上一篇文章中看到的read()方法的第1到第5步。以下序列图显示了read()方法中涉及的步骤。我们假定用户像这样调用方法:uvm_status_e status;uvm_reg_data_t val...翻译 2018-06-19 15:17:20 · 3013 阅读 · 1 评论 -
UVM糖果爱好者教程 - 16.寄存器访问方法
UVM的寄存器抽象层(RAL)提供了几种访问寄存器的方法。 这篇文章将解释寄存器访问方法的工作原理。 在Register Abstraction中,我们介绍了RAL的概述并解释了如何定义寄存器。 在这篇文章中,我们将介绍如何访问寄存器。uvm_reg_field的属性在深入了解寄存器访问方法之前,让我们看看如何存储寄存器值。 如寄存器抽象中所示,uvm_reg_field是表示寄存器的位的最低寄存...翻译 2018-06-19 14:28:11 · 6137 阅读 · 0 评论 -
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 · 5681 阅读 · 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 · 3584 阅读 · 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 · 2634 阅读 · 0 评论 -
UVM糖果爱好者教程 - 12. Analysis Port
这篇文章将解释analysis port 和 analysis export是如何工作的.在Agent中将jelly-bean monitor (jb_mon)中的analysis port (jb_ap)和 jelly-bean agent (jb_agent) 中的analysis port (jb_ap)连接。 jb_mon.jb_ap.connect( jb_ap ); // in the...翻译 2018-05-31 16:15:33 · 2547 阅读 · 2 评论 -
UVM糖果爱好者教程 - 11.Sequence Item Port
UVM driver和UVM sequencer使用UVM sequence item port和export进行连接。本文将解释sequence item port如何工作。在Agent中,我们seq_item_port将jelly-bean driver(jb_drvr)sequence item port()连接到jelly-bean sequencer()的sequence item ex...翻译 2018-05-03 18:09:04 · 3621 阅读 · 0 评论 -
UVM糖果爱好者教程 - 10.糖果厂内部
UVM工厂用于创建UVM对象和组件。 这篇文章将解释使用jelly_beans的UVM工厂(如您所期望的)并揭示工厂幕后发生了些什么。::type_id在Transactions和Sequences中,我们定义了jelly_bean_transaction类。 然后,one_jelly_bean_sequence创建了一个jelly_bean_transaction对象,如下所示:jb_tx = ...翻译 2018-04-19 10:16:36 · 1847 阅读 · 0 评论 -
UVM糖果爱好者教程 - 9.寄存器抽象
本文将解释如何使用UVM寄存器抽象层(RAL)来生成寄存器事务。下图显示了用于这篇文章的验证平台。 除此之外,jelly_bean_reg_block,jelly_bean_reg_adapter和jelly_bean_reg_predictor是用于寄存器抽象的类。 Verification Platform下图显示了RAL相关类的...翻译 2018-04-17 16:43:59 · 1911 阅读 · 1 评论 -
UVM糖果爱好者教程 - 8.配置
这篇文章将解释UVM配置对象,因为之前的文章并没有太多的介绍。 jelly-bean验证平台使用jelly_bean_agent_config和jelly_bean_env_config两种配置对象。 前者配置jelly_bean_agent,后者配置jelly_bean_env。 下图显示了验证平台和配置相关类的类图。 Ve...翻译 2018-04-08 17:32:57 · 1201 阅读 · 0 评论 -
UVM糖果爱好者教程 - 7.虚拟序列
你知道如果将两个柠檬和两个椰子混合,jelly beans会产生柠檬酥皮派的味道吗?而两种草莓和两种香草的混合,jelly beans会产生草莓脆饼的味道?这篇文章将提供关于创建这些新jelly beans食谱的虚拟序列的解释。Overview第一个图显示了本文中使用的验证组件的关系。前一篇文章中的jelly_bean_taster(DUT)是“增强的”,通过两个jelly_bean_ifs同时接...翻译 2018-03-30 16:34:42 · 1082 阅读 · 0 评论 -
UVM糖果爱好者教程 - 6.品尝
这篇文章揭示了糖果爱好者系列UVM教程的预期成果。使用创建的验证组件并写出测试用例,然后实际软件仿真运行。Test这个特殊的例子将告诉你如何开发一系列各种无糖的jelly_beans。测试类如下所述。class jelly_bean_test extends uvm_test; `uvm_component_utils(jelly_bean_test) jelly_bean_env...翻译 2018-03-26 14:03:34 · 1112 阅读 · 0 评论 -
UVM糖果爱好者教程 - 5.验证环境
本文将介绍其他的验证组件。Subscribers功能覆盖率收集器(jelly_bean_fc_sucbscriber)将生成的 jelly beans视为计数器。从monitor发送的jelly_bean_transaction通过21行上的write函数的sample方法进行采样,并对 jelly beans的风味,颜色和其他特征的交叉覆盖。class jelly_bean_fc_subscri...翻译 2018-03-21 13:57:03 · 2076 阅读 · 4 评论 -
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 · 2363 阅读 · 0 评论 -
UVM糖果爱好者教程 - 3.传输和序列
TransactionsJelly-Bean Transactionjelly_bean_transaction类根据口味,颜色和其他特征定义jelly_bean食谱。 它还具有称为口味的特性,以保持jelly_bean_taster(DUT)对口味的反应。 口味和颜色之间的关系在约束块(12行)中定义。 例如,如果口味是苹果口味,则颜色必须是红色或绿色(不是蓝色)。更新(2014年4月2日):在...翻译 2018-03-16 16:22:26 · 2403 阅读 · 4 评论 -
UVM糖果爱好者教程 - 2.食谱
虽然上一篇文章澄清了 jelly-bean taster的验证部分,但这篇文章将聚焦在jelly-bean食谱。jelly-bean食谱作为transaction从jelly_bean_sequencer传递给jelly_bean_driver。该transaction被称为jelly_bean_transaction。该transaction基于其风味,颜色和其他特征来定义jelly_bean。...翻译 2018-03-16 15:40:07 · 1973 阅读 · 0 评论 -
UVM糖果爱好者教程 - 1.概述
Accellera最近发布的UVM可能会改变验证的未来,因为验证方法似乎在这个UVM中得到巩固。本专栏将提供关于这种新的验证方法的简单教程。本教程不是关注AXI,OCP或其他系统总线,而是基于jelly-bean生成器(DUT)的假设示例。TB将以受限制的随机方式生成许多jelly-bean风味,并且该系统将评估可口风味。这里不需要任何系统总线的知识。下面描述下教程中使用的验证组件。上图显示了验证...翻译 2018-03-16 14:52:57 · 4774 阅读 · 3 评论