Я пишу набор моделей регистров, используя класс uvm_reg. Размер отдельного регистра 8-битный. Блок регистров создан, чтобы содержать эти регистры:
class my_reg_block extends uvm_reg_block;
my_byte_reg reg_00;
my_byte_reg reg_01;
my_byte_reg reg_10;
my_byte_reg reg_11;
...
// build()
my_map.add_reg(reg_00, 32'h0000 /*offset*/, ""RW");
my_map.add_reg(reg_01, 32'h0001 /*offset*/, ""RW");
my_map.add_reg(reg_10, 32'h0002 /*offset*/, ""RW");
my_map.add_reg(reg_11, 32'h0003 /*offset*/, ""RW");
...
У меня есть регистровый адаптер, который будет переводить чтение/запись в шинную транзакцию. Итак, я могу сделать это внутри своей последовательности:
reg_00.write(status, 'hff, .parent(this));
Шинная транзакция будет выполнять запись в этот конкретный регистр: reg_00
.
Моя проблема в том, что на шине есть byte_enable
, которые позволяют ей записывать в 4 регистра в режиме двойного слова. Используя существующую модель регистров, описанную выше, можно ли одновременно записывать/читать в 4 регистра? Или мне нужно создать другой набор регистров (с 32-битным размером)? Это будет что-то вроде этого псевдокода:
{reg_11,reg_10,reg_01,reg_00}.write(status, 'hffffffff, .parent(this));
Любое предложение?