// Dadda-tree multiplier generated for N = 8 (final adder: ripple).
// Scoring baseline only: correct at this N, NOT a parametric or proved entry.
module mul_n #(parameter int N = 8) (
  input  logic [N-1:0]   a, b,
  output logic [2*N-1:0] p
);
  logic pp1;
  logic pp2;
  logic pp3;
  logic pp4;
  logic pp5;
  logic pp6;
  logic pp7;
  logic pp8;
  logic pp9;
  logic pp10;
  logic pp11;
  logic pp12;
  logic pp13;
  logic pp14;
  logic pp15;
  logic pp16;
  logic pp17;
  logic pp18;
  logic pp19;
  logic pp20;
  logic pp21;
  logic pp22;
  logic pp23;
  logic pp24;
  logic pp25;
  logic pp26;
  logic pp27;
  logic pp28;
  logic pp29;
  logic pp30;
  logic pp31;
  logic pp32;
  logic pp33;
  logic pp34;
  logic pp35;
  logic pp36;
  logic pp37;
  logic pp38;
  logic pp39;
  logic pp40;
  logic pp41;
  logic pp42;
  logic pp43;
  logic pp44;
  logic pp45;
  logic pp46;
  logic pp47;
  logic pp48;
  logic pp49;
  logic pp50;
  logic pp51;
  logic pp52;
  logic pp53;
  logic pp54;
  logic pp55;
  logic pp56;
  logic pp57;
  logic pp58;
  logic pp59;
  logic pp60;
  logic pp61;
  logic pp62;
  logic pp63;
  logic pp64;
  logic s65;
  logic c66;
  logic s67;
  logic c68;
  logic s69;
  logic c70;
  logic s71;
  logic c72;
  logic s73;
  logic c74;
  logic s75;
  logic c76;
  logic s77;
  logic c78;
  logic s79;
  logic c80;
  logic s81;
  logic c82;
  logic s83;
  logic c84;
  logic s85;
  logic c86;
  logic s87;
  logic c88;
  logic s89;
  logic c90;
  logic s91;
  logic c92;
  logic s93;
  logic c94;
  logic s95;
  logic c96;
  logic s97;
  logic c98;
  logic s99;
  logic c100;
  logic s101;
  logic c102;
  logic s103;
  logic c104;
  logic s105;
  logic c106;
  logic s107;
  logic c108;
  logic s109;
  logic c110;
  logic s111;
  logic c112;
  logic s113;
  logic c114;
  logic s115;
  logic c116;
  logic s117;
  logic c118;
  logic s119;
  logic c120;
  logic s121;
  logic c122;
  logic s123;
  logic c124;
  logic s125;
  logic c126;
  logic s127;
  logic c128;
  logic s129;
  logic c130;
  logic s131;
  logic c132;
  logic s133;
  logic c134;
  logic s135;
  logic c136;
  logic s137;
  logic c138;
  logic s139;
  logic c140;
  logic s141;
  logic c142;
  logic s143;
  logic c144;
  logic s145;
  logic c146;
  logic s147;
  logic c148;
  logic f149;
  logic fc150;
  logic f151;
  logic fc152;
  logic f153;
  logic fc154;
  logic f155;
  logic fc156;
  logic f157;
  logic fc158;
  logic f159;
  logic fc160;
  logic f161;
  logic fc162;
  logic f163;
  logic fc164;
  logic f165;
  logic fc166;
  logic f167;
  logic fc168;
  logic f169;
  logic fc170;
  logic f171;
  logic fc172;
  logic f173;
  logic fc174;
  logic f175;
  logic fc176;
  logic f177;
  logic fc178;
  logic f179;
  assign pp1 = a[0] & b[0];
  assign pp2 = a[1] & b[0];
  assign pp3 = a[2] & b[0];
  assign pp4 = a[3] & b[0];
  assign pp5 = a[4] & b[0];
  assign pp6 = a[5] & b[0];
  assign pp7 = a[6] & b[0];
  assign pp8 = a[7] & b[0];
  assign pp9 = a[0] & b[1];
  assign pp10 = a[1] & b[1];
  assign pp11 = a[2] & b[1];
  assign pp12 = a[3] & b[1];
  assign pp13 = a[4] & b[1];
  assign pp14 = a[5] & b[1];
  assign pp15 = a[6] & b[1];
  assign pp16 = a[7] & b[1];
  assign pp17 = a[0] & b[2];
  assign pp18 = a[1] & b[2];
  assign pp19 = a[2] & b[2];
  assign pp20 = a[3] & b[2];
  assign pp21 = a[4] & b[2];
  assign pp22 = a[5] & b[2];
  assign pp23 = a[6] & b[2];
  assign pp24 = a[7] & b[2];
  assign pp25 = a[0] & b[3];
  assign pp26 = a[1] & b[3];
  assign pp27 = a[2] & b[3];
  assign pp28 = a[3] & b[3];
  assign pp29 = a[4] & b[3];
  assign pp30 = a[5] & b[3];
  assign pp31 = a[6] & b[3];
  assign pp32 = a[7] & b[3];
  assign pp33 = a[0] & b[4];
  assign pp34 = a[1] & b[4];
  assign pp35 = a[2] & b[4];
  assign pp36 = a[3] & b[4];
  assign pp37 = a[4] & b[4];
  assign pp38 = a[5] & b[4];
  assign pp39 = a[6] & b[4];
  assign pp40 = a[7] & b[4];
  assign pp41 = a[0] & b[5];
  assign pp42 = a[1] & b[5];
  assign pp43 = a[2] & b[5];
  assign pp44 = a[3] & b[5];
  assign pp45 = a[4] & b[5];
  assign pp46 = a[5] & b[5];
  assign pp47 = a[6] & b[5];
  assign pp48 = a[7] & b[5];
  assign pp49 = a[0] & b[6];
  assign pp50 = a[1] & b[6];
  assign pp51 = a[2] & b[6];
  assign pp52 = a[3] & b[6];
  assign pp53 = a[4] & b[6];
  assign pp54 = a[5] & b[6];
  assign pp55 = a[6] & b[6];
  assign pp56 = a[7] & b[6];
  assign pp57 = a[0] & b[7];
  assign pp58 = a[1] & b[7];
  assign pp59 = a[2] & b[7];
  assign pp60 = a[3] & b[7];
  assign pp61 = a[4] & b[7];
  assign pp62 = a[5] & b[7];
  assign pp63 = a[6] & b[7];
  assign pp64 = a[7] & b[7];
  assign s65 = pp7 ^ pp14;
  assign c66 = pp7 & pp14;
  assign s67 = pp8 ^ pp15 ^ pp22;
  assign c68 = (pp8 & pp15) | (pp22 & (pp8 ^ pp15));
  assign s69 = pp29 ^ pp36;
  assign c70 = pp29 & pp36;
  assign s71 = pp16 ^ pp23 ^ pp30;
  assign c72 = (pp16 & pp23) | (pp30 & (pp16 ^ pp23));
  assign s73 = pp37 ^ pp44;
  assign c74 = pp37 & pp44;
  assign s75 = pp24 ^ pp31 ^ pp38;
  assign c76 = (pp24 & pp31) | (pp38 & (pp24 ^ pp31));
  assign s77 = pp5 ^ pp12;
  assign c78 = pp5 & pp12;
  assign s79 = pp6 ^ pp13 ^ pp20;
  assign c80 = (pp6 & pp13) | (pp20 & (pp6 ^ pp13));
  assign s81 = pp27 ^ pp34;
  assign c82 = pp27 & pp34;
  assign s83 = s65 ^ pp21 ^ pp28;
  assign c84 = (s65 & pp21) | (pp28 & (s65 ^ pp21));
  assign s85 = pp35 ^ pp42 ^ pp49;
  assign c86 = (pp35 & pp42) | (pp49 & (pp35 ^ pp42));
  assign s87 = c66 ^ s67 ^ s69;
  assign c88 = (c66 & s67) | (s69 & (c66 ^ s67));
  assign s89 = pp43 ^ pp50 ^ pp57;
  assign c90 = (pp43 & pp50) | (pp57 & (pp43 ^ pp50));
  assign s91 = c68 ^ c70 ^ s71;
  assign c92 = (c68 & c70) | (s71 & (c68 ^ c70));
  assign s93 = s73 ^ pp51 ^ pp58;
  assign c94 = (s73 & pp51) | (pp58 & (s73 ^ pp51));
  assign s95 = c72 ^ c74 ^ s75;
  assign c96 = (c72 & c74) | (s75 & (c72 ^ c74));
  assign s97 = pp45 ^ pp52 ^ pp59;
  assign c98 = (pp45 & pp52) | (pp59 & (pp45 ^ pp52));
  assign s99 = c76 ^ pp32 ^ pp39;
  assign c100 = (c76 & pp32) | (pp39 & (c76 ^ pp32));
  assign s101 = pp46 ^ pp53 ^ pp60;
  assign c102 = (pp46 & pp53) | (pp60 & (pp46 ^ pp53));
  assign s103 = pp40 ^ pp47 ^ pp54;
  assign c104 = (pp40 & pp47) | (pp54 & (pp40 ^ pp47));
  assign s105 = pp4 ^ pp11;
  assign c106 = pp4 & pp11;
  assign s107 = s77 ^ pp19 ^ pp26;
  assign c108 = (s77 & pp19) | (pp26 & (s77 ^ pp19));
  assign s109 = c78 ^ s79 ^ s81;
  assign c110 = (c78 & s79) | (s81 & (c78 ^ s79));
  assign s111 = c80 ^ c82 ^ s83;
  assign c112 = (c80 & c82) | (s83 & (c80 ^ c82));
  assign s113 = c84 ^ c86 ^ s87;
  assign c114 = (c84 & c86) | (s87 & (c84 ^ c86));
  assign s115 = c88 ^ c90 ^ s91;
  assign c116 = (c88 & c90) | (s91 & (c88 ^ c90));
  assign s117 = c92 ^ c94 ^ s95;
  assign c118 = (c92 & c94) | (s95 & (c92 ^ c94));
  assign s119 = c96 ^ c98 ^ s99;
  assign c120 = (c96 & c98) | (s99 & (c96 ^ c98));
  assign s121 = c100 ^ c102 ^ s103;
  assign c122 = (c100 & c102) | (s103 & (c100 ^ c102));
  assign s123 = c104 ^ pp48 ^ pp55;
  assign c124 = (c104 & pp48) | (pp55 & (c104 ^ pp48));
  assign s125 = pp3 ^ pp10;
  assign c126 = pp3 & pp10;
  assign s127 = s105 ^ pp18 ^ pp25;
  assign c128 = (s105 & pp18) | (pp25 & (s105 ^ pp18));
  assign s129 = c106 ^ s107 ^ pp33;
  assign c130 = (c106 & s107) | (pp33 & (c106 ^ s107));
  assign s131 = c108 ^ s109 ^ pp41;
  assign c132 = (c108 & s109) | (pp41 & (c108 ^ s109));
  assign s133 = c110 ^ s111 ^ s85;
  assign c134 = (c110 & s111) | (s85 & (c110 ^ s111));
  assign s135 = c112 ^ s113 ^ s89;
  assign c136 = (c112 & s113) | (s89 & (c112 ^ s113));
  assign s137 = c114 ^ s115 ^ s93;
  assign c138 = (c114 & s115) | (s93 & (c114 ^ s115));
  assign s139 = c116 ^ s117 ^ s97;
  assign c140 = (c116 & s117) | (s97 & (c116 ^ s117));
  assign s141 = c118 ^ s119 ^ s101;
  assign c142 = (c118 & s119) | (s101 & (c118 ^ s119));
  assign s143 = c120 ^ s121 ^ pp61;
  assign c144 = (c120 & s121) | (pp61 & (c120 ^ s121));
  assign s145 = c122 ^ s123 ^ pp62;
  assign c146 = (c122 & s123) | (pp62 & (c122 ^ s123));
  assign s147 = c124 ^ pp56 ^ pp63;
  assign c148 = (c124 & pp56) | (pp63 & (c124 ^ pp56));
  assign f149 = pp1 ^ 1'b0 ^ 1'b0;
  assign p[0] = f149;
  assign fc150 = (pp1 & 1'b0) | (1'b0 & (pp1 ^ 1'b0));
  assign f151 = pp2 ^ pp9 ^ fc150;
  assign p[1] = f151;
  assign fc152 = (pp2 & pp9) | (fc150 & (pp2 ^ pp9));
  assign f153 = s125 ^ pp17 ^ fc152;
  assign p[2] = f153;
  assign fc154 = (s125 & pp17) | (fc152 & (s125 ^ pp17));
  assign f155 = c126 ^ s127 ^ fc154;
  assign p[3] = f155;
  assign fc156 = (c126 & s127) | (fc154 & (c126 ^ s127));
  assign f157 = c128 ^ s129 ^ fc156;
  assign p[4] = f157;
  assign fc158 = (c128 & s129) | (fc156 & (c128 ^ s129));
  assign f159 = c130 ^ s131 ^ fc158;
  assign p[5] = f159;
  assign fc160 = (c130 & s131) | (fc158 & (c130 ^ s131));
  assign f161 = c132 ^ s133 ^ fc160;
  assign p[6] = f161;
  assign fc162 = (c132 & s133) | (fc160 & (c132 ^ s133));
  assign f163 = c134 ^ s135 ^ fc162;
  assign p[7] = f163;
  assign fc164 = (c134 & s135) | (fc162 & (c134 ^ s135));
  assign f165 = c136 ^ s137 ^ fc164;
  assign p[8] = f165;
  assign fc166 = (c136 & s137) | (fc164 & (c136 ^ s137));
  assign f167 = c138 ^ s139 ^ fc166;
  assign p[9] = f167;
  assign fc168 = (c138 & s139) | (fc166 & (c138 ^ s139));
  assign f169 = c140 ^ s141 ^ fc168;
  assign p[10] = f169;
  assign fc170 = (c140 & s141) | (fc168 & (c140 ^ s141));
  assign f171 = c142 ^ s143 ^ fc170;
  assign p[11] = f171;
  assign fc172 = (c142 & s143) | (fc170 & (c142 ^ s143));
  assign f173 = c144 ^ s145 ^ fc172;
  assign p[12] = f173;
  assign fc174 = (c144 & s145) | (fc172 & (c144 ^ s145));
  assign f175 = c146 ^ s147 ^ fc174;
  assign p[13] = f175;
  assign fc176 = (c146 & s147) | (fc174 & (c146 ^ s147));
  assign f177 = c148 ^ pp64 ^ fc176;
  assign p[14] = f177;
  assign fc178 = (c148 & pp64) | (fc176 & (c148 ^ pp64));
  assign f179 = 1'b0 ^ 1'b0 ^ fc178;
  assign p[15] = f179;
endmodule
