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

Ver*_*ian 0 hardware verilog hdl register-transfer-level

我在verilog中有以下电汇:

wire [15:0] mywire;
wire [7:0] mywire_shifted
wire [4:0] shiftamount;
Run Code Online (Sandbox Code Playgroud)

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

assign mywire_shifted = (mywire << shiftamount) >> 8;
Run Code Online (Sandbox Code Playgroud)

有更清洁的方法吗?

也许是这样的:

assign {mywire_shifted,8'0} = mywire << shiftamount;
Run Code Online (Sandbox Code Playgroud)

dav*_*_59 5

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

assign mywire_shifted = mywire[shiftamount+8 +: 8];
Run Code Online (Sandbox Code Playgroud)

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