将verilog中的数字向左移位,只保留高位



我在verilog中有以下连线:

wire [15:0] mywire;
wire [7:0] mywire_shifted
wire [4:0] shiftamount;

我想把我的线向左移动一些量,但只保留上面的8位:

assign mywire_shifted = (mywire << shiftamount) >> 8;

有更干净的方法吗?

也许是这样的:

assign {mywire_shifted,8'0} = mywire << shiftamount;

我认为您的第一个解决方案是干净的。但你也可以做

assign mywire_shifted = mywire[shiftamount+8 +: 8];

这表示从LSB(移位量+8)开始返回下一个MSB(更高)8位。

最新更新