在 verilog 中左移一个数字,只保留高位

Shift a number left in verilog and only retain upper bits

我在 verilog 中有以下连线:

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

我想将 mywire 左移一些,但只保留高 8 位:

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

有更简洁的方法吗?

也许是这样的:

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

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

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

这表示从 LSB (shiftamount+8) return 下一个 MSB(更高)8 位开始。