UVM验证平台的总体架构如上图所示。上一节我们搭建了最简单的Driver和DUT,并加入了factory机制、objection机制和virtual interface中的config_db机制。这一节将加入其它部件。
1、transaction部件
transaction部件可以理解为网络传输中的“包”。这个类中我们需要定义这个“包”所含的内容。
rand bit[47:0] dmac;
rand bit[47:0] smac;
rand bit[15:0] ether_type;
rand byte pload[];
rand bit[31:0] crc;
如这个“包”中,定义了5个随机变量。rand修饰符是代表,每次实例化这个类——使用函数randomize()这个类时,这些变量都会随机赋予一个随机的值。这个“包”包含的pload[]是动态数组,需要的randomize()的时候规定其大小范围。同时在transaction类中,可以定义多个数据处理函数,如copy、compare、print等基本函数;也可以用field_automation机制
`uvm_object_utils_begin(my_transaction)
`uvm_field_int(dmac, UVM_ALL_ON)
`uvm_field_int(smac, UVM_ALL_ON)
`uvm_field_int(e