Приостановка/перезапуск последовательности

У меня есть дизайн, который требует паузы в трафике данных для перехода в режим пониженного энергопотребления. Есть ли способ приостановить последовательность генерации трафика или драйвер, чтобы это произошло? А затем возобновить последовательность позже?

В настоящее время у меня есть флаг в последовательности, который я установил, чтобы разорвать вечный цикл. Однако это не идеально, потому что последовательность завершается, и мне приходится перезапускать ее.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
588
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете заблокировать (или захватить секвенсор) из виртуальной последовательности, например:

class virtual_seq extends uvm_sequence;

  `uvm_object_utils(virtual_zero_seq)
  `uvm_declare_p_sequencer(virtual_sequencer)

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

  task body;
    // start the normal traffic sequence
    normal_traffic_seq seq;
    seq = serial_fixed_seq::type_id::create("seq");
    if (! seq.randomize() ...
    seq.set_starting_phase(get_starting_phase());
    seq.start(p_sequencer.seqr, this);

    // when you're ready, lock the sequencer
    #12345;
    this.lock(p_sequencer.seqr);   // or grab

    // wait till you're ready to resume
    #12345; 
    // you could start another sequence on the same sequencer if you need to
    // if you do, you must input the reference to this virtual sequence in 
    // the sequence's start method, otherwise that sequence will be locked too
    // eg
    // power_down_seq.start(p_sequencer.seqr, this);
    //                                        ^^^^

    // when you're ready, start normal traffic again
    this.unlock(p_sequencer.seqr);   // or ungrab
  endtask : body

endclass : virtual_zero_seq

Захват — это блокировка с более высоким приоритетом. Если несколько виртуальных последовательностей попытаются заблокировать секвенсор, они получат доступ в том порядке, в котором они его запрашивают. Если несколько виртуальных последовательностей пытаются захватить секвенсор, если он уже заблокирован (или захвачен), эти виртуальные последовательности получат доступ к нему в порядке поступления.

Другие вопросы по теме