UVM(六)
UVM callback
如何改变driver的行为?
(1)使用UVM的factory机制和override机制实现(过多的扩展可能会引起继承关系层次出现混乱,应该从哪个类进行扩展?)
call back(回调)
-
function or task(回调函数)
-
在一个对象中使用,在另一个对象中定义
如何使用UVM callback
1、将UVM callback 方法内嵌入组件中
2、创建一个最基本的callback基类(virtual class)
3、从上一步创建的类中扩展出所需的callback类(子类对callback基类进行重载)
4、在顶层实例化并注册callback对象
UVM Advanced sequence
- 其他sequence可以向sequence library注册
- 可根据配置产生并执行已经在内部注册过的sequence
- 具有多种内嵌的选择sequence算法
- 支持用户自定义sequence算法
向UVM sequence library 永久注册sequence
临时添加sequence到UVM sequence library
(在实际的testcase 中根据实际需求添加sequence到sequence library中)
在一个单独的sequence library实例中添加sequence
同样可以使用配置类的方法:
virtual sequence(virtual sequencer)
1、创建virtual sequencer的句柄
2、创建virtual sequence
3、在env中实例化virtual sequencer,并建立关联关系
4、testcase中启动virtual sequence
UVM寄存器抽象级(RAL)
register model 对DUT中的寄存器和存储器进行建模,这样可以在env实例化一个register model,scoreboard通过register model对寄存器和存储器访问
寄存器模型的构成:
1、register model
2、adapter
如何将寄存器模型嵌入测试平台中:
1、为DUT创建寄存器模型
之后将整体封装至reg_model中
2、创建转换器adapter
3、在env中实例化reference model和adapter
5、在需要进行寄存器读写的地方使用API访问寄存器
RAL的另一种形式,通过monitor返回DUT的值