Ich muss den Status eines Registers überwachen. Ich habe eine UVM-Sequenz erstellt, um das Register zu lesen und lokal zu speichern. Jetzt in meinem Testcode, muss ich auf diese Register zugreifen. Hier ist ein sudo Code:Verweis auf UVM Sequenz
typedef struct {
int a;
} my_regs;
class my_seq extends uvm_sequence;
// register to uvm db
reg_map map;
my_regs regs;
uvm_status_e status;
task build_phase(uvm_phase phase);
endtask
task run_phase(uvm_phase phase);
map.CORE.reg_a.read(status, regs.a, UVM_BACKDOOR)
endtask
endclass
class test_reg extends uvm_test;
// register to uvm db
my_seq seq;
my_regs regs;
task build_phase(uvm_phase phase);
seq = my_seq::type_id::create("reg_seq", this);
regs = seq.regs;
endtask
task run_phase(uvm_phase phase);
reg_seq.start(null);
// read reg values from seq??????
if(rqgs.a>1)
//do some thing
endtask
endclass
Wie Sie sehen, ich bin ständig Startsequenz so, dass ich keine Updates nicht verpassen. Ich glaube, die Start Aufgabe in Folge erstellt kein neues Objekt , so dass die Werte innerhalb des Objekts zwischen den Startaufrufen konstant bleiben sollte.
Angenommen, dass ich Regs-Werte nicht jedes Mal von Seq lesen, erhalten die Regs der Testklasse keine Updates von Seq. Das bedeutet, dass die regs = seq.regs; erstellt keinen tatsächlichen Verweis auf die seq.regs. Ich möchte wissen, warum das so ist und wie kann ich eine absolute Referenz auf dieses Objekt erstellen? (Damit verschwende ich keine Simulationszyklen beim Lesen und Aktualisieren der Regs-Werte in der Testklasse). Bitte teilen Sie mir auch mit, ob es einen besseren Weg gibt, dies zu tun.
Oh, du habe recht Wie gesagt, es war ein Sudo-Code und im Originalcode habe ich den Körper so implementiert, wie du es beschrieben hast. Danke noch einmal! – maskarih
:) Verstanden. Nur dafür sorgen, dass das alles ist. Bitte schön . –