- UVM中的类
- uvm_object
- uvm_component
- UVM中的常见组件
- driver
- sequencer
- monitor
- agent
- environment
- reference model & scoreboard
UVM中所有的类都有一个共同的基类:uvm_void 类。它没有数据成员,也没有成员函数。由uvm_void 类扩展得到了两个子类,分别为uvm_object类和uvm_port_base类。其中uvm_object类是UVM中所有的实体(包括 component和 transaction)的基类。uvm_port_base 是 UVM 中各种通信端口的基类。
uvm_objectuvm_object 是 UVM 中所有实体的基类。uvm_object 扩展得到很多子类, 其中比较重要的有uvm_reg、uvm_report_object 、uvm_transaction、uvm_phase。在上面重要的子类中,我们接触最多的还是uvm_report_object和 uvm_transaction。driver、monitor等component都是继承自uvm_component,而uvm_component 又继承自 uvm_report_object。 transaction、sequence 继承自 uvm_sequence_item,而 uvm_sequence_item 又继承自 uvm_transaction。 因此说 uvm_object 是 UVM 中比较基础的一个类。对验证人员来说只需要掌握到 uvm_component和 uvm_sequence_item 就行。
uvm_componentuvm_component是 UVM中比较关键的一个类,在 UVM框架中的 **uvm_agent、uvm_driver、 uvm_monitor、 uvm_scoreboard **等比较重要的组件都继承自该类。uvm_component最终还是扩展自 uvm_object类,因而比 uvm_object类有更多的特性。 下面介绍一些UVM中以这些类为基类的常用组件:
UVM中的常见组件 driver用于向 DUT 输入测试激励,满足 DUT 对时序的要求。典型的 driver 重复地接收数据项并将其驱动给 DUT。例如, driver 在一段时钟周期中通过控制读/写信号、地址总线和数据总线实现一个写操作。
sequencer用于调度向 DUT 发送激励的顺序,满足 DUT 对不同顺序激励的要求。Sequencer获取用户定义的 sequcence 中数据项的顺序,sequence形成更加结构化和有意义的激励模式,并且支持多个接口之间的同步。Sequence也能够对不同的协议进行分层。
monitormonitor 是一个采样 DUT 输出信号但不驱动 DUT 的被动的实体,同时执行接口协议检查。Monitor 收集数据项,从总线上提取信息并将其转换为可用于其他组件的 transaction或者其他事件信息。
agentsequencer、 driver、 monitor 都是可以单独可重用的,但是为了减少整合以及连接的工作量,UVM 建议环境开发者生成一个更抽象的容器,叫做 agent。验证组件能够包含不止一个 agent,许多 Active agents 激励 DUT,同时另外的 Passive agents响应事务请求。
environmentenvironment(env)是验证组件中最高层级的组件。它包括了一个或多个 agents。Env一般具有配置属性,可以自定义验证环境的拓扑结构和行为。
reference model & scoreboard**reference model(参考模型)用于得到输出期望值。**如果 reference model 有错误,那么最终比较的结果也是不可信的。 Scoreboard:对 DUT 和 reference model 输出的反馈进行比较和统计,得到比对结果。