У меня есть читать последовательность регистров, что идет что-то вроде этого:Как получить чтения данных из vr_ad_sequence
extend vr_ad_sequence_kind: [READ_REG];
extend READ_REG vr_ad_sequence {
// register to read
reg_kind : vr_ad_reg_kind;
!reg : vr_ad_reg;
// more fields no longer shown here
body() @driver.clock is {
var reg_item : vr_ad_reg; // reg_item gets a value from a
// method that returns the correct
// register instance from the addr_map,
// which I no longer want to show here
reg = new vr_ad_reg with { .kind = reg_kind; };
read_reg { .static_item == reg_item; } reg;
};
};
Теперь у меня есть виртуальная последовательность, которая делает vr_ad_sequence выше:
extend MAIN MAIN_TEST sample_vseq {
!reg_read : READ_REG vr_ad_sequence;
body() @driver.clock is first {
do reg_read keeping {
.driver == driver.reg_driver;
.reg_kind == MY_REGISTER;
};
// how to get the value of MY_REGISTER.MY_FIELD from
// the reg_read sequence above?
};
};
Моя основная цель - прочитать значение определенного битового поля регистра, которое является MY_FIELD в приведенном выше примере. Есть ли способ сделать это без изменения чего-либо в оригинале READ_REG vr_ad_sequence
? Если это не поможет, как мне сделать READ_REG vr_ad_sequence
вернуть значение чтения вызывающему sample_vseq
?
Большое спасибо за внимание.
Вы уверены, что ваш BFM обновляет свои автобусные операции с данными, она читает? Вам необходимо создать необходимую инфраструктуру по цепочке vr_ad -> sequence_driver -> BFM. –
@TudorTimi: Да, фактически после «выполнения последовательности« READ_REG »vr_ad выполняет' compare_and_update_body() ', который получает правильное значение шины, как я вижу из этого сообщения - пожалуйста, обратитесь к основному вопросу выше. – renvill
hi, Поле регистра последовательности, как ожидается, изменится действием read_reg. И значение, которое нужно поместить в регистр, - это значение, возвращаемое методом vr_ad_execute_op() (метод драйвера BFM). Может случиться так, что vr_ad_execute_op возвращает одно значение (0x4, в вашем примере) и монитор, вызывающий compare_and_update - вызовы с другими данными (0). Я предлагаю установить точку прерывания на * .vr_ad_execute_op и увидеть возвращаемое значение. – user3467290