SystemVerilog中randomize() 的注意事项

1、等式左右两边的变量名不能相同。若果相同,求解器会认为两边一样,导致约束不生效,例如:

class dma_seq extends uvm_sequence #(dma_trans);
 
  bit [39:0]          addr;
 
  `uvm_do_with(req, {req.addr == addr;})
 
endclass : dma_seq

2、假如要约束addr为0x0000_000C,下面的写法是不行的:

addr == 1'hC;

因为位宽不对,这样addr永远只为0,失去了最低位的1bit,应写为:

rand_states = (glb_cfg.randomize() with {
 
  glb_cfg == 'hC;
})

3、SystemVerilog中constraint指定不等于。

class user_mem_mam_policy extends uvm_mem_mam_policy;
  bit [31:0]    offset;
  
  constraint policy_offset_cons{
    start_offset % 8 != 0;
 
  }
 
endclass : uvm_mem_mam_policy

4、SystemVerilog中约束数组。

bit [15:0]    dma_rd_len[];
constraint c_dma_rd_len{
  foreach(dma_rd_len[i]){
    dma_rd_len[i] dist {128:=20, 256:=20, [0:127]:/20, [129:255]:/20};
  }
 
}
 
constraint c_dma_rd_len_sum_con{
  dma_rd_len.size() == 655350;
 
}

5、在task中产生一个随机数,可以做如下约束:

function void pre_randomize();
  std::randomize(sub_payload_num) with {sub_payload_num inside {[1:255]};};
endfunction : pre_randomize

6、在randomize with{}语句中,可以使用if-else,但是if-else语句要用大括号包起来,不能使用begin-end

class uvm_axi_cfg extends svt_axi_system_configuration;
 
  `uvm_object_utils(uvm_axi_cfg)
 
  bit [0:0]                    slow_mode;
 
  function new(string name = "uvm_axi_cfg");
    super.new();
    $value$plusargs("SLOW_MOD=%0d", slow_mode);
 
    slavecfg[0].randomize() with {
      axi_interface_type == AXI3;
      data_width         == 32;
      id_width           == 4;
      addr_width         == 32;
    }
 
    if(slow_mode == 'h1) {
      default_arready == 1'b0;
      default_awready == 1'b0;
      default_wready  == 1'b0;
    }
    else if(slow_mode == 'h0) {
      default_arready == 1'b1;
      default_awready == 1'b1;
      default_wready  == 1'b1;
    }
  endfunction
 
endclass

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值