always @(posedge clk)
begin
{ovf,out} <=
- (((y[12] ? (x ) : 0) +
- (y[11] ? (x >> 1) : 0) +
- (y[10] ? (x >> 2) : 0)) +
- (((y[9] ? (x >> 3) : 0) +
- (y[8] ? (x >> 4) : 0)) +
- ((y[7] ? (x >> 5) : 0) +
- (y[6] ? (x >> 6) : 0))))+
- (((y[5] ? (x >> 7) : 0) +
- (y[4] ? (x >> 8) : 0) +
- (y[3] ? (x >> 9) : 0)) +
- ((y[2] ? (x >> 10): 0) +
- (y[1] ? (x >> 11): 0) +
- (y[0] ? (x >> 12): 0)));
+ (((y[12] ? (x ) : 0) +
+ (y[11] ? (x[12:1]) : 0) +
+ (y[10] ? (x[12:2]) : 0)) +
+ (((y[9] ? (x[12:3]) : 0) +
+ (y[8] ? (x[12:4]) : 0)) +
+ ((y[7] ? (x[12:5]) : 0) +
+ (y[6] ? (x[12:6]) : 0))))+
+ (((y[5] ? (x[12:7]) : 0) +
+ (y[4] ? (x[12:8]) : 0) +
+ (y[3] ? (x[12:9]) : 0)) +
+ ((y[2] ? (x[12:10]): 0) +
+ (y[1] ? (x[12:11]): 0) +
+ (y[0] ? (x[12]): 0)));
sign <= xsign ^ ysign;
end
assign bigsum = r2[13:0] + i2[13:0];
wire shnasto = bigsum[14];
wire shnasto2 = // o shi
+ ((r[13] & i[13]) |
+ ((r[13] ^ i[13]) &
((r[12] & i[12]) |
((r[12] ^ i[12]) &
((r[11] & i[11]) |
((r[ 1] & i[ 1]) |
((r[ 1] ^ i[ 1]) &
(r[ 0] & i[ 0])
- ))))))))))))))))))))))));
- assign bigsum_ovf = shnasto | r2[13] | i2[13];
+ ))))))))))))))))))))))))));
+ assign bigsum_ovf = shnasto;
assign twocdiff = r2 - i2;
assign diff = twocdiff[15] ? -twocdiff : twocdiff;