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
。
我需要连接一个寄存器和另一个寄存器的可变长度部分。我有寄存器 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
。