在 SystemVerilog 中将一个热门位向量转换为整数(无需对数)

问题描述 投票:0回答:2

我有一个位向量(一个热编码,又名,一位且只有一位为 1),它表示另一个向量上的位图。例如,假设这些是我的变量:

logic [3:0] bitmap;
logic [7:0] data_vector[3:0];
assign bitmap = 4'b0010;

我想访问与

data_vector
中断言位相对应的
bitmap
的索引(本例中为 data_vector[1])。 一个明显的方法如下:

logic [7:0] selection;
always_comb begin
   for (integer i = 0; i < 4; i++) begin 
      if (bitmap[i]) begin
         selection = data_vector[i];
      end
   end
end

我想知道是否有更有效的方法来做到这一点。以下情况是不可能的

   selection = {8{bitmap[0]}} & data_vector[0] | ... 
              |{8{bitmap[3]}} & data_vector[3];

因为这只是一个解释问题的小例子。预先感谢:)

bit-manipulation system-verilog bitvector
2个回答
0
投票

你可以做

selection = data_vector[$clog2(bitmap));

如果这需要可综合并且您的综合工具不支持 $clog2,那么您可以自己编写该函数,或者坚持您最初编写的内容。


0
投票

假设您的位图是 256 位,并且您想要生成 8 位的索引。

logic [255:0] bitmap;
logic   [7:0] idx;

always_comb begin
  idx = '0;
  for (int i = 0; i < 256; i++) begin 
    if (bitmap[i]) begin
      idx |= 8'(i);
    end
  end
end
© www.soinside.com 2019 - 2024. All rights reserved.