2016-05-26 2 views
1

У меня есть один вопрос, связанный с фазами UVM. Поскольку я понял фазы УФМ, например. build_phase, connect_phases, действительны только для uvm_component и являются производными классами.Фазы UVM для объектов транзакций

Это означает, что все классы, которые происходят из uvm_transaction, т.е. uvm_sequence, uvm_sequence_item, не поддерживают эти фазы. И в коде, если мы пишем следующую

class setupSeq extends uvm_sequence #(seqItem); 
     `uvm_object_utils(setupSeq ) 

    function build_phase (uvm_phase phase); 
     req = seqItem::type_id::create("req"); 
    endfunction 

    task body(); 
     start_item(req); 
      … 
     finish_item(req); 
    endtask 
… 

endclass 

Это даст ошибку моделирования, как build_phase никогда не будет называться и задача тела не может распознать «REQ» объект.

Так что мой вопрос: почему фазы не поддерживаются для классов uvm_transaction i.e uvm_sequence?

ответ

4

Потому что они вам не нужны. К тому времени, когда вы начнете строить последовательности, вы уже находитесь в run_phase. Время жизни всех последовательностей находится во время run_phase, поэтому наличие других фаз в последовательности не имеет смысла. Причиной наличия отдельных фаз сборки/подключения/запуска является создание тестового сайта упорядоченным способом, поэтому вы можете устанавливать соединения с одного компонента на другой, не беспокоясь о том, существует ли еще этот компонент.

Поэтому поставьте свою конструкцию req в конструкторе последовательности.

+0

Очень хорошее объяснение! Большое спасибо Дэйву – haykp

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