2016-06-09 110 views
0

在我的序列中,我有一条总线,它应该包含地址和数据。现在我想随机化地址和数据,之后将它们的随机值连接在总线上。 请帮助理解如何在seqItem类中执行此操作。基于seq_item中的2个随机变量构造变量

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_addrwfifo_data随机值。 我必须保持独立的wfifo_addrwfifo_data信号来为它们创建随机化约束。

现在我正在从序列中分配值wfifo_dout,该序列随机化了seqItem事务。但是,如果我可以在seqItem中创建wfifo_dout的值,那将会很好。

回答

4

有两件事情可以做:

  1. 创建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 
    
  2. 使用let语句声明的地址和数据,而不是使他们分开变量

    rand logic [541-1:0] wfifo_dout; 
    let wfifo_addr = wfifo_dout[541-1:515]; 
    let wfifo_data = wfifo_dout[512-1:0];