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