UVM(六)

UVM callback
如何改变driver的行为?
(1)使用UVM的factory机制和override机制实现(过多的扩展可能会引起继承关系层次出现混乱,应该从哪个类进行扩展?)
UVM(六)
call back(回调)

  • function or task(回调函数)

  • 在一个对象中使用,在另一个对象中定义
    UVM(六)
    如何使用UVM callback
    1、将UVM callback 方法内嵌入组件中
    2、创建一个最基本的callback基类(virtual class)
    3、从上一步创建的类中扩展出所需的callback类(子类对callback基类进行重载)
    4、在顶层实例化并注册callback对象

UVM(六)
UVM(六)
UVM(六)
UVM(六)

UVM(六)
UVM(六)
UVM Advanced sequence
UVM(六)

  • 其他sequence可以向sequence library注册
  • 可根据配置产生并执行已经在内部注册过的sequence
  • 具有多种内嵌的选择sequence算法
  • 支持用户自定义sequence算法

UVM(六)
向UVM sequence library 永久注册sequence
UVM(六)
UVM(六)
UVM(六)
UVM(六)
临时添加sequence到UVM sequence library
(在实际的testcase 中根据实际需求添加sequence到sequence library中)
UVM(六)
在一个单独的sequence library实例中添加sequence
UVM(六)
UVM(六)
UVM(六)
UVM(六)
UVM(六)
同样可以使用配置类的方法:
UVM(六)
virtual sequence(virtual sequencer)
UVM(六)
UVM(六)
1、创建virtual sequencer的句柄
UVM(六)
2、创建virtual sequence
UVM(六)
UVM(六)
3、在env中实例化virtual sequencer,并建立关联关系
UVM(六)
4、testcase中启动virtual sequence
UVM(六)
UVM(六)
UVM寄存器抽象级(RAL)
UVM(六)
register model 对DUT中的寄存器和存储器进行建模,这样可以在env实例化一个register model,scoreboard通过register model对寄存器和存储器访问
UVM(六)
UVM(六)
UVM(六)
寄存器模型的构成:
1、register model
UVM(六)
2、adapter
UVM(六)
UVM(六)
如何将寄存器模型嵌入测试平台中:
1、为DUT创建寄存器模型
UVM(六)
UVM(六)
UVM(六)
UVM(六)
之后将整体封装至reg_model中
UVM(六)
2、创建转换器adapter
UVM(六)
UVM(六)
3、在env中实例化reference model和adapter
UVM(六)
UVM(六)
5、在需要进行寄存器读写的地方使用API访问寄存器
UVM(六)
UVM(六)
UVM(六)
RAL的另一种形式,通过monitor返回DUT的值
UVM(六)
UVM(六)