15、IC验证面试88问——环境、UVM优缺点、覆盖、两个config、VIP、验证流程、utils、TLM

Q81:你的验证环境是什么?目录结构是什么样的?

我是使用 UVM 验证方法学搭建的 TB ,然后在 VCS 平台进行仿真的。目录结构的话:主要由 RTL 文件、doc 文件、tb 文件、sim 文件、script 文件这几部分。

Q82. UVM 有什么优缺点?

  1. UVM 的优点:UVM 有各个机制、促进验证平台的标准化,UVM 中 test sequence 和验证平台是隔离独立的,可以更好的控制激励而不需要重新设计 agent . 改变测试 sequence 可以简单高效提高代码覆盖率。 UVM 支持工业标准,这会促进验证平台标准化。此外, UVM 通过 OOP (面向对象编程)的特点(例如继承)以及使用覆盖组件提高了重复使用率。因此 UVM 环境方便移植,架构清晰,组件连接方便,有利于进行大规模的验证。
  2. UVM 的缺点:代码冗余,工作量大,运行速度有缺失。

Q83. 通过工厂进行覆盖有什么要求?

  1. 无论是重载的类( parrot )还是被重载的类( bird ),都要在定义时注册到 factory 机制中。
  2. 被重载的类( bird )在实例化时,要使用 factory 机制式的实例化方式,而不能使用传统的 new 方式。
  3. 最重要的是,重载的类( parrot )要与被重载的类( bird )有派生关系。重载的类必须派生自被重载的类,被重载的类必须是重载类的父类。

Q84. 如果环境中有两个 config_db set,哪个有效?

UVM 更高的层次更接近用户,为了让用户少和底层组件打交道,所以层次越高优先级越高,高层次的 set 会覆盖底层次的 set 。
如果是层次相同再看时间先后顺序,谁发生的晚谁有效,时间靠后的会覆盖之前的

Q85. VIP 怎么写?

阶段 1(定义)

  1. 功能特性提取
  2. 特性覆盖率创建及映射
  3. VIP 的架构

阶段 2(VIP 基本搭建)
4. driver,sequencer,monitor (少量特性实现)。
5. 实现基本的端到端的 sequence

阶段 3(完成 monitor 与 scoreboard)
6. 完成 monitor -100%实现(checkers,assertions)
7. 完成 scoreboard -100%实现(数据完整性检查)
8. 在 monitor 中,完成监测到的 transaction 与 function coverage 实现映射。
9. 为映射更多的基本功能覆盖率,创建其它 sequences。

阶段 4(扩充 test 和 sequence 阶段)
10. 实现更多 sequences,从而获得 80%的功能覆盖率

阶段 5(完成标准)
11. Sequence 最终可以实现 100%的功能覆盖率。
12. 回归测试结果和最终的总结报告。

Q86. 验证流程,验证环境怎么搭

验证流程

  1. 看 spec 文档和协议,将 DUT 的功能和接口总线时序搞明白
  2. 制定验证计划和测试点分解
  3. 写 VIP 或者是用别人给的 VIP ,搭建验证环境和 TB ,包括各种组件,各个模块的 pkg ,基础的 sequence 还有 test ,暂时先就写一两个基础的 sequence ,然后还有一些环境配置参数的确定等,最后能够将 TB 正常运行,保证无误;
  4. 根据测试点编写 sequence 和 case ,然后去仿真,保证仿真正确性,收集覆盖率;
  5. 分析收集的覆盖率,然后查看覆盖率报告去分析还有哪些没有被覆盖,去写一些定向 case ,和更换不同的 seed 去仿真;
  6. 回归测试 regression ,通过不同的 seed 去跑,收集覆盖率和检测是否有其它 bug ;
  7. 总结
    验证环境
    在这里插入图片描述

driver 给 DUT 发送激励,montior 监测 DUT 输出的数据,参考模型(reference model )能实现与 DUT 相同的功能, scoreboard 把 monitor 接受到的数据和 reference model 的输出数据进行比对,如果比对成功就表示 DUT 能完成设计的功能。

Q87. Uvm_component_utils 有什么作用

  1. factory 机制的实现被集成在了一个宏中: uvm_component_utils。
  2. 这个宏最主要的任务是,将字符串登记在 UVM 内部的一张表中,这张表是 factory 功能实现的基础。只要在定义一个新的类时使用这个宏,就相当于把这个类注册到了这张表中。这样, factory 机制可以实现:根据一个字符串自动创建一个类的实例,并且调用其中的函数( function)和任务( task),这个类的 main_phase 就会被自动调用。

Q88. TLM 怎么用?

TLM 通信的步骤:

  1. 分辨出 initiator 和 target,producer 和 consumer 。
  2. 在 target 中实现 tlm 通信方法。
  3. 在俩个对象中创建 tlm 端口。
  4. 在更高层次中将俩个对象进行连接。

端口类型有三种:

  1. port ,一般是 initiator 的发起端。
  2. export ,作为 initiator 和 target 的中间端口。
  3. imp ,只能作为 target 接受 request 的末端。

多个 port 可以连接同一个 export 或 imp ,但是单个 port 或 export不能连接多个 imp 。

端口的连接:通过 connect 函数进行连接,例如 A(initiator) 与 B 进行连接,可以使用 A.port.connect(B.export)

uvm_*_imp#(T,IMP);IMP 定义中第一个参数 T 是这个 IMP 传输的数据类型,第二个参数 IMP 是实现这个接口所在的 component 。

  • 3
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值