算术转移不起作用

时间:2014-03-17 01:40:19

标签: verilog

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

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

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

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

2 个答案:

答案 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);