1.组件家族
SV中,激励器,检测器,检查其,对应于激励,监测,检查。
UVM组件核心分支uvm_component
继承于uvm_component的类均可以构成验证环境,因为他们都继承了phase机制,都会经历phase阶段
构成环境的常见组件类:driver,monitor,sequencer,agent,scoreboard,env,test
2.uvm_driver
于uvm_sequencer中获取事务,转化而于接口激励DUT
继承于此类,著名参数;class uvm_driver #(type REQ=uvm_sequencer_item, type RSP=REQ);在定义新的driver类时,声明需获取的REQ类型,默认RSP和REQ类型一致
在component基础上没有扩展新的函数,增加了端口和变量:uvm_seq_item_pull_port #(REQ,RSP) seq_item_port;REQ req;RSP rsp
driver和sequencer通信靠pull方式(driver.seq_item_port.connect(sequencer.seq_item_export);)为了获取新的事务
3.uvm_monitor
监测数据接口,任何需要用户自定义数据监测行为的Monitor都应当继承于此类
未增添新成员变量和方法,继承于uvm_monitor的新定义的类有助于实现父类uvm_monitor的方法和特性
功能包括 1.观测DUT的接口,收集总线信息 2.保持PASSIVE被动模式,永远不hi驱动DUT 3.总线协议或内部信号协议观察时,做一些功能和时序检查 4.对于更加复杂的检查要求,可以将数据发送至scoreboard,reference model,或者 coverage collector
4.uvm_sequencer
如同管道,从管道会产生连续的激励事务,最终通过TML端口送至driver一侧
也可以从uvm_driver获取RSP对象来的值数据通信是否正常
需要在定义时声明REQ的类型
sequencer既管理者sequence,也将sequence中产生的transaction item传送至driver一侧,是激励环节中的路由器
5.uvm_agent
包含一个driver,monitor,sequencer
有时只需要包含一个monitor,需要一个变量进行有条件的例化,uvm_active_passive_enum is_active = UVM_ACTIVE;
is_active是agent的一个成员变量,缺省值是UVM_ACTIVe,需要例化三个如果是PASSIVE,需要例化一个monitor,前者监测和激励,后者只监测
actve模式的对应着DUT的接口暴漏给agent且需要激励的场景,passive对应着DUT的接口已经与其它设计连接且只需要监测的场景
agent的存在是为了验证环境的复用,可以分为master和slave,master agent是用来向DUT发起transaction,slave agent用来响应DUT的events
6.UVM_scoerboard
同CHECKER,进行数据比对和报告,本身也没有添加额外的成员变量和方法,建议将用户自定义的scoreboard类继承于uvm_scoreboard类,便于子类在日后可以自动继承于可能被扩充到uvm_scoreboard类中的成员,实际环境中,uvm_scoreboard会接受来自于多个monitor的监测数据进行比对和报告
因为uvm_scoreboard通用的比较数据特性,其自带的其他两个用来做数据比较的类很少被使用到:uvm_in_order_comparator #(type T) 和 uvm_algorithm_comparator #(type BEFORE,type AFTER, type TRANSFORMER)
前者是参数类,有两个端口before和after_export,分别从DUT的输入端monitor和输出端monitor获取观测的数据事务,其是将多个时钟周期内的数据整合为更高抽象及的数据对象,;后者是一个参数类,参数数目要更多,贴合DUT的输入端监测数据格式不同于输出端数据格式,type bofore 和 type after两个事务类可以不相同,也要提供 转换类。
在scoreboard中通常会声明TLM端口供monitor传输数据,简易比较,可以采用UVM预定义的comparator,复杂的设计可以参考SV,在scoreboard中创建reference model和comparator
如果一个组件中有子一级的组件,应该考虑他们的创建,连接和通信问题
7.uvm_env
env可能包含多个agent 和component,这些不同组件共同构成一个完整的验证环境,这个环境可以在将来复用中作为子环境被进一步集成到更高的环境中
结构化容器。容纳其他组件和可以作为子环境在更高层的继承中被嵌入
agent作为标准单元,再更上层的继承中应该被例化到env;env在更高层的复用中,可以被其他env所嵌套
8.uvm_test
本身没有新成员,作为测试用例的代言人,决定环境的结构和连接关系,决定着使用哪一个测试序列
环境建立的唯一入口,只有通过它才正常运转UVM的phase机制
在一个顶层uvm_test中只例化一个顶层uvm_env,便于提供一个唯一环境节点形成树状的拓扑结构,