我正在尝试用verilog写一个16位的ALU。 我的输入是16位Ain,Bin和16位输出。
我需要对两个输入进行2的补码加法和减法。因此我想知道我是否可以使用'+'和' - '运算符。 Ain+Bin
,Ain-Bin
另外,我需要对A中的位进行左旋转一定的值N.我出现以下内容,其中我复制A以形成32位并将其向左移位N位。但现在问题是我需要再次将其减少到16位,但我该怎么做呢?
out <=({A,A}<<N);
答案 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];