Как получить доступ к смещению последовательного регистра с помощью uvm? - PullRequest
0 голосов
/ 11 марта 2019

мне нужно получить доступ к 4 одинаковым регистрам, которые отличаются только по смещению.

макет reg: reg0: 0x10 reg1: 0x14 reg2: 0x18 reg3: 0x20, и я использую автоинструмент для генерации uvm_block, как показано ниже

class dut_reg_block extend uvm_reg_block
REG0 reg0;
REG1 reg1;
REG2 reg2;
REG3 reg3;
endclass;

поддержка У меня есть функция ConfigureDut ( RegNum ), и в ней я хочу получить доступ к регистру в соответствии с RegNum (0 ~ 3), как этого добитьсяИзящно?

В настоящее время код выглядит примерно так:

if (RegNum == 0) reg_block.reg0.read(data);
else if (RegNum == 1) reg_block.reg1.read(data);
else if (RegNum == 2) reg_block.reg2.read(data);
......

, поскольку uvm_block генерируется автоматически, поэтому я тоже не смог использовать массив.Кто-нибудь может предложить лучший способ доступа к этим реестрам?спасибо!

1 Ответ

0 голосов
/ 11 марта 2019

Вы можете использовать метод read_reg_by_name:

reg_block.read_reg_by_name(status, $sformatf("reg%0d", RegNum), data);

Вы используете $sformatf для построения имени регистра в виде строки из RegNum int:

$sformatf("reg%0d", RegNum)

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

...