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

在verilog中向左移位一个数字,只保留高位,verilog,hardware,hdl,register-transfer-level,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; 分配mywire\u移位=(mywire>8; 有没有更干净的方法 也许是这样的: assign {mywire_shifted,8

我在verilog中有以下连接:

wire [15:0] mywire;
wire [7:0] mywire_shifted
wire [4:0] shiftamount;
我想将mywire向左移动一定量,但只保留上面的8位:

assign mywire_shifted = (mywire << shiftamount) >> 8;
分配mywire\u移位=(mywire>8;
有没有更干净的方法

也许是这样的:

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

assign{mywire\u shifted,8'0}=mywire我认为您的第一个解决方案是干净的。但是您也可以这样做

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

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

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

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

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

shiftamount是否更改,或者它是一个固定值?shiftamount在运行时更改值是否更改,或者它是一个固定值?shiftamount在运行时更改值,并且shiftamount可以更改?它在运行时更改当您有
[index1:index2]
时,这两个值都必须是编译时常量(文本和参数的表达式)表示固定的宽度。当您有
[index+:width]
[index-:width]
时,索引可以是运行时表达式,但宽度必须仍然是编译时常量。谢谢Dave,我不知道。shiftamount可以更改吗?当您有
[index1:index2]时,它会在运行时更改
,这两个值都必须是编译时常量(文本和参数的表达式)才能表示固定的宽度。当您有
[index+:width]
[index-:width]
时,索引可以是运行时表达式,但宽度必须仍然是编译时常量。谢谢Dave,我不知道这一点。