Как изменить последовательность битов для задержек записи и чтения DUT? - PullRequest
0 голосов
/ 14 мая 2018

У меня есть DUT, где запись занимает 2 такта, а чтение занимает 2 такта, прежде чем это действительно может произойти, я использую regmodel и попытался использовать встроенную последовательность uvm_reg_bit_bash_seq, но кажется, что запись и чтение происходит с задержкой в ​​1 такт, Кто-нибудь может сказать, как эффективно моделировать задержки тактового цикла 2 и проверить это, чтобы позаботились о задержках проверяемого устройства.

Перед лицом следующей ошибки,

Запись 1 в бит № 0 регистра «ral_pgm.DIFF_STAT_CORE1» с начальным значением «h0000000000000000 с результатом» h0000000000000000 вместо «h0000000000000001

1 Ответ

0 голосов
/ 15 мая 2018

Я нашел один способ сделать это, взял существующий uvm_reg_single_bit_bash_seq и изменил, добавив p_sequencer и добавив 2 задержки тактового цикла после вызовов методов записи и чтения в соответствии с задержкой DUT, это помогло мне исправить проблему, а также добавилвызов метода get после записи, чтобы избежать извлечения старого значения после операции чтения.

...
  `uvm_declare_p_sequencer(s_master_sequencer)

         rg.write(status, val, UVM_FRONTDOOR, map, this);
         wait_for_clock(2); // write latency
         rg.read(status, val, UVM_FRONTDOOR, map, this);
         wait_for_clock(2); // read latency
         if (status != UVM_IS_OK) begin
            `uvm_error("mtm_reg_bit_bash_seq", $sformatf("Status was %s when reading register \"%s\" through map \"%s\".",
                                        status.name(), rg.get_full_name(), map.get_full_name()));
         end

         val = rg.get(); // newly added method call (get) to fetch value after read
...

   task wait_for_clock( int m = 1 );
      repeat ( m ) begin
      @(posedge p_sequencer.vif.CLK);
      end
    endtask: wait_for_clock
...
...