Verilog对2的补语和左旋的问题

时间:2013-08-28 14:19:45

标签: verilog

我正在尝试用verilog写一个16位的ALU。 我的输入是16位Ain,Bin和16位输出。

我需要对两个输入进行2的补码加法和减法。因此我想知道我是否可以使用'+'和' - '运算符。 Ain+BinAin-Bin

另外,我需要对A中的位进行左旋转一定的值N.我出现以下内容,其中我复制A以形成32位并将其向左移位N位。但现在问题是我需要再次将其减少到16位,但我该怎么做呢?

out <=({A,A}<<N);

1 个答案:

答案 0 :(得分:0)

是的,如果您想添加或减去两个数字,可以使用+-运算符。

如果要将结果截断回16位,只需将结果分配给16位有线/寄存器,它将自动丢弃高位,只将低16位分配给out。在某些情况下,这可能会产生lint警告,因此您可能希望首先将结果分配给中间变量,然后执行显式部件选择。

wire [15:0] out;
wire [15:0] A;
wire [31:0] A_rotate;

A_rotate = {A,A} << N;
out = A_rotate[15:0];