首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【日更计划116】数字IC基础题【UVM部分】

【日更计划116】数字IC基础题【UVM部分】

作者头像
空白的贝塔
发布2021-06-17 14:47:25
发布2021-06-17 14:47:25
7960
举报
文章被收录于专栏:摸鱼范式摸鱼范式

上期答案

[306] 为什么要将类注册到工厂?

工厂是UVM中使用的一种特殊查找表,用于创建组件或事务类型的对象。使用工厂创建对象的好处是,测试平台构建可以在运行时决定创建哪种类型的对象。因此,一个类可以用另一个派生类替换,而无需任何实际代码更改。为确保此功能,建议所有类都在工厂注册。如果不注册到工厂,则将无法使用工厂方法::type_id::create()构造对象。

[307] 工厂覆盖(override)的意思是?

UVM工厂允许在构造时将一个类替换为另一个派生类。通过将一个类替换为另一个类而不需要编辑或重新编译测试平台代码,这对于控制测试平台的行为很有用。

[308] 工厂的实例覆盖(instance override)和类型覆盖(type override)有什么区别?

类型覆盖意味着每次在测试平台层次结构中创建组件类类型时,都会在其位置创建替代类型。这适用于该组件类型的所有实例。

另一方面,实例覆盖意味着仅覆盖组件类的特定实例。组件的特定实例由该组件在UVM组件层次结构中的位置进行索引。

由于只有UVM组件类可以在UVM测试平台中具有层次结构,因此实例覆盖只能作用于组件类,而sequence(或者说object)只能覆盖类型。

[309] 实例覆盖和类型覆盖都可以作用于UVM_component和transaction吗?

不,只有UVM_component类是UVM测试平台层次结构的一部分,从而可以使用实例覆盖。sequence_item或sequence不是UVM测试平台层次结构的一部分,因此只能使用类型覆盖来覆盖,类型覆盖将覆盖该类型的所有对象。

[310] uvm_obejction是什么?在哪里使用它们?

uvm_objection类提供了一种在多个组件和sequence之间共享计数器的方法。每个组件/sequence可以异步地"raise"和"drop" objections,这会增加或减少计数器值。当计数器达到零(从非零值开始)时,将发生"all dropped"情况。

objection机制最常用于UVM phase机制中,以协调每个run_time phase的结束。在phase中启动的用户进程会首先raise objections,并在进程完成后drop objections。当一个phase中的所有进程都放下objections时,该phase的objections计数器清零。这种“all dropped”的情况说明每个进程都同意结束该phase。

下面是一个示例,说明如何在sequencer(my_sequencer)上启动sequence(my_test_sequence)并在sequence执行后drop objections

代码语言:javascript
复制
task run_phase( uvm_phase phase);
    phase.raise_objection( this );
    my_test_sequence.start(my_sequencer);
    phase.drop_objection( this );
endtask

本期题目

[311] 如何在UVM中实现仿真超时机制?
[312] uvm中的phase机制是什么意思?
[313] uvm_component有哪些phase?UVM的run_phase有哪些子phase?
[314] 为什么build_phase是自顶向下执行的?
[315] uvm_component中的phase_ready_to_end()的作用是?

正确答案将在下一期公布,或者到下面的文章获取答案

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-06-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 摸鱼范式 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 本期题目
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档