2017-03-10 1 views
0

아래의 내용과 함께 각각 sequence_item.sv와 sequencer.sv라는 두 개의 파일이 있습니다. sequencer.sv를 컴파일 할 수 없습니다. 오류가 있습니다.내 UVM 클래스를 컴파일 할 수 없습니다.

** Error: /afs/asu.edu/users/s/m/u/smukerji/UVM_practice/sequencer.sv(6): (vlog-2730) Undefined variable: 'Packet'. 

아마 단순한 실수입니다. 내 두 클래스는

//Sequence item 
import uvm_pkg::*; 
`include "uvm_macros.svh" 

    class Packet extends uvm_sequence_item; 

     typedef enum bit [1:0] {NO_ERROR, SINGLE_ERROR, DOUBLE_ERROR, MULTIPLE_ERROR} err_type; 

     rand logic [127:0] correct_data_in; 
     rand logic valid_in; 
     logic [136:0] corrupted_data_in; 
     rand logic corrupt_valid_in; 
     rand bit error; 
     rand bit [127:0] err_pos; 
     randc err_type error_type; 
     logic [136:0] corrupt_data; 

     constraint type_of_error   { (error == 0) -> error_type == NO_ERROR; } 

     constraint error_sequence { 
      if (error_type == SINGLE_ERROR)   $countones(err_pos) inside {0,1}; 
      else if (error_type == DOUBLE_ERROR) $countones(err_pos) inside {1,2}; 
      else if (error_type == MULTIPLE_ERROR) $countones(err_pos) inside {2,127}; 
      else err_pos inside {0, 0}; 
         } 


     `uvm_object_utils_begin(Packet) 
      `uvm_field_enum(err_type, error_type, UVM_ALL_ON) 
      `uvm_field_int(correct_data_in, UVM_ALL_ON|UVM_NOPACK) 
      `uvm_field_int(valid_in, UVM_ALL_ON|UVM_NOPACK) 
      `uvm_field_int(corrupted_data_in, UVM_ALL_ON|UVM_NOPACK) 
      `uvm_field_int(corrupt_valid_in, UVM_ALL_ON|UVM_NOPACK) 
      `uvm_field_int(error, UVM_ALL_ON) 
      `uvm_field_int(err_pos, UVM_ALL_ON) 
     `uvm_object_utils_end 

     function new(string name="Packet"); 
      super.new(name); 
     endfunction 

     function logic [136:0] create_corrupt_data; 
      logic [136:0] corrupt_data; 
      corrupt_data = err_pos^correct_data_in; 
      return corrupt_data; 
     endfunction 

     //virtual function void do_pack (uvm_packer packer); 
      //super.do_pack(packer); 
      //`uvm_pack_int(correct_data_in); 
      //`uvm_pack_int(valid_in); 
      //`uvm_pack_int(corrupted_data_in); 
      //`uvm_pack_int(corrupt_valid_in); 
      //packer.pack_field_int(correct_data_in,$bits(correct_data_in)); 
      //packer.pack_field_int(valid_in,$bits(valid_in)); 
      //packer.pack_field_int(corrupted_data_in,$bits(corrupted_data_in)); 
      //packer.pack_field_int(corrupt_valid_in,$bits(corrupt_valid_in)); 
     //endfunction 

     //virtual function void do_unpack (uvm_packer packer); 
       //super.do_unpack(packer); 
       //correct_data_in = packer.unpack_field_int($bits(correct_data_in)); 
      //valid_in = packer.unpack_field_int($bits(valid_in)); 
      //corrupted_data_in = packer.unpack_field_int($bits(corrupted_data_in)); 
      //corrupt_valid_in = packer.unpack_field_int($bits(corrupt_valid_in)); 
      //endfunction 


    endclass 

그리고, 당신은 대부분 별도의 파일에 별도로 두 개의 코드 클래스를 컴파일

//Sequencer 
import uvm_pkg::*; 
`include "uvm_macros.svh" 


typedef uvm_sequencer #(Packet) packet_sequencer; 

답변

3

나의 sequencer.sv있다. 하나의 컴파일 단위로 컴파일 된 코드는 다른 컴파일 단위에서 볼 수 없습니다. 클래스를 패키지로 컴파일해야합니다.

package my_stuff; 
    `include "Packet.svh" 
    `include "packet_sequencer.svh" 
endpackage 
+0

따라서 모든 클래스를 패키지에 class_name.svh로 포함시킨 다음 모든 파일에 패키지를 포함시키고 가져 오는 것이 좋습니다. 또한 저에게는 시퀀서가 클래스가 아닙니다. –

+0

예, 해당 클래스를 사용하는 파일에서 패키지를 가져옵니다. 'typedef'를 패키지를 정의하는 파일 안에 직접 넣을 수 있습니다. 다른 파일에서 그것들을 포함 할 수 있습니다. http://go.mentor.com/package-import-versus-include를 참조하십시오. –

관련 문제