使用 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_pkt
和 p.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
我正在尝试随机化具有 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_pkt
和 p.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