Verilog 中的可变长度寄存器片

Variable length register slices in Verilog

我需要连接一个寄存器和另一个寄存器的可变长度部分。我有寄存器 offset 来计算我需要的可变长度寄存器的位数。

我想做这样的事情:

A <= {B[offset:0], A};

但是,这是一个编译错误。 我可以编写一个多路复用器,为 A 选择不同的分配,用于不同的偏移值:即:

if (offset == 1) 
   A <= {B[1:0], A};
else if (offset == 2)
   A <= {B[2:0], A};

等对于新的 offset 值,这很麻烦、丑陋且不可扩展。有没有更好的主意?

谢谢

使用口罩

A <= { B & (2**(offset+1)-1)}

请注意,在您的示例中,A<= {whatever,A} 将始终只是 A