1、原题
2、代码
class packet; bit [3:0] address; rand bit [2:0] command; rand bit [7:0] payload; rand bit parity; function new(bit [3:0] a); //构造函数里的形式变量不要与类变量名字相同 address = a; endfunction constraint c_command{ (address==4'hF)->(command!=3'h2); (address==4'hF)->(command!=3'h5); }; constraint c_payload{ (command==3'h7)->(payload inside {[0:0],[8'h3F+1'b1:8'hFF]}); }; constraint c_parity{ if (((^address)+(^payload)+(^command))%2==0) parity == 1'b0; //利用异或缩减运算符去得到1出现次数是奇是偶 else parity == 1'b1; }; endclass program verisilicon_test(); initial begin packet p; p = new(4'h3); assert(p.randomize()) else $fatal(0,"packet::randomize failed"); $display("p.address=%0h,p.command=%0h,p.payload=%0h,p.parity=%0h", p.address,p.command,p.payload,p.parity); end