Могу ли я получить имя регистра (доступное в regmodel) из строки

У меня есть простая последовательность

 regmodel.REGx.write (...)

Давайте рассмотрим, что у меня есть 8 регистров в regmodel, а именно. REG0, REG1, REG2,....,REG7 Я хочу передать число в качестве теста плюс аргумент, скажем, +NUM=4

Используя $sformat или $psprintf, я могу создать строковую переменную с правильным именем регистра, например.

  if ($value$plusargs ("NUM=%0d", num))
    $display ("Testcase passed %0d num", num);
  else
    num   = 0;
  $sformat (regName, "REG%0d", num);

теперь у меня есть regName, но я не могу использовать следующее:

   regmodel.regName.write (...)

regName имеет тип string, а regmodel не имеет имен регистров regName. Есть ли другой способ добиться этого? Я смотрел на get_name, get_full_name, но в данном случае они не могли помочь.

На данный момент я могу иметь if-else 8 раз или оператор case, однако это было бы очень неудобно для большого количества регистров.


person wisemonkey    schedule 27.01.2014    source источник


Ответы (1)


Вы, конечно, можете найти регистр, используя строку, которая была составлена ​​​​программно. Вам нужно будет использовать uvm_reg_block::get_reg_by_name.

Использование будет выглядеть примерно так:

function void write_reg_by_num(int num, bit[31:0] data);
  string reg_name = $sformatf("REG%0d", num);
  uvm_reg reg = regmodel.get_reg_by_name(reg_name);
  if (reg == null) begin
    // No reg was found... you likely want to flag an error here
  end else begin
    uvm_status_e status;
    reg.write(status, data);
  end
endfunction

Обратите внимание, что результирующий объект uvm_reg относится к типу базового класса, поэтому, если вы хотите получить доступ к отдельным полям, вам нужно использовать методы базового класса для доступа к полям. То есть вам нужно использовать методы на uvm_reg, например. uvm_reg::get_field_by_name

person dwikle    schedule 28.01.2014
comment
Спасибо, это сработало отлично, хотя я пока не создавал отдельную функцию. Теперь, когда я просматриваю документацию для модели регистрации -> Блоки (verificationacademy.com/verification-methodology-reference/uvm/) я нахожу это там :) - person wisemonkey; 28.01.2014