根据位掩码选择一系列导线

时间:2012-03-09 18:54:22

标签: verilog

我有一条热线,我想用它来选择一系列电线。例如,如果我的选择线是0001,我想选择some_wire[2:0],如果它是0010,我想选择some_wire[5:3],如果它是0100我想要选择some_wire[8:6]等。目前我正在使用一个巨大的case语句,但是如果我想参数化模块,这不会扩展。有没有更简洁的方法呢?

1 个答案:

答案 0 :(得分:4)

可以有效地合成桶式移位器,因此可能值得将任何解决方案与基线进行比较,在此基础上将选择器转换回二进制编码并使用移位。 例如,像:

shift = 0;
for(i=0;i<N;i=i+1)
begin
  if (selector[i])
  begin
     shift = i;
  end
end 

shifted_wire = some_wire >> shift;
output = shifted_wire[2:0];

或者,您可以使用for循环通过以下方式独立计算每个位:

for(i=0;i<N;i=i+1)
begin
   output[i] = | ((some_wire>>i) & selector);
end