我正在尝试验证CPU,并且需要对NOOP指令进行一些限制。基本上,如果将16位指令的高4位设置为4'h0,则在随机化之后需要将其余12位设置为12'h000。我的问题是,当我用rand创建随机指令时,我该如何约束如果高4位为4'h0,则为16'h0000?
我能够找到高4位是否为4'h0,但是当我将低4位强制为12'h000时,就会生成一条新指令。
class cpu_transaction;
static int next_ID;
rand generic_type generic_value;
constraint c_NOOP_all_zero { generic_value[15:12] == 4'h0 -> generic_value[11:0] == 12'h000;}
endclass: cpu_transaction
typedef enum logic[3:0] {
op_noop = 4'b0000,
op_add,
op_sub,
op_nand,
op_xor,
op_shl,
op_shra,
op_cgt,
op_sw,
op_lw,
op_bnq,
op_lui,
op_lli,
op_jlr,
op_j,
op_ret
} logical_operations;
typedef struct packed{
logical_operations opcode;
logic [11:0] address;
} generic_type;
我希望一旦高4位为4'h0,则低12位为12'h000。