Professional Documents
Culture Documents
Mirrored value:
Store current known state of hardware registers.
Updated at the end of each read/write .
top_reg_block regmodel;
task body();
uvm_status_e status;
bit[7:0] rdata,rdata_m;//temporary reg for desired and mirror
//initial value
//we are checking default value
rdata = regmodel.temp_reg_inst.get();
rdata_n = regmodel.temp_reg_inst.get_mirrored_value();
`uvm_info("SEQ",$sformatf("Initial value -> Desired value : %0d and Mirrored value :
%0d:,rdata,rdata_m),UVM_NONE);
https://www.edaplayground.com/x/w35V
@shraddha_pawankar
Mirror method Read the register and update/check its mirror value
@shraddha_pawankar
top_reg_block regmodel;
task body();
uvm_status_e status;
bit[7:0] rdata,rdata_m;//temporary reg for desired and mirror
// WRITE METHOD
regmodel.temp_reg_inst.write(status,5'h10);
rdata = regmodel.temp_reg_inst.get();
rdata_n = regmodel.temp_reg_inst.get_mirrored_value();
`uvm_info("SEQ",$sformatf("Initial value -> Desired value : %0d and Mirrored value :
%0d:,rdata,rdata_m),UVM_NONE);
endtask
endclass
Code :
class top_reg_seq extends uvm_sequence;
`uvm_object_utils(top_reg_seq)
top_reg_block regmodel;
task body();
@shraddha_pawankar
uvm_status_e status;
bit[7:0] rdata,rdata_m;//temporary reg for desired and mirror
bit [7:0] dout_t;
regmodel.temp_reg_inst.write(status,5'h05);
rdata = regmodel.temp_reg_inst.get();
rdata_m = regmodel.temp_reg_inst.get_mirrored_value();
regmodel.temp_reg_inst.read(status,dout_t);
rdata_m = regmodel.temp_reg_inst.get_mirrored_value();
`uvm_info("SEQ",$sformatf("Read Tx to DUT -> Des:%0d and Mir : %0d Data
read=%0d",rdata,rdata_m,dout_t),UVM_NONE);
endtask
endclass
--------------------------------------------------------------------------------------------------------------------------
top_reg_block regmodel;
endfunction
task body();
uvm_status_e status;
bit[7:0] rdata,rdata_m;//temporary reg for desired and mirror
bit [7:0] dout_t;
bit [7:0] din_temp;
din_temp = $urandom_range(5,20)
regmodel.temp_reg_inst.write(status,din_temp);
rdata = regmodel.temp_reg_inst.get();
rdata_m = regmodel.temp_reg_inst.get_mirrored_value();
regmodel.temp_reg_inst.read(status,dout_t);
rdata_m = regmodel.temp_reg_inst.get_mirrored_value();
`uvm_info("SEQ",$sformatf("Read Tx to DUT -> Des:%0d and Mir : %0d Data
read=%0d",rdata,rdata_m,dout_t),UVM_NONE);
endtask
endclass
Using randomize
top_reg_block regmodel;
task body();
uvm_status_e status;
bit[7:0] rdata;
for(int i=0;i<10;i++)
begin
regmodel.temp_reg_inst.randomize();
regmodel.temp_reg_inst.write(status,regmodel.temp_reg_inst.temp.value);//write
method:regblock.reg_instance.(single or multiple field).Randomized_value
`uvm_info("SEQ",$sformatf("Randm
value=%0d",regmodel.temp_reg_inst.temp.value),UVM_NONE)
end
endtask
endclass