Verilog 算术移位不起作用

Verilog 算术移位不起作用,verilog,Verilog,我尝试使用Verilog算术移位,其中位向右移位,并再次旋转到二进制数的开头。例如,如果我有0110b,则算术旋转2将导致1001b 在Verilog中,这是通过>操作符完成的,但由于某些原因,这不起作用: module arithmeticShift(input [0:3] in, output [0:4] out); assign {out} = in >>> 2; endmodule 我做错了什么?如果我输入0011b,我会得到0000b,而不是1100b 这是

我尝试使用Verilog算术移位,其中位向右移位,并再次旋转到二进制数的开头。例如,如果我有
0110b
,则算术旋转2将导致
1001b

在Verilog中,这是通过
>
操作符完成的,但由于某些原因,这不起作用:

module arithmeticShift(input [0:3] in, output [0:4] out);
    assign {out} = in >>> 2;
endmodule

我做错了什么?如果我输入
0011b
,我会得到
0000b
,而不是
1100b

这是因为算术移位没有环绕

如果将0011向右移动两处,则1将从末端落下:

0011-原件

0001->>>1

0000->>>2

如果您向左移动2个位置,您将得到:

1100


试着用>>来代替,正如Tim的评论所说,你把两班都混在一起了。

除了使用>>之外,你还可以尝试以下方法:

out[2:0] = in[3:1]
out[3] = in[0]
注意:
我在这里发现算术移位错误(输入[0:3]输入,输出[0:4]输出)

你把算术移位和循环移位混淆了。算术移位只保留移位下的值的符号,它不会将移位后的位从另一端循环回来。好的,那么我将不得不做循环移位而不是算术移位。我以为他们是一样的。在Verilog中是否有预先制定的方法来执行此操作?
>
进行逻辑转换。