J'ai une séquence de lecture de registre qui va quelque chose comme ceci:Comment obtenir les données lues à partir d'un 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;
};
};
Maintenant, j'ai une séquence virtuelle qui fait le vr_ad_sequence ci-dessus:
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?
};
};
Mon objectif principal est de lire la valeur d'un champ de bit de registre spécifique qui est MY_FIELD dans l'exemple ci-dessus. Y at-il un moyen de le faire sans rien modifier dans le READ_REG vr_ad_sequence
d'origine? Si cela ne peut pas être aidé, comment puis-je rendre le READ_REG vr_ad_sequence
renvoyer la valeur lue à l'appelant sample_vseq
?
Merci beaucoup d'avance.
Êtes-vous sûr que votre BFM est mise à jour vos transactions de bus avec les données qu'il lit? Vous devez disposer de l'infrastructure appropriée tout le long de la chaîne vr_ad -> sequence_driver -> BFM. –
@TudorTimi: Oui, après avoir fait la séquence 'READ_REG', le vr_ad fait un' compare_and_update_body() 'qui obtient la bonne valeur de bus, comme je peux le voir dans ce message - veuillez vous référer à la question principale au dessus. – renvill
hi, Le champ reg de la séquence devrait en effet changer par l'action read_reg. Et la valeur à mettre dans le registre est la valeur renvoyée par la méthode vr_ad_execute_op() (la méthode du pilote BFM). Il peut arriver que vr_ad_execute_op renvoie une valeur (0x4, dans votre exemple) et le moniteur, appelant compare_and_update - appels avec une autre donnée (0). Je suggère de définir un point d'arrêt à * .vr_ad_execute_op, et voir la valeur qu'il renvoie. – user3467290