Приостановка / перезапуск последовательности - PullRequest
0 голосов
/ 17 мая 2019

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

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

1 Ответ

0 голосов
/ 17 мая 2019

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

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

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

...