在我的序列中项目我有一个总线,它应该包含地址和数据。现在我想随机化地址和数据,然后在总线中连接它们的随机值。 请在seqItem类中帮助理解如何执行此操作。
class seqItem extends uvm_sequence_item;
`uvm_object_param_utils(seqItem)
rand logic [541-1:515] wfifo_addr;
rand logic [512-1:0] wfifo_data;
logic [541-1:0] wfifo_dout; // = {this.wfifo_addr, 3'b000, this.wfifo_data};
constraint wfifo_addr_ctrl { ... }
constraint wfifo_data_ctrl { ... }
…
endclass
那么如何让wfifo_dout
包含wfifo_addr
和wfifo_data
的随机值。
我必须保留单独的wfifo_addr
和wfifo_data
信号,以便为它们创建随机化约束。
现在我从序列中为wfifo_dout
赋值,这使seqItem事务随机化。但是,如果我可以在seqItem中创建wfifo_dout
的值,那就太好了。
答案 0 :(得分:4)
您可以做两件事:
创建一个post_randomize()
方法,对wfifo_dout
function post_randomize(); // called automatically after a call to randomize();
wfifo_dout = {this.wfifo_addr, 3'b000, this.wfifo_data};
endfunction
使用let
语句声明地址和数据,而不是将它们作为单独的变量
rand logic [541-1:0] wfifo_dout;
let wfifo_addr = wfifo_dout[541-1:515];
let wfifo_data = wfifo_dout[512-1:0];