System verilog 特定位的约束

System verilog 特定位的约束,system-verilog,verification,System Verilog,Verification,我试图随机约束32位地址。 有没有办法约束地址的特定位 rand bit [31:0] addr; // last two bits should always be zero req.randomize() with { addr[1:0] == 2'b00; }; 是的,有一些方法可以约束地址的特定位 一种方法是使用随机化,正如您所做的那样 另一种方法是在类中创建约束块。例如: class foo; rand bit [31:0] addr; constraint c1

我试图随机约束32位地址。 有没有办法约束地址的特定位

rand bit [31:0] addr;

// last two bits should always be zero

req.randomize() with { addr[1:0] == 2'b00; };

是的,有一些方法可以约束地址的特定位

一种方法是使用随机化,正如您所做的那样

另一种方法是在
类中创建
约束
块。例如:

class foo;
    rand bit [31:0] addr;
    constraint c1 { addr[1:0] == 2'b00; }
endclass

module tb;

foo req = new();

initial begin
    repeat (5) begin
        req.randomize();
        $display(req.addr, "  ", req.addr[1:0]);
    end
end

endmodule
输出:

3053944240  0
2417184000  0
 629780252  0
 469272576  0
1715295476  0

该代码应该可以工作。您也可以使用下面的
req.randomize();loc_addr={req.addr[31:2],2'b00}
这是一种粗糙的方法,但总是有效的。