+ wire [`DATAWIDTH:0] sum;
+ wire cin;
+ wire [(`DATAWIDTH-1):0] in2_inverted;
+
+ wire [(`DATAWIDTH-1):0] res;
+ wire isplus;
+ wire eq;
+ wire cout;
+
+ assign isplus = inOp_d[2:0]==2;
+ assign cin = isplus ? 0 : 1;
+ assign in2_inverted = isplus ? in2_d : ~in2_d;
+ assign sum = {in1_d,cin} + {in2_inverted,cin};
+ assign res = sum[`DATAWIDTH:1];
+ assign greater = !res[`DATAWIDTH-1];
+ assign eq = in1_d == in2_d;
+ assign cout = sum[`DATAWIDTH];
+
+ assign out_d_[`DATAWIDTH] =
+ (inOp_d==0) ? 1'b0 :
+ (inOp_d==1) ? 1'b0 :
+ (inOp_d==2) ? cout :
+ (inOp_d==3) ? 1'b0 :
+ (inOp_d==4) ? ~greater :
+ (inOp_d==5) ? greater :
+ (inOp_d==6) ? eq :
+ 0;
+
+ assign out_d_[(`DATAWIDTH-1):0] =
+ (inOp_d==0) ? (in1_d) :
+ (inOp_d==1) ? (in2_d) :
+ (inOp_d==2) ? (res) :
+ (inOp_d==3) ? (res) :
+ (inOp_d==4) ? (greater ? in1_d : in2_d) :
+ (inOp_d==5) ? (greater ? in2_d : in1_d) :
+ (inOp_d==6) ? {{ (`DATAWIDTH-1) {1'b0 }}, eq } :
+ 0;
+