在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 22502|回复: 18

[原创] UVM学习 基础篇(一)

[复制链接]
发表于 2019-5-9 12:11:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
1.什么是UVM?UVM的优势有哪些?
(NXP、百度面试题)


    UVM(通用验证方法)是一种用于验证数字设计标准化的简单方法。
    优势:
  • 第一种自动化方法和第二种自动化类库的集合
  • 贯穿于验证平台的可重用性
  • 即插即用的验证IP
  • 通用的验证平台开发
  • 供应商和模拟器独立
  • 高智能的验证平台(即从预先设计的覆盖计划中产生合法的激励)
  • 支持CDV(覆盖率驱动)验证
  • 支持CRV(受限随机)验证
  • UVM在Accelerate System Initiative下标准化
  • 支持寄存器模型


2.uvm_component和uvm_object之间有何区别?
或者我们已经拥uvm_object,为什么我们需要uvm_component这种实际派生自的uvm_object类?(比特大陆、寒武纪面试题)


uvm_component:
  • 准静态实体(在构建阶段之后,它在整个模拟过程中可用)
  • 始终连接到给定硬件(DUT接口)或TLM端口
  • 具有用于控制仿真行为的phase机制
  • 配置组件拓扑结构

uvm_object:
  • 动态实体(在需要时创建,从一个组件转移到另一个组件然后取消引用)
  • 不连接到给定的硬件或任何TLM端口
  • 没有phase机制



3.UVM phase中top-down(自顶而下)、down-top(自底而上)以及并行执行的phase分别有哪些?
(寒武纪、乐鑫面试题)


只有build_phase是自顶而下的,除了run_phase,其他phased都是自底而上的。run_phase自顶而下工作,可以配置测试工作台层次结构,因此我们需要在构建叶子之前构建分支。



4.为什么build_phase是自顶而下而connect_phase是自底而上?

connect_phase旨在用于在组件之间建立TLM类型的连接,这就是它在构建阶段之后发生的原因。它自底而上工作,以便在设计层次结构中获得正确的实现,如果从上到下工作,这是不可能的。


5.UVM中的function phase和task phase分别有哪些?

只有run_phase(及其并行的12个phase)是task phase(消耗仿真时间的phase),其他phase都是function phase(不消耗仿真时间的非阻塞类型phase)。

6.哪个phase花费了更多时间以及为什么?
(比特大陆面试题)

如前所述,run_phase作为task phase,剩下的都是function phase。run_phase将从仿真(run)开始到仿真结束执行。run_phase非常耗时,测试用例产生激励正是在run_phase中实现。

7.UVM phase如何启动?

通过在顶层模块中调用run test(“test1”)来启动UVM phase。当调用run test()方法时,它首先会创建一个test_top的对象然后调用所有phase。

8.测试用例如何从仿真的命令行启动?

在top模块中写run test(),即不要在变量中提供任何内容。然后在命令行中添加:+UVM_TESTNAME =test1,启动测试用例名为test1的测试用例。


9.模块和基于class的tb的区别有哪些?
(乐鑫面试题)


模块是在仿真期间始终存在的静态对象。
class是一个动态对象,因为它们可以在仿真的生命周期中来去。
特别指出:interface是静态对象,因此只能用于top、模块等静态对象中,driver为动态的对像类,因此driver等类中使用的为virtual interface,通过虚的指针指向实际的interface。




10.什么是uvm_config_db?uvm_config_db和uvm_resource_db之间有什么区别?
(比特大陆面试题)

uvm_config_db是一个参数化类,用于将不同类型的参数配置到uvm数据库中,如此它可以被任何较低级别层次结构中的组件使用。
uvm_config_db是一个构建在uvm_resource_db之上的便利层,但这种便利非常重要。特别是,uvm_resource_db使用“最后写入获胜”方法。另一方面,uvm_config_db通过end_of_elaboration查看层次结构中的内容,因此“父获胜”。一旦启动start_of_simulation,config_db就会变成“最后写入获胜”。
uvm_config_db#(T)中的所有函数都是静态的,因此必须使用::运算符调用它们。uvm_config_db#(T)是从uvm_resource_db#(T)扩展而来的,所以它是uvm_resource_db#(T)的子类。

11.`uvm_component_utils()和`uvm_object_utils()的优势和区别是什么?

utile宏定义了保证对象/组件进行正确factory操作所需的基础结构。
有两个宏的原因是factory设计模式固定了构造函数可以拥有的参数数量。从uvm_object派生的类具有带一个参数的构造函数,即字符串名称。从uvm_component派生的类有两个参数,一个名称和一个uvm_component父类。
两个`uvm_ * utile宏插入代码,提供了factory模式create()方法,该方法将调用委托给uvm_object或uvm_component的构造函数。需要使用相应的宏,以便传递正确的构造函数参数。这意味着在扩展这些类时,为了能够使用UVM factory模式,无法添加额外的构造函数参数。

12.`uvm_do和`uvm_rand_send之间的区别是什么?


uvm_do执行以下步骤:
  • Create
  • Start item
  • Randomize
  • Finish item
  • Get response (optional)

`uvm_rand_send执行除create之外的所有上述步骤。用户需要创建sequence或sequence item。

13.uvm_transaction和uvm_seq_item之间的区别?
(百度面试题)


uvm_sequence_item类扩展了uvm_transaction。

uvm_sequence_item类仅从uvm_transaction类扩展,uvm_sequence_item类具有更多支持sequence和sequencer特征的功能。Uvm_sequence_item为sequencer和sequence提供了钩子,所以你可以使用sequence和sequencer生成事务,而uvm_transaction只提供do print和do record等基本方法。


14.说说你对UVM的理解?
(NXP、百度面试题)


模块化和可重用性 - 该验证方法被分为模块化组件(驱动程序,序列发生器,代理,env等),可以将组件级别之间的组件重用于多单元或芯片级别验证以及跨项目。
将测试用例与验证平台分开 - 测试用例与实际的测试平台层次结构分开,因此可以在不同的单元或跨项目中重用激励。
独立于仿真器 - 所有仿真器都支持基类库和方法,因此不依赖于任何特定的仿真器。
更好地控制激励产生 - sequence方法可以很好地控制激励的产生。有一些方法可以开发序列,包括随机化,layer sequence,virtual sequence等,它们提供了良好的控制和扩展激励生成的能力。
轻松配置 - configure机制简化了具有深层次结构的对象的配置。configure机制有助于根据验证环境轻松配置不同的测试平台组件,而无需担心任何组件在测试平台层次结构中的深度。

factory机制 - factory机制简化了组件的修改。使用工厂创建每个组件使它们可以在不同的测试或环境中被覆盖,而无需更改底层代码库。



15.用户是否可以自定义UVM中的phase?

除了UVM中可用的预定义uvm_phase之外,用户还可以选择将自己的phase添加到组件中。这通常通过扩展uvm_phase类和使用构造函数调用super.new来完成,new有三个参数:

  • 阶段任务或功能的名称

  • 自上而下或自下而上的阶段

  • 任务或功能



需要实现call task或call_func和get_type_name以完成新phase的添加。以下为添加示例:





16.什么是UVM寄存器模型?为什么需要它?


在验证上下文中,寄存器模型(或寄存器抽象层)是一组类,用于模拟DUST中寄存器和存储器的存储器映射行为,以便于激励生成和功能检查(以及可选的功能覆盖的某些方面)。 UVM提供了一组基类,可以扩展它们以实现全面的寄存器建模功能。





17.new()和create之间的区别是什么?
(思科面试题)

我们都知道用于为对象实例分配内存的new()方法.在UVM(和OVM)中,create()方法可以从factory创建对象实例,这允许使用factory重载时将所需对象替换为不同类型的对象,而无需重新编码。




18.什么是analysis_port?
(华为面试题)

analysis_port (uvm_tlm_analysis_port) — 特定类型的事务级端口,可以连接到零个,一个或多个analysis export,组件可以通过该端口调用在另一个组件中实现的方法。
uvm_analysis_port
向所有uvm_analysis_imp中实现的方法广播一个值。
uvm_analysis_imp
接收uvm_analysis_port广播的所有transaction。
uvm_analysis_export
将较低级别的uvm_analysis_imp导出到其父级。



19.什么是TLM FIFO?


简而言之,TLM FIFO是两个UVM组件之间的FIFO,最好是在Monitor和Scoreboard之间。Monitor继续发送DATA,它将存储在TLM FIFO中,Scoreboard可以在需要时从TLM FIFO获取数据。


20.什么是objection机制?
(比特大陆面试题)


UVM中的objection机制是允许组件之间的分层状态通信,这有助于决定验证结束的时间。

每个内置phase都有一个内置的objection机制,它为组件和对象提供了一种同步其测试活动的方法,并指示何时可以安全地结束phase,最终确定验证进程的结束。

组件或sequence将在活动开始时raise objection(提起异议),该活动必须在phase结束之前完成,因此将在该活动结束时drop objection(撤销异议)。一旦所有被raise的 objection都被drop,phase就会终止。




关注公众号并回复”UVMBOOK”可获取更多UVM学习资料



欢迎扫描二维码关注


发表于 2019-5-9 16:42:10 | 显示全部楼层
学习学习。
对于问题7,那如果问uvm怎么启动仿真过程,我的反应也是启动run_test啊。怎么说清楚啊。
 楼主| 发表于 2019-5-10 10:45:50 | 显示全部楼层


viviy 发表于 2019-5-9 16:42
学习学习。
对于问题7,那如果问uvm怎么启动仿真过程,我的反应也是启动run_test啊。怎么说清楚啊。
...


在编译正确的情况下,top_tb文件中的run_test()函数会自动寻找找对应的test,或者在命令行时,一般使用脚本进行封装,脚本中加+UVM_TESTNAME=“”,编译器也是可以识别的

发表于 2019-5-22 17:55:43 | 显示全部楼层
感谢楼主的分享 支持
发表于 2019-5-27 16:53:19 | 显示全部楼层
感谢楼主的分享~希望能再多一些
发表于 2019-5-27 16:56:06 | 显示全部楼层


viviy 发表于 2019-5-9 16:42
学习学习。
对于问题7,那如果问uvm怎么启动仿真过程,我的反应也是启动run_test啊。怎么说清楚啊。
...


启动UVM就是开始运行各个phase的过程吧,我认为两个问题是等价的
发表于 2019-12-12 21:16:43 | 显示全部楼层
see see
发表于 2019-12-14 11:59:15 | 显示全部楼层
楼主网盘失效了
发表于 2019-12-19 21:22:16 | 显示全部楼层
学习了
发表于 2019-12-20 08:58:00 | 显示全部楼层
挺好,楼主棒棒哒。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

×

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-22 04:43 , Processed in 0.022280 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表