2016-06-09 4 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_addrwfifo_data의 무작위 값을 포함하는 wfifo_dout를 확인합니다. wfifo_addrwfifo_data 신호를 별도로 유지해야만 임의 화 제한을 설정할 수 있습니다.

이제 시퀀스에서 wfifo_dout 값을 할당합니다.이 시퀀스는 seqItem 트랜잭션을 무작위로 지정합니다. 그러나 wfifo_dout의 값을 seqItem에 만들면 좋을 것입니다.

답변

4

두 가지 당신이 할 수 있습니다 :

  1. 는 주소와 데이터를 선언하는 대신하기 위해 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 문에 할당을 만드는 post_randomize() 방법을 만들기 변수를 따로 분리하십시오.

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