Рекомендации по коду для нашей среды проверки - по одному классу на файл.
Иногда uvm_object
требуется только 1 другому uvm_component
, поэтому, следуя объектно-ориентированной теории, мы должны использовать вложенные / внутренние классы.
Вложенные классы полностью поддерживаются SystemVerilog. Однако поддерживаются ли они UVM?
Можно ли скомпилировать что-то вроде следующего:
class inception_level_1 extends uvm_test;
`uvm_component_utils(inception_level_1)
function new(string name = "inception_level_1", uvm_component parent = null);
super.new(name, parent);
endfunction
class inception_level_2 extends uvm_object;
int a;
`uvm_object_utils_begin(inception_level_2)
`uvm_field_int(a, UVM_DEFAULT)
`uvm_object_utils_end
function new(string name = "inception_level_2");
super.new(name);
endfunction
endclass
endclass
В настоящее время приведенный выше код дает ошибку компиляции:
** Error: testbench.sv(20): (vlog-2889) Illegal to access non-static method 'uvm_report_warning' outside its class scope.
Пример полного кода здесь: http://www.edaplayground.com/x/3r8