2015-05-01 1 views
0

Мне нужно проверить функцию, которая завершится с неизвестным количеством циклов. Я могу определить, что это делается путем чтения некоторых регистров и сравнения их значений с моделью.Получите ответ от последовательности для управления виртуальной последовательностью

У меня есть последовательность, расширенная из uvm_reg_sequence, которая выполняет эту проверку. Мне нужна эта последовательность для запуска в конце моей виртуальной последовательности, и если проверка завершится неудачно, вернитесь к началу виртуальной последовательности, чтобы запустить еще несколько циклов. Я повторю это до тех пор, пока проверка не пройдет (или я не нажму на некоторое время).

Что мне кажется, это способ виртуальной последовательности получить ответ от контрольной последовательности для управления этим циклом. Каков рекомендуемый способ для этого?

ответ

2

Самое простое, что я могу думать о простой check_passed поле внутри вашей последовательности регистров ":

class some_reg_sequence extends uvm_reg_sequence; 
    bit check_passed; 

    task body(); 
    some_reg.read(); 
    if (<pass_condition>) 
     check_passed = 1; 
    endtask 
endclass 

Виртуальная последовательность просто проверить это поле после выполнения последовательности регистров:

class virtual_sequence extends uvm_sequence; 
    task body(); 
    some_reg_sequence reg_sequence; 
    `uvm_create_on(reg_sequence, ...) 

    // do stuff 
    // ... 

    do 
     reg_sequence.start(); 
    while (!reg_sequence.check_passed); 
    endtask 
endclass 

Вы также можете реализовать тайм-аут, обернув do..while внутри fork...join_any вместе с заявлением wait.

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