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

时间:2015-11-17 21:40:43

标签: verilog hardware hdl register-transfer-level

我在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;

1 个答案:

答案 0 :(得分:5)

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

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

这说从LSB(shiftamount + 8)开始返回下一个MSB(更高)8位。