Randomization

Hi all
I start seqA in my test and i want to addr will be random value. the sequence has member called addr , and seq_item also has member called addr. And I use local::addr in my seqA. In the waveform,I found that addr is always zero.
the seq has been randomized successfully,but addr is still always zero.I don’t know why
Thanks


class seq_item
  rand bit [1:0] addr;
endclass
class seqA 
rand bit [1:0] addr
task 
start_item(req)
  if(!(req.randomize()with{req.addr==local::addr})
    $display("can not be randomized")
finis_item
endtask
endclass

In reply to chy:

It’s 0 because you are randomizing the seq_item object req, not the sequence object seqA. So the addr in seqA remains 0 or whatever value it had before calling req.randomize. It’s a state variable, not a random variable.

In reply to dave_59:

thanks for reply
i am doing the normal driver and sequence handshake.
i created the req in the task body. the name addr in my sequence is same as in item’s. therefore i use local:: when use randomization.
why i should not randomize the seq_item after calling start_item(req) in my sequence?

how should i modify the code?
would you give me some idea?
thanks!!
here is my sudo code



class seq_item
  rand bit [1:0] addr;
endclass

class seqA 
rand bit [1:0] addr;
task 
req=seq_item::type_id::create("req");
start_item(req);
  if(!(req.randomize()with{req.addr==local::addr})
    $display("can not be randomized")
finis_item
endtask
endclass

class test extends uvm_test
task run_phase
 seqA A=seqA::type_id::create("seqA");
 phase.raise_objection;
 A.start("env.agent.sqr");
 phase.drop_objcetion;
endtask

endclass

In reply to chy:

I’m not sure why you need addr in both places. Why can’t you use just req.addr?

In reply to dave_59:
it is because i created two test
test1: direct test
test2: random test
thanks!


class test1  // direct test
task run_phase
 seqA A=seqA::type_id::create("seqA");
 A.addr = 2'b10; 
 phase.raise_objection;
 A.start("env.agent.sqr");
 phase.drop_objcetion;
endtask

endclass

class test2 // random test 
task run_phase
 seqA A=seqA::type_id::create("seqA");
 phase.raise_objection;
 A.start("env.agent.sqr");
 phase.drop_objcetion;
endtask

endclass

In reply to dave_59:

So, is there problem in my code?
I still not find the cause?
please correct me
thanks

In reply to chy:
In random test, you have to randomize the sequence before starting it.

In reply to timag:

Hi, Check this.

class my_test extends uvm_test;
  `uvm_component_utils(my_test)

  my_env m_env;
  rand read_sequence r_sequence;

  function new(string name, uvm_component parent);
    super.new(name,parent);
  endfunction

  function void build_phase(uvm_phase phase);
    m_env=my_env::type_id::create("my_env",this);
    r_sequence=read_sequence::type_id::create("r_sequence");
  endfunction

  task run_phase(uvm_phase phase);
    phase.raise_objection(this);
    void'(r_sequence.randomize());
    r_sequence.start(m_env.m_agent.m_sequencer);
    phase.drop_objection(this);
  endtask

endclass :my_test

class read_sequence extends uvm_sequence #(packet);

  `uvm_object_utils(read_sequence)

  rand bit[11:0]addr;

  function new(string name="");
    super.new(name);
  endfunction


  task body();

  packet my_packet;

  repeat(100) begin
  my_packet=packet::type_id::create("my_packet");
  start_item(my_packet);
  my_packet.randomize()with{my_packet.addr==local::addr;};
  finish_item(my_packet);
  #10;
end
  endtask


endclass


In reply to vardhana:

UVM_INFO @ 0: reporter [RNTST] Running test my_test…
In ENV Build
Received PAcket at Scoreboard addr=xxx, data=xxxxxxxx
in DRIVER
Received PAcket at Scoreboard addr=033, data=4c8ccf6a
Received PAcket at Scoreboard addr=033, data=a4dec398
Received PAcket at Scoreboard addr=033, data=5582abf2
Received PAcket at Scoreboard addr=033, data=5e78887a
Received PAcket at Scoreboard addr=033, data=bfc0592f
Received PAcket at Scoreboard addr=033, data=795a1e12
Received PAcket at Scoreboard addr=033, data=8b45d722
Received PAcket at Scoreboard addr=033, data=f583845f
Received PAcket at Scoreboard addr=033, data=b81325c9
Received PAcket at Scoreboard addr=033, data=d2f4bb61
Received PAcket at Scoreboard addr=033, data=46284526

In reply to vardhana:

In reply to timag:
Hi, Check this.

class my_test extends uvm_test;
`uvm_component_utils(my_test)
my_env m_env;
rand read_sequence r_sequence;
function new(string name, uvm_component parent);
super.new(name,parent);
endfunction
function void build_phase(uvm_phase phase);
m_env=my_env::type_id::create("my_env",this);
r_sequence=read_sequence::type_id::create("r_sequence");
endfunction
task run_phase(uvm_phase phase);
phase.raise_objection(this);
void'(r_sequence.randomize());
r_sequence.start(m_env.m_agent.m_sequencer);
phase.drop_objection(this);
endtask
endclass :my_test

class read_sequence extends uvm_sequence #(packet);
`uvm_object_utils(read_sequence)
rand bit[11:0]addr;
function new(string name="");
super.new(name);
endfunction
task body();
packet my_packet;
repeat(100) begin
my_packet=packet::type_id::create("my_packet");
start_item(my_packet);
my_packet.randomize()with{my_packet.addr==local::addr;};
finish_item(my_packet);
#10;
end
endtask
endclass

class my_test extends uvm_test;
  `uvm_component_utils(my_test)

  my_env m_env;
  rand read_sequence r_sequence;

  function new(string name, uvm_component parent);
    super.new(name,parent);
  endfunction

  function void build_phase(uvm_phase phase);
    m_env=my_env::type_id::create("my_env",this);
    r_sequence=read_sequence::type_id::create("r_sequence");
  endfunction
endclass :my_test

  task run_phase(uvm_phase phase);
    phase.raise_objection(this);
   // void'(r_sequence.randomize());
    r_sequence.addr='hEAD;
    r_sequence.start(m_env.m_agent.m_sequencer);
    phase.drop_objection(this);
  endtask

cket at Scoreboard addr=ead, data=3ee08499
Received PAcket at Scoreboard addr=ead, data=802ade94
Received PAcket at Scoreboard addr=ead, data=19c72cbc
Received PAcket at Scoreboard addr=ead, data=0bb56f11
Received PAcket at Scoreboard addr=ead, data=55f5a594
Received PAcket at Scoreboard addr=ead, data=f887d043
Received PAcket at Scoreboard addr=ead, data=f36bef20
Received PAcket at Scoreboard addr=ead, data=46a2022b
Received PAcket at Scoreboard addr=ead, data=f22a0963
Received PAcket at Scoreboard addr=ead, data=f60404c8
Received PAcket at Scoreboard addr=ead, data=522ff45a
Received PAcket at Scoreboard addr=ead, data=06add81a
Received PAcket at Scoreboard addr=ead, data=137db007
Received PAcket at Scoreboard addr=ead, data=789f7c21
Received PAcket at Scoreboard addr=ead, data=36133c68
Received PAcket at Scoreboard addr=ead, data=4bd8f0dd
Received PAcket at Scoreboard addr=ead, data=b9f0997f
Received PAcket at Scoreboard addr=ead, data=805a364f
Received PAcket at Scoreboard addr=ead, data=9f15c74b
Received PAcket at Scoreboard addr=ead, data=16234c75
Received PAcket at Scoreboard addr=ead, data=e582c5cd