システムのVerilogでアドレスを制約して、そのアドレスが2のべき乗の値になるようにします。例えば、生成されたアドレス(16ビット)Verilogシステムの電源をオフにすると2に等しいアドレスをランダムに割り当てます。
ADDR = 0、2、4、8、16、32 .... 32,768
私のために次の作品であるべきです。しかし、私はそれを行うための他の短くてエレガントな方法を探しています。
class two_power_addr;
rand bit [15:0] addr;
bit [15:0] temp;
constraint c_addr {
addr == temp;
}
endclass
module tb();
two_power_addr c;
initial begin
c=new();
c.temp=0;
c.randomize();
$display("%0d \n", c.addr);
c.temp=16'h2;
for(int i=0; i<10; i++) begin
c.randomize();
c.temp=c.temp<<1;
$display("%0d \n", c.addr);
end
end
endmodule