System verilog 用typedefs随机化结构
我试图将一个有typedefs的结构随机化,但它并没有随机化。我怎样才能做到这一点System verilog 用typedefs随机化结构,system-verilog,System Verilog,我试图将一个有typedefs的结构随机化,但它并没有随机化。我怎样才能做到这一点 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;
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\u pkt
和p.tl\u pkt
能够随机化。您还需要将关键字rand
添加到您的结构中:
typedef struct {
rand dl_pkt_type dl_pkt;
rand tl_pkt_type tl_pkt;
} pkt_struct;
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