使用 typedef 随机化结构

Randomizing structure with typedefs

我正在尝试随机化具有 typedef 的结构,但它没有随机化。我怎样才能做到这一点?

typedef enum bit[1:0]{A=0, B=1,E=2,F=3}dl_pkt_type;
typedef enum bit[2:0]{G=4,H=5,C=6, D=7}tl_pkt_type;
  
  typedef struct {
    dl_pkt_type dl_pkt;
    tl_pkt_type tl_pkt;
  } pkt_struct;
    
class packet;

 rand pkt_struct p;
 rand dl_pkt_type dl;
 rand tl_pkt_type tl;
  //pre randomization function
  function void pre_randomize();
    $display("Inside pre_randomize");
  endfunction
  
  //post randomization function
  function void post_randomize();
    $display("Inside post_randomize");
    $display("dl: %0s   tl: %0s",p.dl_pkt,p.tl_pkt);
    $display("dl: %0s   tl: %0s",dl,tl);
  endfunction
endclass

module rand_methods;
  initial begin
    packet pkt;
    pkt = new();
    pkt.randomize;
  end
endmodule

这是我得到的输出:

Inside pre_randomize
Inside post_randomize
p.dl_pkt: A   p.tl_pkt: 
dl: B   tl: G

我期待 p.dl_pktp.tl_pkt 被随机化。

您还需要将关键字 rand 添加到您的结构中:

  typedef struct {
    rand dl_pkt_type dl_pkt;
    rand tl_pkt_type tl_pkt;
  } pkt_struct;

https://www.edaplayground.com/x/BsLJ

typedef enum bit[1:0]{A=0, B=1,E=2,F=3}dl_pkt_type;
typedef enum bit[2:0]{G=4,H=5,C=6, D=7}tl_pkt_type;
  
  typedef struct {
    rand dl_pkt_type dl_pkt;
    rand tl_pkt_type tl_pkt;
  } pkt_struct;
    
class packet;

 rand pkt_struct p;
 rand dl_pkt_type dl;
 rand tl_pkt_type tl;
  //pre randomization function
  function void pre_randomize();
    $display("Inside pre_randomize");
  endfunction
  
  //post randomization function
  function void post_randomize();
    $display("Inside post_randomize");
    $display("dl: %0s   tl: %0s",p.dl_pkt.name,p.tl_pkt.name);
    $display("dl: %0s   tl: %0s",dl.name,tl.name);
  endfunction
endclass

module rand_methods;
  initial begin
    packet pkt;
    pkt = new();
    pkt.randomize;
  end
endmodule