我正在尝试使用Verilog算术移位,其中位向右移位并再次旋转到二进制数的开头。例如,如果我有0110b
,则算术轮换为2将导致1001b
。
在Verilog中,这是通过>>>
运算符完成的,但由于某种原因,这不起作用:
module arithmeticShift(input [0:3] in, output [0:4] out);
assign {out} = in >>> 2;
endmodule
我做错了什么?如果我输入0011b
,我会0000b
而不是1100b
。
答案 0 :(得分:0)
这是因为算术转换没有回绕。
如果您将0011向右移动两个位置,则1结束时会退出:
0011 - 原创
0001 - >>> 1
0000 - >>> 2
如果你要左转2个位置,你会得到:
1100
尝试使用>>相反,正如蒂姆的评论所说,你把两个班次混在一起。
答案 1 :(得分:0)
除了使用>>你可以试试这个:
out[2:0] = in[3:1]
out[3] = in[0]
注意:强> 我在这里发现了一些错误的arithmeticShift(输入 [0:3] in,输出 [0:4] out);