0

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

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

此外,我需要将 A 中的位左旋转某个值 N。我得出以下结果,其中我复制 A 以形成 32 位并将其向左移动 N 位。但现在的问题是我需要再次将其减少到 16 位,但我该怎么做呢?

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

4

1 回答 1

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];
于 2013-08-28T14:30:32.127 回答