内容
- uvm_sequence_item是transaction的基类
- 可以使用uvm_sequence_item和uvm_transaction对数据进行建模
什么是事务(transaction)?
- 总线协议可以认为是一个事务
UVM数据流
- testcase一般不产生数据,通常进行config
- sequencer会产生激励给到driver,传递的就是transaction
- driver和dut之间会进行一些时序解析,通过interface进行连接
- monitor和dut也通过interface进行连接
- monitor和scoreboard通过transaction进行交互
- 组件与组件之间传递的都是transaction传递,需要通过TLM进行传递
UVM数据建模
- uvm中transaction class继承自uvm_sequence_item,名字取为ahb_transaction...
- 其中定义了一些随机的变量,协议的接口
- rand_mode(0/1) - 关闭或者是打开随机
数据建模的考虑因素
事务:必须遵守的约束
- 约束分开写,可以对于几个约束进行关闭和打开
事务:如何添加约束
uvm_sequence_item class
- uvm_sequence_item继承自uvm_object,然后又扩展了一些方法
数据处理函数
数据处理函数的功能描述
UVM提供自定义函数
数据处理函数的使用方法
- 注册的时候需要通过宏对transaction中定义的变量进行设置才能打印出信息
uvm_object_utils macros
uvm_field_*字段宏定义
通过FLAG设置数据初始函数
通过FLAG设置数制
重写方法
修改数据约束并通过type_override进行替换
数据替换结果
修改数据约束并通过inst_override进行替换
参数化的数据类
数据建模的重用性:给数据类分层
总结
- transaction中的变量可以进行添加随机变量,添加约束,设置uvm_field_*