回复 7# z894811350
我想手写用一个的,但是我不明白要不要考虑原码和补码那些,因为我的数里有负数,还有看到很多很复杂的又要移位什么的,不是一个乘号*就行了吗,我写了一个,这个有什么问题吗module 12X12(clock,dataa,datab,result) input clock; input signed [11:0] dataa,datab;//输入12位有符号整数 output[22:0] result;//23位的输出,1符号位+22位数字 reg [22:0] result; reg [11:0] x1,x2,x3,x4;//x1,x2存放输入变量;x3,x4存放变量的原码 reg x5; //存放输出的符号位 reg[21:0] x6; //22位寄存器,存放22位有效数字相乘结果 reg[22:0] x7; //存放输出数据的原码 always@ (posedge clock) begin x1<=dataa; //寄存器赋值 x2<=datab; x3<=(x1[11]==0)?x1:{1'b1,~x1[10:0]+1'b1}; //判断最高位是否为1,即输入是否为负数,是
就取其补码
x4<=(x2[11]==0)?x2:{1'b1,~x2[10:0]+1'b1};//同上
x5<=x3[11]^x4[11]; //两数符号位异或 x6<=x3[10:0]*x4[10:0]; //11位有效数字相乘 x7<={x5,x6}; //输出的原码,由符号位+有效数字组成 result<=(x7[22]==0)?x7:[1'b1,~x7[21:0]+1'b1];//判断输出是否为负数,是就变为补码 end endmodule |