2016-12-08 5 views
0

У меня есть следующий базовый класс:SystemVerilog - идти по всему члену ребенка от родительского класса

class base_transaction extends uvm_sequence_item(); 

    bit [] rand_bit_list; 


    function int my_randomize(int seed); 
    .... 
    endfunction: my_randomize() 

endclass: base_transaction 

Есть несколько классов, который расширяет класс base_transaction.

Есть ли какая-либо опция systemVrilog/UVM для перехода ко всем дочерним элементам (одному из расширенных классов) из функции my_randomize() класса base_transaction?

+0

Я не уверен, что вы имеете в виду. Вы говорите, что существует множество объектов класса _child_class_, и вы хотите их рандомизировать одним вызовом 'my_randomize'? –

+0

@Matthew Taylor - да. – sara8d

+0

Думаю, вам придется реализовать это самостоятельно. Возможно, вы могли бы реализовать статический член, который является очередью самого класса, а затем каждый раз ссылаться на эту очередь каждый раз, когда вы вызываете 'new'. Возможно, вы могли бы иметь статическую функцию, которая выполняет итерацию по очереди и вызывает метод 'my_randomize' в каждом? Я подозреваю, что это возможно. Вы можете задать этот вопрос с помощью тега _design pattern_. (Если вы чувствуете себя храбрым. Вы знаете, что такое переполнение стека. Вероятно, вы совершите несколько ошибок и получите огонь в огне.) –

ответ

0

Я думаю, что в Systemveilog/UVM нет никаких возможностей делать то, что вы хотите. Но мы можем сделать что-то подобное с помощью следующего кода.

// Add this queue in parent class - base_transaction 
static base_transaction child_list[$]; 

// Add this function in parent class - base_transaction 
function register_child (base_transaction child); 
    base_transaction::child_list.push_back (child); 
endfunction 

// Your extended class 
class new_transaction extends base_transaction; 
    function new(); 
    super.register_child (this); 
    endfunction 

    // Other stuff related to your new class 
endclass 

Итак, теперь вы можете получить доступ ко всем дочерним элементам с base_transaction::child_list очереди.

 Смежные вопросы

  • Нет связанных вопросов^_^