Hi,
I need to specify a addr=32'100 and data=32'd200 using `uvm_do_with in a sequence.
Here I am not randomizing. When I run the test , I am not getting addr 32'd100 and data 32'd200. Is there anything wrong with this ?
class apb_transaction extends uvm_sequence_item;
`uvm_object_utils(apb_transaction)
//typedef for READ/Write transaction type
typedef enum {READ, WRITE} kind_e;
rand bit [31:0] addr; //Address
rand bit [31:0] data; //Data - For write or read response
rand kind_e pwrite; //command type
constraint c1{addr[31:0]>=32'd0; addr[31:0] <32'd256;};
constraint c2{data[31:0]>=32'd0; data[31:0] <32'd256;};
function new (string name = "apb_transaction");
super.new(name);
endfunction
function string convert2string();
return $psprintf("pwrite=%s paddr=%0h data=%0h",pwrite,addr,data);
endfunction
endclass
class apb_sequence_2 extends uvm_sequence#(apb_transaction);
`uvm_object_utils(apb_sequence_2)
function new (string name = "");
super.new(name);
endfunction
task body();
apb_transaction rw_trans_2;
repeat(1)
begin
rw_trans_2=new();
`uvm_do_with(rw_trans_2, {rw_trans_2.addr == 32'd100;
rw_trans_2.data == 32'd200;
rw_trans_2.pwrite == WRITE;
});
end
endtask
endclass
class apb_test_2 extends apb_base_test;
`uvm_component_utils(apb_test_2);
function new(string name = "apb_test_2", uvm_component parent = null);
super.new(name, parent);
endfunction
function void build_phase(uvm_phase phase);
super.build_phase(phase);
endfunction
task run_phase( uvm_phase phase );
apb_sequence_2 apb_seq_2;
apb_seq_2 = apb_sequence_2::type_id::create("apb_seq_2");
phase.raise_objection( this, "Starting apb_sequence_2 in main phase" );
$display("%t Starting sequence apb_seq_2 run_phase",$time);
apb_seq_2.start(env.agt.sqr);
#100ns;
phase.drop_objection( this , "Finished apb_seq_2 in main phase" );
endtask
endclass
JeffD