随机化然后约束位

时间:2019-05-04 18:34:01

标签: random system-verilog

我正在尝试验证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。

0 个答案:

没有答案