跳转到主内容
极星编程网:以代码为星,赴技术山海!

SystemVerilog中的randomize()使用技巧,你真的懂了吗?

文章导读

在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_seq

2. 约束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),一个追求极致的编程高手。如果你对编程有任何疑问,欢迎来我们的网站交流学习,一起进步!

相关文章