文章导读
在SystemVerilog中,randomize()函数是随机化测试序列的利器。但是,使用它的时候可要注意了,不然可能就会遇到一些意想不到的问题。今天,我们就来聊聊randomize() with{}的注意事项,让你在使用它的时候更加得心应手。
1. 变量名不能相同
首先,双灯好左右两边的变量名不能相同。如果相同,求解器会认为两边是一样的,导致约束不生效。比如下面这个例子:
class dma_seq extends uvm_sequence #(dma_trans);
bit [39:0] addr;
`uvm_do_with(req, {req.addr == addr;})
endclass : dma_seq2. 约束addr为0x0000_000C的正确写法
假如要约束addr为0x0000_000C,下面的写法是不行的:
addr == 1'hC;
这种情况下addr永远都是0,只去了最低位的1bit。推荐的写法是不指定位宽,直接这样写:
rand_states = (glb_cfg.randomize() with {
glb_cfg == 'hC;
})
3. constraint指定不等於
最后,SystemVerilog中constraint指定不等於的使用方法。这里就不展开了,感兴趣的话可以查阅相关资料。
小结与拓展
以上就是关于SystemVerilog中randomize() with{}的一些注意事项,希望能帮助你解决实际问题。当然,编程的世界博大精深,还有许多值得我们去探索的地方。我是苏承栈,来自极星编程网(www.jxgpc.com),一个追求极致的编程高手。如果你对编程有任何疑问,欢迎来我们的网站交流学习,一起进步!
