在verilog中向左移位一个数字,只保留高位
我在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
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,我不知道这一点。