我有一个位数组,比方说(src = 0011010)。此数组的(n = 3)位设置为1。
我想获得一个新的数组,其中有些位仍设置为1(因此,设置为1的位数在0 ... n范围内)。为此,我使用$ urandom:
dest_rnd = $ urandom()&src;
现在,我想创建另一个数组,我们将其称为dest_onehot,其中在src中最初设置为1的位中只有1保持为1,而其余的全为零。然后随机选择保留下来的位。
例如:dest_onehot = 0001000(因此,在最初设置为src的src位中,只有第4位有效,而所有其他位均被复位)。
是否有SystemVerilog方式可以实现这一目标?
谢谢您的帮助!
从一个随机位置开始循环遍历输入向量,直到看到一个1位:
module tb;
bit [7:0] src = 'b0011_0100;
bit [7:0] dst;
initial begin
bit [2:0] a;
a = $random;
while (!src[++a]);
dst[a] = 1;
$display("src=%08b", src);
$display("dst=%08b", dst);
end
endmodule