2016-06-09 108 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];