// sqrt32.v unsigned integer sqrt 32-bits computing unsigned integer 16-bits
//   sqrt(00000000000000000000000000000100) = 0000000000000010   sqrt(4)=2
//   sqrt(00000000000000000000000001000000) = 0000000000001000   sqrt(64)=8

`timescale 1ns/1ns

module Sm(x, y, b, u, d, bo);  // subtractor multiplexor 
  input  x;
  input  y;
  input  b;
  input  u;
  output d;
  output bo;

  wire t011, t111, t010, t001, t100, td;
  wire x_, y_, b_, u_, if_td, if_x;

  // circuits of Sm
  not notx(x_, x);
  not noty(y_, y);
  not notb(b_, b);
  and a011(t011, x_, y,  b );
  and a111(t111, x,  y,  b );
  and a010(t010, x_, y,  b_);
  and a001(t001, x_, y_, b );
  and a100(t100, x,  y_, b_);
  or  #1 or1(bo, t011, t111, t010, t001);
  or  or2(td, t100, t001, t010, t111);
  not notu(u_, u);  // four gate mux
  and atd(if_td, td, u); 
  and ax (if_x,   x, u_);
  or  #1 or3(d, if_td, if_x);
endmodule  // Sm

module Sb(x, y, b, bo);  // subtractor multiplexor stage b 
  input  x;
  input  y;
  input  b;
  output bo;

  wire t011, t111, t010, t001;
  wire x_, y_, b_;

  // circuits of Sb
  not n01(x_, x);
  not n02(y_, y);
  not n03(b_, b);
  and a011(t011, x_, y,  b);
  and a111(t111, x,  y,  b);
  and a010(t010, x_, y,  b_);
  and a001(t001, x_, y_,  b);
  or #1 bor(bo, t011, t111, t010, t001);
endmodule  // Sb

module S1(x, b, u, d, bo);  // subtractor multiplexor stage 1
  input  x;
  input  b;
  input  u;
  output d;
  output bo;

  wire t100, t001, td;
  wire x_, b_, u_, if_td, if_x;

  // circuits of S1
  not not1(x_, x);
  not not2(b_, b);
  and a011(t001, x_,  b);
  and a100(t100, x,   b_);
  buf #1 buf1(bo, t001);
  or or1(td, t100, t001);
  not notu(u_, u);  // four gate mux
  and atd(if_td, td, u); 
  and ax (if_x,   x, u_);
  or  #1 or3(d, if_td, if_x);
endmodule  //  S1

module S0(x, u, d, bo);    // subtractor multiplexor stage 0
  input  x;
  input  u;
  output d;
  output bo;

  wire u_, if_bo, if_x;

  // circuits of S0
  not #1 n1(bo, x);
  not notu(u_, u);  // four gate mux
  and atd(if_bo, bo, u); 
  and ax (if_x,   x, u_);
  or  #1 or3(d, if_bo, if_x);
endmodule  //  S0

module Sn(x, b, bo); // subtractor multiplexor stage n 
  input  x;
  input  b;
  output bo;

  wire x_;

  // circuits of Sn, complemented
  not  n00(x_, x);
  nand #1 n01(bo, x_, b);
endmodule  //  Sn

module S0b(x, bo);   // subtractor multiplexor stage 0b
  input  x;
  output bo;

  // circuits of S0b
  not #1 n0(bo, x);
endmodule  //  S0b

module S1b(x, b, bo);     // subtractor multiplexor stage 1b
  input  x;
  input  b;
  output bo;

  wire x_;

  // circuits of S1b
  not n00(x_, x);
  and #1 n01(bo, x_, b);
endmodule  //  S1b


module sqrt32(P, U);
  input [31:0] P;
  output [15:0] U;

  wire b0000, b0001, b0002, b0003, b0004, b0005, b0006, b0007, b0008,
       b0009, b0010, b0011, b0012, b0013, b0014, b0015, b0016, b0017;  
  wire x0102, x0103, x0104, x0105, x0106, x0107, x0108, x0109, x0110,
       x0111, x0112, x0113, x0114, x0115, x0116, x0117;  
  wire b0102, b0103, b0104, b0105, b0106, b0107, b0108, b0109, b0110,
       b0111, b0112, b0113, b0114, b0115, b0116, b0117, b0118;
  wire x0204, x0205, x0206, x0207, x0208, x0209, x0210, x0211, x0212,
       x0213, x0214, x0215, x0216, x0217, x0218;  
  wire b0204, b0205, b0206, b0207, b0208, b0209, b0210, b0211, b0212,
       b0213, b0214, b0215, b0216, b0217, b0218, b0219;  
  wire x0306, x0307, x0308, x0309, x0310, x0311, x0312, x0313, x0314,
       x0315, x0316, x0317, x0318, x0319;  
  wire b0306, b0307, b0308, b0309, b0310, b0311, b0312, b0313, b0314,
       b0315, b0316, b0317, b0318, b0319, b0320;  
  wire x0408, x0409, x0410, x0411, x0412, x0413, x0414, x0415, x0416,
       x0417, x0418, x0419, x0420;  
  wire b0408, b0409, b0410, b0411, b0412, b0413, b0414, b0415, b0416,
       b0417, b0418, b0419, b0420, b0421;  
  wire x0510, x0511, x0512, x0513, x0514, x0515, x0516, x0517, x0518,
       x0519, x0520, x0521;  
  wire b0510, b0511, b0512, b0513, b0514, b0515, b0516, b0517, b0518,
       b0519, b0520, b0521, b0522;  
  wire x0612, x0613, x0614, x0615, x0616, x0617, x0618, x0619, x0620,
       x0621, x0622;  
  wire b0612, b0613, b0614, b0615, b0616, b0617, b0618, b0619, b0620,
       b0621, b0622, b0623;  
  wire x0714, x0715, x0716, x0717, x0718, x0719, x0720, x0721, x0722,
       x0723;  
  wire b0714, b0715, b0716, b0717, b0718, b0719, b0720, b0721, b0722,
       b0723, b0724;  
  wire x0816, x0817, x0818, x0819, x0820, x0821, x0822, x0823, x0824;  
  wire b0816, b0817, b0818, b0819, b0820, b0821, b0822, b0823, b0824,
       b0825;  
  wire x0918, x0919, x0920, x0921, x0922, x0923, x0924, x0925;  
  wire b0918, b0919, b0920, b0921, b0922, b0923, b0924, b0925, b0926;  
  wire x1020, x1021, x1022, x1023, x1024, x1025, x1026;  
  wire b1020, b1021, b1022, b1023, b1024, b1025, b1026, b1027;  
  wire x1122, x1123, x1124, x1125, x1126, x1127;  
  wire b1122, b1123, b1124, b1125, b1126, b1127, b1128;  
  wire x1224, x1225, x1226, x1227, x1228;  
  wire b1224, b1225, b1226, b1227, b1228, b1229;  
  wire x1326, x1327, x1328, x1329;  
  wire b1326, b1327, b1328, b1329, b1330;  
  wire x1428, x1429, x1430;  
  wire b1428, b1429, b1430, b1431;  
  wire x1530, x1531;  
  wire b1530, b1531, bxx;  

  //                              x      y      b      u      d      bo
  S0 s1530(P[30],               b1531, x1530, b1530);
  S1 s1531(P[31],        b1530, b1531, x1531, bxx );
  not n1(b1531, bxx);

  S0 s1428(P[28],               b1431, x1428, b1428);
  S1 s1429(P[29],        b1428, b1431, x1429, b1429);
  Sm s1430(x1530, b1531, b1429, b1431, x1430, b1430);
  Sn s1431(x1531,        b1430,               b1431);
  
  S0 s1326(P[26],               b1330, x1326, b1326);
  S1 s1327(P[27],        b1326, b1330, x1327, b1327);
  Sm s1328(x1428, b1431, b1327, b1330, x1328, b1328);
  Sm s1329(x1429, b1531, b1328, b1330, x1329, b1329);
  Sn s1330(x1430,        b1329,               b1330);

  S0 s1224(P[24],               b1229, x1224, b1224);
  S1 s1225(P[25],        b1224, b1229, x1225, b1225);
  Sm s1226(x1326, b1330, b1225, b1229, x1226, b1226);
  Sm s1227(x1327, b1431, b1226, b1229, x1227, b1227);
  Sm s1228(x1328, b1531, b1227, b1229, x1228, b1228);
  Sn s1229(x1329,        b1228,               b1229);

  S0 s1122(P[22],               b1128, x1122, b1122);
  S1 s1123(P[23],        b1122, b1128, x1123, b1123);
  Sm s1124(x1224, b1229, b1123, b1128, x1124, b1124);
  Sm s1125(x1225, b1330, b1124, b1128, x1125, b1125);
  Sm s1126(x1226, b1431, b1125, b1128, x1126, b1126);
  Sm s1127(x1227, b1531, b1126, b1128, x1127, b1127);
  Sn s1128(x1228,        b1127,               b1128);

  S0 s1020(P[20],               b1027, x1020, b1020);
  S1 s1021(P[21],        b1020, b1027, x1021, b1021);
  Sm s1022(x1122, b1128, b1021, b1027, x1022, b1022);
  Sm s1023(x1123, b1229, b1022, b1027, x1023, b1023);
  Sm s1024(x1124, b1330, b1023, b1027, x1024, b1024);
  Sm s1025(x1125, b1431, b1024, b1027, x1025, b1025);
  Sm s1026(x1126, b1531, b1025, b1027, x1026, b1026);
  Sn s1027(x1127,        b1026,               b1027);

  S0 s0918(P[18],               b0926, x0918, b0918);
  S1 s0919(P[19],        b0918, b0926, x0919, b0919);
  Sm s0920(x1020, b1027, b0919, b0926, x0920, b0920);
  Sm s0921(x1021, b1128, b0920, b0926, x0921, b0921);
  Sm s0922(x1022, b1229, b0921, b0926, x0922, b0922);
  Sm s0923(x1023, b1330, b0922, b0926, x0923, b0923);
  Sm s0924(x1024, b1431, b0923, b0926, x0924, b0924);
  Sm s0925(x1025, b1531, b0924, b0926, x0925, b0925);
  Sn s0926(x1026,        b0925,               b0926);

  S0 s0816(P[16],               b0825, x0816, b0816);
  S1 s0817(P[17],        b0816, b0825, x0817, b0817);
  Sm s0818(x0918, b0926, b0817, b0825, x0818, b0818);
  Sm s0819(x0919, b1027, b0818, b0825, x0819, b0819);
  Sm s0820(x0920, b1128, b0819, b0825, x0820, b0820);
  Sm s0821(x0921, b1229, b0820, b0825, x0821, b0821);
  Sm s0822(x0922, b1330, b0821, b0825, x0822, b0822);
  Sm s0823(x0923, b1431, b0822, b0825, x0823, b0823);
  Sm s0824(x0924, b1531, b0823, b0825, x0824, b0824);
  Sn s0825(x0925,        b0824,               b0825);

  S0 s0714(P[14],               b0724, x0714, b0714);
  S1 s0715(P[15],        b0714, b0724, x0715, b0715);
  Sm s0716(x0816, b0825, b0715, b0724, x0716, b0716);
  Sm s0717(x0817, b0926, b0716, b0724, x0717, b0717);
  Sm s0718(x0818, b1027, b0717, b0724, x0718, b0718);
  Sm s0719(x0819, b1128, b0718, b0724, x0719, b0719);
  Sm s0720(x0820, b1229, b0719, b0724, x0720, b0720);
  Sm s0721(x0821, b1330, b0720, b0724, x0721, b0721);
  Sm s0722(x0822, b1431, b0721, b0724, x0722, b0722);
  Sm s0723(x0823, b1531, b0722, b0724, x0723, b0723);
  Sn s0724(x0824,        b0723,               b0724);
 
  S0 s0612(P[12],               b0623, x0612, b0612);
  S1 s0613(P[13],        b0612, b0623, x0613, b0613);
  Sm s0614(x0714, b0724, b0613, b0623, x0614, b0614);
  Sm s0615(x0715, b0825, b0614, b0623, x0615, b0615);
  Sm s0616(x0716, b0926, b0615, b0623, x0616, b0616);
  Sm s0617(x0717, b1027, b0616, b0623, x0617, b0617);
  Sm s0618(x0718, b1128, b0617, b0623, x0618, b0618);
  Sm s0619(x0719, b1229, b0618, b0623, x0619, b0619);
  Sm s0620(x0720, b1330, b0619, b0623, x0620, b0620);
  Sm s0621(x0721, b1431, b0620, b0623, x0621, b0621);
  Sm s0622(x0722, b1531, b0621, b0623, x0622, b0622);
  Sn s0623(x0723,        b0622,               b0623);
  
  S0 s0510(P[10],               b0522, x0510, b0510);
  S1 s0511(P[11],        b0510, b0522, x0511, b0511);
  Sm s0512(x0612, b0622, b0511, b0522, x0512, b0512);
  Sm s0513(x0613, b0723, b0512, b0522, x0513, b0513);
  Sm s0514(x0614, b0825, b0513, b0522, x0514, b0514);
  Sm s0515(x0615, b0926, b0514, b0522, x0515, b0515);
  Sm s0516(x0616, b1027, b0515, b0522, x0516, b0516);
  Sm s0517(x0617, b1128, b0516, b0522, x0517, b0517);
  Sm s0518(x0618, b1229, b0517, b0522, x0518, b0518);
  Sm s0519(x0619, b1330, b0518, b0522, x0519, b0519);
  Sm s0520(x0620, b1431, b0519, b0522, x0520, b0520);
  Sm s0521(x0621, b1531, b0520, b0522, x0521, b0521);
  Sn s0522(x0622,        b0521,               b0522);

  S0 s0408(P[8],                b0421, x0408, b0408);
  S1 s0409(P[9],         b0408, b0421, x0409, b0409);
  Sm s0410(x0510, b0522, b0409, b0421, x0410, b0410);
  Sm s0411(x0511, b0623, b0410, b0421, x0411, b0411);
  Sm s0412(x0512, b0724, b0411, b0421, x0412, b0412);
  Sm s0413(x0513, b0825, b0412, b0421, x0413, b0413);
  Sm s0414(x0514, b0926, b0413, b0421, x0414, b0414);
  Sm s0415(x0515, b1027, b0414, b0421, x0415, b0415);
  Sm s0416(x0516, b1128, b0415, b0421, x0416, b0416);
  Sm s0417(x0517, b1229, b0416, b0421, x0417, b0417);
  Sm s0418(x0518, b1330, b0417, b0421, x0418, b0418);
  Sm s0419(x0519, b1431, b0418, b0421, x0419, b0419);
  Sm s0420(x0520, b1531, b0419, b0421, x0420, b0420);
  Sn s0421(x0521,        b0420,               b0421);

  S0 s0306(P[6],                b0320, x0306, b0306);
  S1 s0307(P[7],         b0306, b0320, x0307, b0307);
  Sm s0308(x0408, b0421, b0307, b0320, x0308, b0308);
  Sm s0309(x0409, b0522, b0308, b0320, x0309, b0309);
  Sm s0310(x0410, b0623, b0309, b0320, x0310, b0310);
  Sm s0311(x0411, b0724, b0310, b0320, x0311, b0311);
  Sm s0312(x0412, b0825, b0311, b0320, x0312, b0312);
  Sm s0313(x0413, b0926, b0312, b0320, x0313, b0313);
  Sm s0314(x0414, b1027, b0313, b0320, x0314, b0314);
  Sm s0315(x0415, b1128, b0314, b0320, x0315, b0315);
  Sm s0316(x0416, b1229, b0315, b0320, x0316, b0316);
  Sm s0317(x0417, b1330, b0316, b0320, x0317, b0317);
  Sm s0318(x0418, b1431, b0317, b0320, x0318, b0318);
  Sm s0319(x0419, b1531, b0318, b0320, x0319, b0319);
  Sn s0320(x0420,        b0319,               b0320);

  S0 s0204(P[4],                b0219, x0204, b0204);
  S1 s0205(P[5],         b0204, b0219, x0205, b0205);
  Sm s0206(x0306, b0320, b0205, b0219, x0206, b0206);
  Sm s0207(x0307, b0421, b0206, b0219, x0207, b0207);
  Sm s0208(x0308, b0522, b0207, b0219, x0208, b0208);
  Sm s0209(x0309, b0623, b0208, b0219, x0209, b0209);
  Sm s0210(x0310, b0724, b0209, b0219, x0210, b0210);
  Sm s0211(x0311, b0825, b0210, b0219, x0211, b0211);
  Sm s0212(x0312, b0926, b0211, b0219, x0212, b0212);
  Sm s0213(x0313, b1027, b0212, b0219, x0213, b0213);
  Sm s0214(x0314, b1128, b0213, b0219, x0214, b0214);
  Sm s0215(x0315, b1229, b0214, b0219, x0215, b0215);
  Sm s0216(x0316, b1330, b0215, b0219, x0216, b0216);
  Sm s0217(x0317, b1431, b0216, b0219, x0217, b0217);
  Sm s0218(x0318, b1531, b0217, b0219, x0218, b0218);
  Sn s0219(x0319,        b0218,               b0219);

  S0 s0102(P[2],                b0118, x0102, b0102);
  S1 s0103(P[3],         b0102, b0118, x0103, b0103);
  Sm s0104(x0204, b0219, b0103, b0118, x0104, b0104);
  Sm s0105(x0205, b0320, b0104, b0118, x0105, b0105);
  Sm s0106(x0206, b0421, b0105, b0118, x0106, b0106);
  Sm s0107(x0207, b0522, b0106, b0118, x0107, b0107);
  Sm s0108(x0208, b0623, b0107, b0118, x0108, b0108);
  Sm s0109(x0209, b0724, b0108, b0118, x0109, b0109);
  Sm s0110(x0210, b0825, b0109, b0118, x0110, b0110);
  Sm s0111(x0211, b0926, b0110, b0118, x0111, b0111);
  Sm s0112(x0212, b1027, b0111, b0118, x0112, b0112);
  Sm s0113(x0213, b1128, b0112, b0118, x0113, b0113);
  Sm s0114(x0214, b1229, b0113, b0118, x0114, b0114);
  Sm s0115(x0215, b1330, b0114, b0118, x0115, b0115);
  Sm s0116(x0216, b1431, b0115, b0118, x0116, b0116);
  Sm s0117(x0217, b1531, b0116, b0118, x0117, b0117);
  Sn s0118(x0218,        b0117,               b0118);

  S0b s0000(P[0],                              b0000);
  S1b s0001(P[1],         b0000,               b0001);
  Sb s0002(x0102, b0118, b0001,               b0002);
  Sb s0003(x0103, b0219, b0002,               b0003);
  Sb s0004(x0104, b0320, b0003,               b0004);
  Sb s0005(x0105, b0421, b0004,               b0005);
  Sb s0006(x0106, b0522, b0005,               b0006);
  Sb s0007(x0107, b0623, b0006,               b0007);
  Sb s0008(x0108, b0724, b0007,               b0008);
  Sb s0009(x0109, b0825, b0008,               b0009);
  Sb s0010(x0110, b0926, b0009,               b0010);
  Sb s0011(x0111, b1027, b0010,               b0011);
  Sb s0012(x0112, b1128, b0011,               b0012);
  Sb s0013(x0113, b1229, b0012,               b0013);
  Sb s0014(x0114, b1330, b0013,               b0014);
  Sb s0015(x0115, b1431, b0014,               b0015);
  Sb s0016(x0116, b1531, b0015,               b0016);
  Sn s0017(x0117,        b0016,               b0017);

  buf b0 (U[0],  b0017); // set output bits
  buf b1 (U[1],  b0118);
  buf b2 (U[2],  b0219);
  buf b3 (U[3],  b0320);
  buf b4 (U[4],  b0421);
  buf b5 (U[5],  b0522);
  buf b6 (U[6],  b0623);
  buf b7 (U[7],  b0724);
  buf b8 (U[8],  b0825);
  buf b9 (U[9],  b0926);
  buf b10(U[10], b1027);
  buf b11(U[11], b1128);
  buf b12(U[12], b1229);
  buf b13(U[13], b1330);
  buf b14(U[14], b1431);
  buf b15(U[15], b1531);        
endmodule  //  sqrt32


module tsqrt32;  // test driver
  reg [31:0] P;
  wire [15:0] U;
  reg [7:0] temp;
  integer i;
  
  // test of sqrt32
  sqrt32 s1(P, U);    // instantiate module
  initial
    begin  // test cases
      for(i=0; i<256; i=i+1)
        begin
          temp = i;
          P = {temp,temp,temp,temp};
          #257 $display("sqrt( %b )= %b", P, U);
        end
    end
endmodule  //  tsqrt32


[ [ [ 'module',
      'Sm',
      '(',
      [['x'], ['y'], ['b'], ['u'], ['d'], ['bo']],
      ')',
      ';'],
    [ ['input', 'x', ';'],
      ['input', 'y', ';'],
      ['input', 'b', ';'],
      ['input', 'u', ';'],
      ['output', 'd', ';'],
      ['output', 'bo', ';'],
      ['wire', ['t011', 't111', 't010', 't001', 't100', 'td'], ';'],
      ['wire', ['x_', 'y_', 'b_', 'u_', 'if_td', 'if_x'], ';'],
      ['not', ['notx'], '(', [['x_'], ['x']], ')', ';'],
      ['not', ['noty'], '(', [['y_'], ['y']], ')', ';'],
      ['not', ['notb'], '(', [['b_'], ['b']], ')', ';'],
      ['and', ['a011'], '(', [['t011'], ['x_'], ['y'], ['b']], ')', ';'],
      ['and', ['a111'], '(', [['t111'], ['x'], ['y'], ['b']], ')', ';'],
      ['and', ['a010'], '(', [['t010'], ['x_'], ['y'], ['b_']], ')', ';'],
      ['and', ['a001'], '(', [['t001'], ['x_'], ['y_'], ['b']], ')', ';'],
      ['and', ['a100'], '(', [['t100'], ['x'], ['y_'], ['b_']], ')', ';'],
      [ 'or',
        ['#', '1'],
        ['or1'],
        '(',
        [['bo'], ['t011'], ['t111'], ['t010'], ['t001']],
        ')',
        ';'],
      [ 'or',
        ['or2'],
        '(',
        [['td'], ['t100'], ['t001'], ['t010'], ['t111']],
        ')',
        ';'],
      ['not', ['notu'], '(', [['u_'], ['u']], ')', ';'],
      ['and', ['atd'], '(', [['if_td'], ['td'], ['u']], ')', ';'],
      ['and', ['ax'], '(', [['if_x'], ['x'], ['u_']], ')', ';'],
      [ 'or',
        ['#', '1'],
        ['or3'],
        '(',
        [['d'], ['if_td'], ['if_x']],
        ')',
        ';']],
    'endmodule'],
  [ ['module', 'Sb', '(', [['x'], ['y'], ['b'], ['bo']], ')', ';'],
    [ ['input', 'x', ';'],
      ['input', 'y', ';'],
      ['input', 'b', ';'],
      ['output', 'bo', ';'],
      ['wire', ['t011', 't111', 't010', 't001'], ';'],
      ['wire', ['x_', 'y_', 'b_'], ';'],
      ['not', ['n01'], '(', [['x_'], ['x']], ')', ';'],
      ['not', ['n02'], '(', [['y_'], ['y']], ')', ';'],
      ['not', ['n03'], '(', [['b_'], ['b']], ')', ';'],
      ['and', ['a011'], '(', [['t011'], ['x_'], ['y'], ['b']], ')', ';'],
      ['and', ['a111'], '(', [['t111'], ['x'], ['y'], ['b']], ')', ';'],
      ['and', ['a010'], '(', [['t010'], ['x_'], ['y'], ['b_']], ')', ';'],
      ['and', ['a001'], '(', [['t001'], ['x_'], ['y_'], ['b']], ')', ';'],
      [ 'or',
        ['#', '1'],
        ['bor'],
        '(',
        [['bo'], ['t011'], ['t111'], ['t010'], ['t001']],
        ')',
        ';']],
    'endmodule'],
  [ ['module', 'S1', '(', [['x'], ['b'], ['u'], ['d'], ['bo']], ')', ';'],
    [ ['input', 'x', ';'],
      ['input', 'b', ';'],
      ['input', 'u', ';'],
      ['output', 'd', ';'],
      ['output', 'bo', ';'],
      ['wire', ['t100', 't001', 'td'], ';'],
      ['wire', ['x_', 'b_', 'u_', 'if_td', 'if_x'], ';'],
      ['not', ['not1'], '(', [['x_'], ['x']], ')', ';'],
      ['not', ['not2'], '(', [['b_'], ['b']], ')', ';'],
      ['and', ['a011'], '(', [['t001'], ['x_'], ['b']], ')', ';'],
      ['and', ['a100'], '(', [['t100'], ['x'], ['b_']], ')', ';'],
      ['buf', ['#', '1'], ['buf1'], '(', [['bo'], ['t001']], ')', ';'],
      ['or', ['or1'], '(', [['td'], ['t100'], ['t001']], ')', ';'],
      ['not', ['notu'], '(', [['u_'], ['u']], ')', ';'],
      ['and', ['atd'], '(', [['if_td'], ['td'], ['u']], ')', ';'],
      ['and', ['ax'], '(', [['if_x'], ['x'], ['u_']], ')', ';'],
      [ 'or',
        ['#', '1'],
        ['or3'],
        '(',
        [['d'], ['if_td'], ['if_x']],
        ')',
        ';']],
    'endmodule'],
  [ ['module', 'S0', '(', [['x'], ['u'], ['d'], ['bo']], ')', ';'],
    [ ['input', 'x', ';'],
      ['input', 'u', ';'],
      ['output', 'd', ';'],
      ['output', 'bo', ';'],
      ['wire', ['u_', 'if_bo', 'if_x'], ';'],
      ['not', ['#', '1'], ['n1'], '(', [['bo'], ['x']], ')', ';'],
      ['not', ['notu'], '(', [['u_'], ['u']], ')', ';'],
      ['and', ['atd'], '(', [['if_bo'], ['bo'], ['u']], ')', ';'],
      ['and', ['ax'], '(', [['if_x'], ['x'], ['u_']], ')', ';'],
      [ 'or',
        ['#', '1'],
        ['or3'],
        '(',
        [['d'], ['if_bo'], ['if_x']],
        ')',
        ';']],
    'endmodule'],
  [ ['module', 'Sn', '(', [['x'], ['b'], ['bo']], ')', ';'],
    [ ['input', 'x', ';'],
      ['input', 'b', ';'],
      ['output', 'bo', ';'],
      ['wire', ['x_'], ';'],
      ['not', ['n00'], '(', [['x_'], ['x']], ')', ';'],
      ['nand', ['#', '1'], ['n01'], '(', [['bo'], ['x_'], ['b']], ')', ';']],
    'endmodule'],
  [ ['module', 'S0b', '(', [['x'], ['bo']], ')', ';'],
    [ ['input', 'x', ';'],
      ['output', 'bo', ';'],
      ['not', ['#', '1'], ['n0'], '(', [['bo'], ['x']], ')', ';']],
    'endmodule'],
  [ ['module', 'S1b', '(', [['x'], ['b'], ['bo']], ')', ';'],
    [ ['input', 'x', ';'],
      ['input', 'b', ';'],
      ['output', 'bo', ';'],
      ['wire', ['x_'], ';'],
      ['not', ['n00'], '(', [['x_'], ['x']], ')', ';'],
      ['and', ['#', '1'], ['n01'], '(', [['bo'], ['x_'], ['b']], ')', ';']],
    'endmodule'],
  [ ['module', 'sqrt32', '(', [['P'], ['U']], ')', ';'],
    [ ['input', '[', '31', ':', '0', ']', 'P', ';'],
      ['output', '[', '15', ':', '0', ']', 'U', ';'],
      [ 'wire',
        [ 'b0000',
          'b0001',
          'b0002',
          'b0003',
          'b0004',
          'b0005',
          'b0006',
          'b0007',
          'b0008',
          'b0009',
          'b0010',
          'b0011',
          'b0012',
          'b0013',
          'b0014',
          'b0015',
          'b0016',
          'b0017'],
        ';'],
      [ 'wire',
        [ 'x0102',
          'x0103',
          'x0104',
          'x0105',
          'x0106',
          'x0107',
          'x0108',
          'x0109',
          'x0110',
          'x0111',
          'x0112',
          'x0113',
          'x0114',
          'x0115',
          'x0116',
          'x0117'],
        ';'],
      [ 'wire',
        [ 'b0102',
          'b0103',
          'b0104',
          'b0105',
          'b0106',
          'b0107',
          'b0108',
          'b0109',
          'b0110',
          'b0111',
          'b0112',
          'b0113',
          'b0114',
          'b0115',
          'b0116',
          'b0117',
          'b0118'],
        ';'],
      [ 'wire',
        [ 'x0204',
          'x0205',
          'x0206',
          'x0207',
          'x0208',
          'x0209',
          'x0210',
          'x0211',
          'x0212',
          'x0213',
          'x0214',
          'x0215',
          'x0216',
          'x0217',
          'x0218'],
        ';'],
      [ 'wire',
        [ 'b0204',
          'b0205',
          'b0206',
          'b0207',
          'b0208',
          'b0209',
          'b0210',
          'b0211',
          'b0212',
          'b0213',
          'b0214',
          'b0215',
          'b0216',
          'b0217',
          'b0218',
          'b0219'],
        ';'],
      [ 'wire',
        [ 'x0306',
          'x0307',
          'x0308',
          'x0309',
          'x0310',
          'x0311',
          'x0312',
          'x0313',
          'x0314',
          'x0315',
          'x0316',
          'x0317',
          'x0318',
          'x0319'],
        ';'],
      [ 'wire',
        [ 'b0306',
          'b0307',
          'b0308',
          'b0309',
          'b0310',
          'b0311',
          'b0312',
          'b0313',
          'b0314',
          'b0315',
          'b0316',
          'b0317',
          'b0318',
          'b0319',
          'b0320'],
        ';'],
      [ 'wire',
        [ 'x0408',
          'x0409',
          'x0410',
          'x0411',
          'x0412',
          'x0413',
          'x0414',
          'x0415',
          'x0416',
          'x0417',
          'x0418',
          'x0419',
          'x0420'],
        ';'],
      [ 'wire',
        [ 'b0408',
          'b0409',
          'b0410',
          'b0411',
          'b0412',
          'b0413',
          'b0414',
          'b0415',
          'b0416',
          'b0417',
          'b0418',
          'b0419',
          'b0420',
          'b0421'],
        ';'],
      [ 'wire',
        [ 'x0510',
          'x0511',
          'x0512',
          'x0513',
          'x0514',
          'x0515',
          'x0516',
          'x0517',
          'x0518',
          'x0519',
          'x0520',
          'x0521'],
        ';'],
      [ 'wire',
        [ 'b0510',
          'b0511',
          'b0512',
          'b0513',
          'b0514',
          'b0515',
          'b0516',
          'b0517',
          'b0518',
          'b0519',
          'b0520',
          'b0521',
          'b0522'],
        ';'],
      [ 'wire',
        [ 'x0612',
          'x0613',
          'x0614',
          'x0615',
          'x0616',
          'x0617',
          'x0618',
          'x0619',
          'x0620',
          'x0621',
          'x0622'],
        ';'],
      [ 'wire',
        [ 'b0612',
          'b0613',
          'b0614',
          'b0615',
          'b0616',
          'b0617',
          'b0618',
          'b0619',
          'b0620',
          'b0621',
          'b0622',
          'b0623'],
        ';'],
      [ 'wire',
        [ 'x0714',
          'x0715',
          'x0716',
          'x0717',
          'x0718',
          'x0719',
          'x0720',
          'x0721',
          'x0722',
          'x0723'],
        ';'],
      [ 'wire',
        [ 'b0714',
          'b0715',
          'b0716',
          'b0717',
          'b0718',
          'b0719',
          'b0720',
          'b0721',
          'b0722',
          'b0723',
          'b0724'],
        ';'],
      [ 'wire',
        [ 'x0816',
          'x0817',
          'x0818',
          'x0819',
          'x0820',
          'x0821',
          'x0822',
          'x0823',
          'x0824'],
        ';'],
      [ 'wire',
        [ 'b0816',
          'b0817',
          'b0818',
          'b0819',
          'b0820',
          'b0821',
          'b0822',
          'b0823',
          'b0824',
          'b0825'],
        ';'],
      [ 'wire',
        [ 'x0918',
          'x0919',
          'x0920',
          'x0921',
          'x0922',
          'x0923',
          'x0924',
          'x0925'],
        ';'],
      [ 'wire',
        [ 'b0918',
          'b0919',
          'b0920',
          'b0921',
          'b0922',
          'b0923',
          'b0924',
          'b0925',
          'b0926'],
        ';'],
      [ 'wire',
        ['x1020', 'x1021', 'x1022', 'x1023', 'x1024', 'x1025', 'x1026'],
        ';'],
      [ 'wire',
        [ 'b1020',
          'b1021',
          'b1022',
          'b1023',
          'b1024',
          'b1025',
          'b1026',
          'b1027'],
        ';'],
      ['wire', ['x1122', 'x1123', 'x1124', 'x1125', 'x1126', 'x1127'], ';'],
      [ 'wire',
        ['b1122', 'b1123', 'b1124', 'b1125', 'b1126', 'b1127', 'b1128'],
        ';'],
      ['wire', ['x1224', 'x1225', 'x1226', 'x1227', 'x1228'], ';'],
      ['wire', ['b1224', 'b1225', 'b1226', 'b1227', 'b1228', 'b1229'], ';'],
      ['wire', ['x1326', 'x1327', 'x1328', 'x1329'], ';'],
      ['wire', ['b1326', 'b1327', 'b1328', 'b1329', 'b1330'], ';'],
      ['wire', ['x1428', 'x1429', 'x1430'], ';'],
      ['wire', ['b1428', 'b1429', 'b1430', 'b1431'], ';'],
      ['wire', ['x1530', 'x1531'], ';'],
      ['wire', ['b1530', 'b1531', 'bxx'], ';'],
      [ 'S0',
        [ ['s1530'],
          [ '(',
            ['P', '[', '30', ']'],
            ['b1531'],
            ['x1530'],
            ['b1530'],
            ')']],
        ';'],
      [ 'S1',
        [ ['s1531'],
          [ '(',
            ['P', '[', '31', ']'],
            ['b1530'],
            ['b1531'],
            ['x1531'],
            ['bxx'],
            ')']],
        ';'],
      ['not', ['n1'], '(', [['b1531'], ['bxx']], ')', ';'],
      [ 'S0',
        [ ['s1428'],
          [ '(',
            ['P', '[', '28', ']'],
            ['b1431'],
            ['x1428'],
            ['b1428'],
            ')']],
        ';'],
      [ 'S1',
        [ ['s1429'],
          [ '(',
            ['P', '[', '29', ']'],
            ['b1428'],
            ['b1431'],
            ['x1429'],
            ['b1429'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s1430'],
          [ '(',
            ['x1530'],
            ['b1531'],
            ['b1429'],
            ['b1431'],
            ['x1430'],
            ['b1430'],
            ')']],
        ';'],
      ['Sn', [['s1431'], ['(', ['x1531'], ['b1430'], ['b1431'], ')']], ';'],
      [ 'S0',
        [ ['s1326'],
          [ '(',
            ['P', '[', '26', ']'],
            ['b1330'],
            ['x1326'],
            ['b1326'],
            ')']],
        ';'],
      [ 'S1',
        [ ['s1327'],
          [ '(',
            ['P', '[', '27', ']'],
            ['b1326'],
            ['b1330'],
            ['x1327'],
            ['b1327'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s1328'],
          [ '(',
            ['x1428'],
            ['b1431'],
            ['b1327'],
            ['b1330'],
            ['x1328'],
            ['b1328'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s1329'],
          [ '(',
            ['x1429'],
            ['b1531'],
            ['b1328'],
            ['b1330'],
            ['x1329'],
            ['b1329'],
            ')']],
        ';'],
      ['Sn', [['s1330'], ['(', ['x1430'], ['b1329'], ['b1330'], ')']], ';'],
      [ 'S0',
        [ ['s1224'],
          [ '(',
            ['P', '[', '24', ']'],
            ['b1229'],
            ['x1224'],
            ['b1224'],
            ')']],
        ';'],
      [ 'S1',
        [ ['s1225'],
          [ '(',
            ['P', '[', '25', ']'],
            ['b1224'],
            ['b1229'],
            ['x1225'],
            ['b1225'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s1226'],
          [ '(',
            ['x1326'],
            ['b1330'],
            ['b1225'],
            ['b1229'],
            ['x1226'],
            ['b1226'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s1227'],
          [ '(',
            ['x1327'],
            ['b1431'],
            ['b1226'],
            ['b1229'],
            ['x1227'],
            ['b1227'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s1228'],
          [ '(',
            ['x1328'],
            ['b1531'],
            ['b1227'],
            ['b1229'],
            ['x1228'],
            ['b1228'],
            ')']],
        ';'],
      ['Sn', [['s1229'], ['(', ['x1329'], ['b1228'], ['b1229'], ')']], ';'],
      [ 'S0',
        [ ['s1122'],
          [ '(',
            ['P', '[', '22', ']'],
            ['b1128'],
            ['x1122'],
            ['b1122'],
            ')']],
        ';'],
      [ 'S1',
        [ ['s1123'],
          [ '(',
            ['P', '[', '23', ']'],
            ['b1122'],
            ['b1128'],
            ['x1123'],
            ['b1123'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s1124'],
          [ '(',
            ['x1224'],
            ['b1229'],
            ['b1123'],
            ['b1128'],
            ['x1124'],
            ['b1124'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s1125'],
          [ '(',
            ['x1225'],
            ['b1330'],
            ['b1124'],
            ['b1128'],
            ['x1125'],
            ['b1125'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s1126'],
          [ '(',
            ['x1226'],
            ['b1431'],
            ['b1125'],
            ['b1128'],
            ['x1126'],
            ['b1126'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s1127'],
          [ '(',
            ['x1227'],
            ['b1531'],
            ['b1126'],
            ['b1128'],
            ['x1127'],
            ['b1127'],
            ')']],
        ';'],
      ['Sn', [['s1128'], ['(', ['x1228'], ['b1127'], ['b1128'], ')']], ';'],
      [ 'S0',
        [ ['s1020'],
          [ '(',
            ['P', '[', '20', ']'],
            ['b1027'],
            ['x1020'],
            ['b1020'],
            ')']],
        ';'],
      [ 'S1',
        [ ['s1021'],
          [ '(',
            ['P', '[', '21', ']'],
            ['b1020'],
            ['b1027'],
            ['x1021'],
            ['b1021'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s1022'],
          [ '(',
            ['x1122'],
            ['b1128'],
            ['b1021'],
            ['b1027'],
            ['x1022'],
            ['b1022'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s1023'],
          [ '(',
            ['x1123'],
            ['b1229'],
            ['b1022'],
            ['b1027'],
            ['x1023'],
            ['b1023'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s1024'],
          [ '(',
            ['x1124'],
            ['b1330'],
            ['b1023'],
            ['b1027'],
            ['x1024'],
            ['b1024'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s1025'],
          [ '(',
            ['x1125'],
            ['b1431'],
            ['b1024'],
            ['b1027'],
            ['x1025'],
            ['b1025'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s1026'],
          [ '(',
            ['x1126'],
            ['b1531'],
            ['b1025'],
            ['b1027'],
            ['x1026'],
            ['b1026'],
            ')']],
        ';'],
      ['Sn', [['s1027'], ['(', ['x1127'], ['b1026'], ['b1027'], ')']], ';'],
      [ 'S0',
        [ ['s0918'],
          [ '(',
            ['P', '[', '18', ']'],
            ['b0926'],
            ['x0918'],
            ['b0918'],
            ')']],
        ';'],
      [ 'S1',
        [ ['s0919'],
          [ '(',
            ['P', '[', '19', ']'],
            ['b0918'],
            ['b0926'],
            ['x0919'],
            ['b0919'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0920'],
          [ '(',
            ['x1020'],
            ['b1027'],
            ['b0919'],
            ['b0926'],
            ['x0920'],
            ['b0920'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0921'],
          [ '(',
            ['x1021'],
            ['b1128'],
            ['b0920'],
            ['b0926'],
            ['x0921'],
            ['b0921'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0922'],
          [ '(',
            ['x1022'],
            ['b1229'],
            ['b0921'],
            ['b0926'],
            ['x0922'],
            ['b0922'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0923'],
          [ '(',
            ['x1023'],
            ['b1330'],
            ['b0922'],
            ['b0926'],
            ['x0923'],
            ['b0923'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0924'],
          [ '(',
            ['x1024'],
            ['b1431'],
            ['b0923'],
            ['b0926'],
            ['x0924'],
            ['b0924'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0925'],
          [ '(',
            ['x1025'],
            ['b1531'],
            ['b0924'],
            ['b0926'],
            ['x0925'],
            ['b0925'],
            ')']],
        ';'],
      ['Sn', [['s0926'], ['(', ['x1026'], ['b0925'], ['b0926'], ')']], ';'],
      [ 'S0',
        [ ['s0816'],
          [ '(',
            ['P', '[', '16', ']'],
            ['b0825'],
            ['x0816'],
            ['b0816'],
            ')']],
        ';'],
      [ 'S1',
        [ ['s0817'],
          [ '(',
            ['P', '[', '17', ']'],
            ['b0816'],
            ['b0825'],
            ['x0817'],
            ['b0817'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0818'],
          [ '(',
            ['x0918'],
            ['b0926'],
            ['b0817'],
            ['b0825'],
            ['x0818'],
            ['b0818'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0819'],
          [ '(',
            ['x0919'],
            ['b1027'],
            ['b0818'],
            ['b0825'],
            ['x0819'],
            ['b0819'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0820'],
          [ '(',
            ['x0920'],
            ['b1128'],
            ['b0819'],
            ['b0825'],
            ['x0820'],
            ['b0820'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0821'],
          [ '(',
            ['x0921'],
            ['b1229'],
            ['b0820'],
            ['b0825'],
            ['x0821'],
            ['b0821'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0822'],
          [ '(',
            ['x0922'],
            ['b1330'],
            ['b0821'],
            ['b0825'],
            ['x0822'],
            ['b0822'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0823'],
          [ '(',
            ['x0923'],
            ['b1431'],
            ['b0822'],
            ['b0825'],
            ['x0823'],
            ['b0823'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0824'],
          [ '(',
            ['x0924'],
            ['b1531'],
            ['b0823'],
            ['b0825'],
            ['x0824'],
            ['b0824'],
            ')']],
        ';'],
      ['Sn', [['s0825'], ['(', ['x0925'], ['b0824'], ['b0825'], ')']], ';'],
      [ 'S0',
        [ ['s0714'],
          [ '(',
            ['P', '[', '14', ']'],
            ['b0724'],
            ['x0714'],
            ['b0714'],
            ')']],
        ';'],
      [ 'S1',
        [ ['s0715'],
          [ '(',
            ['P', '[', '15', ']'],
            ['b0714'],
            ['b0724'],
            ['x0715'],
            ['b0715'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0716'],
          [ '(',
            ['x0816'],
            ['b0825'],
            ['b0715'],
            ['b0724'],
            ['x0716'],
            ['b0716'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0717'],
          [ '(',
            ['x0817'],
            ['b0926'],
            ['b0716'],
            ['b0724'],
            ['x0717'],
            ['b0717'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0718'],
          [ '(',
            ['x0818'],
            ['b1027'],
            ['b0717'],
            ['b0724'],
            ['x0718'],
            ['b0718'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0719'],
          [ '(',
            ['x0819'],
            ['b1128'],
            ['b0718'],
            ['b0724'],
            ['x0719'],
            ['b0719'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0720'],
          [ '(',
            ['x0820'],
            ['b1229'],
            ['b0719'],
            ['b0724'],
            ['x0720'],
            ['b0720'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0721'],
          [ '(',
            ['x0821'],
            ['b1330'],
            ['b0720'],
            ['b0724'],
            ['x0721'],
            ['b0721'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0722'],
          [ '(',
            ['x0822'],
            ['b1431'],
            ['b0721'],
            ['b0724'],
            ['x0722'],
            ['b0722'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0723'],
          [ '(',
            ['x0823'],
            ['b1531'],
            ['b0722'],
            ['b0724'],
            ['x0723'],
            ['b0723'],
            ')']],
        ';'],
      ['Sn', [['s0724'], ['(', ['x0824'], ['b0723'], ['b0724'], ')']], ';'],
      [ 'S0',
        [ ['s0612'],
          [ '(',
            ['P', '[', '12', ']'],
            ['b0623'],
            ['x0612'],
            ['b0612'],
            ')']],
        ';'],
      [ 'S1',
        [ ['s0613'],
          [ '(',
            ['P', '[', '13', ']'],
            ['b0612'],
            ['b0623'],
            ['x0613'],
            ['b0613'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0614'],
          [ '(',
            ['x0714'],
            ['b0724'],
            ['b0613'],
            ['b0623'],
            ['x0614'],
            ['b0614'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0615'],
          [ '(',
            ['x0715'],
            ['b0825'],
            ['b0614'],
            ['b0623'],
            ['x0615'],
            ['b0615'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0616'],
          [ '(',
            ['x0716'],
            ['b0926'],
            ['b0615'],
            ['b0623'],
            ['x0616'],
            ['b0616'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0617'],
          [ '(',
            ['x0717'],
            ['b1027'],
            ['b0616'],
            ['b0623'],
            ['x0617'],
            ['b0617'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0618'],
          [ '(',
            ['x0718'],
            ['b1128'],
            ['b0617'],
            ['b0623'],
            ['x0618'],
            ['b0618'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0619'],
          [ '(',
            ['x0719'],
            ['b1229'],
            ['b0618'],
            ['b0623'],
            ['x0619'],
            ['b0619'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0620'],
          [ '(',
            ['x0720'],
            ['b1330'],
            ['b0619'],
            ['b0623'],
            ['x0620'],
            ['b0620'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0621'],
          [ '(',
            ['x0721'],
            ['b1431'],
            ['b0620'],
            ['b0623'],
            ['x0621'],
            ['b0621'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0622'],
          [ '(',
            ['x0722'],
            ['b1531'],
            ['b0621'],
            ['b0623'],
            ['x0622'],
            ['b0622'],
            ')']],
        ';'],
      ['Sn', [['s0623'], ['(', ['x0723'], ['b0622'], ['b0623'], ')']], ';'],
      [ 'S0',
        [ ['s0510'],
          [ '(',
            ['P', '[', '10', ']'],
            ['b0522'],
            ['x0510'],
            ['b0510'],
            ')']],
        ';'],
      [ 'S1',
        [ ['s0511'],
          [ '(',
            ['P', '[', '11', ']'],
            ['b0510'],
            ['b0522'],
            ['x0511'],
            ['b0511'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0512'],
          [ '(',
            ['x0612'],
            ['b0622'],
            ['b0511'],
            ['b0522'],
            ['x0512'],
            ['b0512'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0513'],
          [ '(',
            ['x0613'],
            ['b0723'],
            ['b0512'],
            ['b0522'],
            ['x0513'],
            ['b0513'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0514'],
          [ '(',
            ['x0614'],
            ['b0825'],
            ['b0513'],
            ['b0522'],
            ['x0514'],
            ['b0514'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0515'],
          [ '(',
            ['x0615'],
            ['b0926'],
            ['b0514'],
            ['b0522'],
            ['x0515'],
            ['b0515'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0516'],
          [ '(',
            ['x0616'],
            ['b1027'],
            ['b0515'],
            ['b0522'],
            ['x0516'],
            ['b0516'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0517'],
          [ '(',
            ['x0617'],
            ['b1128'],
            ['b0516'],
            ['b0522'],
            ['x0517'],
            ['b0517'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0518'],
          [ '(',
            ['x0618'],
            ['b1229'],
            ['b0517'],
            ['b0522'],
            ['x0518'],
            ['b0518'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0519'],
          [ '(',
            ['x0619'],
            ['b1330'],
            ['b0518'],
            ['b0522'],
            ['x0519'],
            ['b0519'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0520'],
          [ '(',
            ['x0620'],
            ['b1431'],
            ['b0519'],
            ['b0522'],
            ['x0520'],
            ['b0520'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0521'],
          [ '(',
            ['x0621'],
            ['b1531'],
            ['b0520'],
            ['b0522'],
            ['x0521'],
            ['b0521'],
            ')']],
        ';'],
      ['Sn', [['s0522'], ['(', ['x0622'], ['b0521'], ['b0522'], ')']], ';'],
      [ 'S0',
        [ ['s0408'],
          [ '(',
            ['P', '[', '8', ']'],
            ['b0421'],
            ['x0408'],
            ['b0408'],
            ')']],
        ';'],
      [ 'S1',
        [ ['s0409'],
          [ '(',
            ['P', '[', '9', ']'],
            ['b0408'],
            ['b0421'],
            ['x0409'],
            ['b0409'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0410'],
          [ '(',
            ['x0510'],
            ['b0522'],
            ['b0409'],
            ['b0421'],
            ['x0410'],
            ['b0410'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0411'],
          [ '(',
            ['x0511'],
            ['b0623'],
            ['b0410'],
            ['b0421'],
            ['x0411'],
            ['b0411'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0412'],
          [ '(',
            ['x0512'],
            ['b0724'],
            ['b0411'],
            ['b0421'],
            ['x0412'],
            ['b0412'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0413'],
          [ '(',
            ['x0513'],
            ['b0825'],
            ['b0412'],
            ['b0421'],
            ['x0413'],
            ['b0413'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0414'],
          [ '(',
            ['x0514'],
            ['b0926'],
            ['b0413'],
            ['b0421'],
            ['x0414'],
            ['b0414'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0415'],
          [ '(',
            ['x0515'],
            ['b1027'],
            ['b0414'],
            ['b0421'],
            ['x0415'],
            ['b0415'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0416'],
          [ '(',
            ['x0516'],
            ['b1128'],
            ['b0415'],
            ['b0421'],
            ['x0416'],
            ['b0416'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0417'],
          [ '(',
            ['x0517'],
            ['b1229'],
            ['b0416'],
            ['b0421'],
            ['x0417'],
            ['b0417'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0418'],
          [ '(',
            ['x0518'],
            ['b1330'],
            ['b0417'],
            ['b0421'],
            ['x0418'],
            ['b0418'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0419'],
          [ '(',
            ['x0519'],
            ['b1431'],
            ['b0418'],
            ['b0421'],
            ['x0419'],
            ['b0419'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0420'],
          [ '(',
            ['x0520'],
            ['b1531'],
            ['b0419'],
            ['b0421'],
            ['x0420'],
            ['b0420'],
            ')']],
        ';'],
      ['Sn', [['s0421'], ['(', ['x0521'], ['b0420'], ['b0421'], ')']], ';'],
      [ 'S0',
        [ ['s0306'],
          [ '(',
            ['P', '[', '6', ']'],
            ['b0320'],
            ['x0306'],
            ['b0306'],
            ')']],
        ';'],
      [ 'S1',
        [ ['s0307'],
          [ '(',
            ['P', '[', '7', ']'],
            ['b0306'],
            ['b0320'],
            ['x0307'],
            ['b0307'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0308'],
          [ '(',
            ['x0408'],
            ['b0421'],
            ['b0307'],
            ['b0320'],
            ['x0308'],
            ['b0308'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0309'],
          [ '(',
            ['x0409'],
            ['b0522'],
            ['b0308'],
            ['b0320'],
            ['x0309'],
            ['b0309'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0310'],
          [ '(',
            ['x0410'],
            ['b0623'],
            ['b0309'],
            ['b0320'],
            ['x0310'],
            ['b0310'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0311'],
          [ '(',
            ['x0411'],
            ['b0724'],
            ['b0310'],
            ['b0320'],
            ['x0311'],
            ['b0311'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0312'],
          [ '(',
            ['x0412'],
            ['b0825'],
            ['b0311'],
            ['b0320'],
            ['x0312'],
            ['b0312'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0313'],
          [ '(',
            ['x0413'],
            ['b0926'],
            ['b0312'],
            ['b0320'],
            ['x0313'],
            ['b0313'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0314'],
          [ '(',
            ['x0414'],
            ['b1027'],
            ['b0313'],
            ['b0320'],
            ['x0314'],
            ['b0314'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0315'],
          [ '(',
            ['x0415'],
            ['b1128'],
            ['b0314'],
            ['b0320'],
            ['x0315'],
            ['b0315'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0316'],
          [ '(',
            ['x0416'],
            ['b1229'],
            ['b0315'],
            ['b0320'],
            ['x0316'],
            ['b0316'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0317'],
          [ '(',
            ['x0417'],
            ['b1330'],
            ['b0316'],
            ['b0320'],
            ['x0317'],
            ['b0317'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0318'],
          [ '(',
            ['x0418'],
            ['b1431'],
            ['b0317'],
            ['b0320'],
            ['x0318'],
            ['b0318'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0319'],
          [ '(',
            ['x0419'],
            ['b1531'],
            ['b0318'],
            ['b0320'],
            ['x0319'],
            ['b0319'],
            ')']],
        ';'],
      ['Sn', [['s0320'], ['(', ['x0420'], ['b0319'], ['b0320'], ')']], ';'],
      [ 'S0',
        [ ['s0204'],
          [ '(',
            ['P', '[', '4', ']'],
            ['b0219'],
            ['x0204'],
            ['b0204'],
            ')']],
        ';'],
      [ 'S1',
        [ ['s0205'],
          [ '(',
            ['P', '[', '5', ']'],
            ['b0204'],
            ['b0219'],
            ['x0205'],
            ['b0205'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0206'],
          [ '(',
            ['x0306'],
            ['b0320'],
            ['b0205'],
            ['b0219'],
            ['x0206'],
            ['b0206'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0207'],
          [ '(',
            ['x0307'],
            ['b0421'],
            ['b0206'],
            ['b0219'],
            ['x0207'],
            ['b0207'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0208'],
          [ '(',
            ['x0308'],
            ['b0522'],
            ['b0207'],
            ['b0219'],
            ['x0208'],
            ['b0208'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0209'],
          [ '(',
            ['x0309'],
            ['b0623'],
            ['b0208'],
            ['b0219'],
            ['x0209'],
            ['b0209'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0210'],
          [ '(',
            ['x0310'],
            ['b0724'],
            ['b0209'],
            ['b0219'],
            ['x0210'],
            ['b0210'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0211'],
          [ '(',
            ['x0311'],
            ['b0825'],
            ['b0210'],
            ['b0219'],
            ['x0211'],
            ['b0211'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0212'],
          [ '(',
            ['x0312'],
            ['b0926'],
            ['b0211'],
            ['b0219'],
            ['x0212'],
            ['b0212'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0213'],
          [ '(',
            ['x0313'],
            ['b1027'],
            ['b0212'],
            ['b0219'],
            ['x0213'],
            ['b0213'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0214'],
          [ '(',
            ['x0314'],
            ['b1128'],
            ['b0213'],
            ['b0219'],
            ['x0214'],
            ['b0214'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0215'],
          [ '(',
            ['x0315'],
            ['b1229'],
            ['b0214'],
            ['b0219'],
            ['x0215'],
            ['b0215'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0216'],
          [ '(',
            ['x0316'],
            ['b1330'],
            ['b0215'],
            ['b0219'],
            ['x0216'],
            ['b0216'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0217'],
          [ '(',
            ['x0317'],
            ['b1431'],
            ['b0216'],
            ['b0219'],
            ['x0217'],
            ['b0217'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0218'],
          [ '(',
            ['x0318'],
            ['b1531'],
            ['b0217'],
            ['b0219'],
            ['x0218'],
            ['b0218'],
            ')']],
        ';'],
      ['Sn', [['s0219'], ['(', ['x0319'], ['b0218'], ['b0219'], ')']], ';'],
      [ 'S0',
        [ ['s0102'],
          [ '(',
            ['P', '[', '2', ']'],
            ['b0118'],
            ['x0102'],
            ['b0102'],
            ')']],
        ';'],
      [ 'S1',
        [ ['s0103'],
          [ '(',
            ['P', '[', '3', ']'],
            ['b0102'],
            ['b0118'],
            ['x0103'],
            ['b0103'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0104'],
          [ '(',
            ['x0204'],
            ['b0219'],
            ['b0103'],
            ['b0118'],
            ['x0104'],
            ['b0104'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0105'],
          [ '(',
            ['x0205'],
            ['b0320'],
            ['b0104'],
            ['b0118'],
            ['x0105'],
            ['b0105'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0106'],
          [ '(',
            ['x0206'],
            ['b0421'],
            ['b0105'],
            ['b0118'],
            ['x0106'],
            ['b0106'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0107'],
          [ '(',
            ['x0207'],
            ['b0522'],
            ['b0106'],
            ['b0118'],
            ['x0107'],
            ['b0107'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0108'],
          [ '(',
            ['x0208'],
            ['b0623'],
            ['b0107'],
            ['b0118'],
            ['x0108'],
            ['b0108'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0109'],
          [ '(',
            ['x0209'],
            ['b0724'],
            ['b0108'],
            ['b0118'],
            ['x0109'],
            ['b0109'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0110'],
          [ '(',
            ['x0210'],
            ['b0825'],
            ['b0109'],
            ['b0118'],
            ['x0110'],
            ['b0110'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0111'],
          [ '(',
            ['x0211'],
            ['b0926'],
            ['b0110'],
            ['b0118'],
            ['x0111'],
            ['b0111'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0112'],
          [ '(',
            ['x0212'],
            ['b1027'],
            ['b0111'],
            ['b0118'],
            ['x0112'],
            ['b0112'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0113'],
          [ '(',
            ['x0213'],
            ['b1128'],
            ['b0112'],
            ['b0118'],
            ['x0113'],
            ['b0113'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0114'],
          [ '(',
            ['x0214'],
            ['b1229'],
            ['b0113'],
            ['b0118'],
            ['x0114'],
            ['b0114'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0115'],
          [ '(',
            ['x0215'],
            ['b1330'],
            ['b0114'],
            ['b0118'],
            ['x0115'],
            ['b0115'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0116'],
          [ '(',
            ['x0216'],
            ['b1431'],
            ['b0115'],
            ['b0118'],
            ['x0116'],
            ['b0116'],
            ')']],
        ';'],
      [ 'Sm',
        [ ['s0117'],
          [ '(',
            ['x0217'],
            ['b1531'],
            ['b0116'],
            ['b0118'],
            ['x0117'],
            ['b0117'],
            ')']],
        ';'],
      ['Sn', [['s0118'], ['(', ['x0218'], ['b0117'], ['b0118'], ')']], ';'],
      ['S0b', [['s0000'], ['(', ['P', '[', '0', ']'], ['b0000'], ')']], ';'],
      [ 'S1b',
        [['s0001'], ['(', ['P', '[', '1', ']'], ['b0000'], ['b0001'], ')']],
        ';'],
      [ 'Sb',
        [['s0002'], ['(', ['x0102'], ['b0118'], ['b0001'], ['b0002'], ')']],
        ';'],
      [ 'Sb',
        [['s0003'], ['(', ['x0103'], ['b0219'], ['b0002'], ['b0003'], ')']],
        ';'],
      [ 'Sb',
        [['s0004'], ['(', ['x0104'], ['b0320'], ['b0003'], ['b0004'], ')']],
        ';'],
      [ 'Sb',
        [['s0005'], ['(', ['x0105'], ['b0421'], ['b0004'], ['b0005'], ')']],
        ';'],
      [ 'Sb',
        [['s0006'], ['(', ['x0106'], ['b0522'], ['b0005'], ['b0006'], ')']],
        ';'],
      [ 'Sb',
        [['s0007'], ['(', ['x0107'], ['b0623'], ['b0006'], ['b0007'], ')']],
        ';'],
      [ 'Sb',
        [['s0008'], ['(', ['x0108'], ['b0724'], ['b0007'], ['b0008'], ')']],
        ';'],
      [ 'Sb',
        [['s0009'], ['(', ['x0109'], ['b0825'], ['b0008'], ['b0009'], ')']],
        ';'],
      [ 'Sb',
        [['s0010'], ['(', ['x0110'], ['b0926'], ['b0009'], ['b0010'], ')']],
        ';'],
      [ 'Sb',
        [['s0011'], ['(', ['x0111'], ['b1027'], ['b0010'], ['b0011'], ')']],
        ';'],
      [ 'Sb',
        [['s0012'], ['(', ['x0112'], ['b1128'], ['b0011'], ['b0012'], ')']],
        ';'],
      [ 'Sb',
        [['s0013'], ['(', ['x0113'], ['b1229'], ['b0012'], ['b0013'], ')']],
        ';'],
      [ 'Sb',
        [['s0014'], ['(', ['x0114'], ['b1330'], ['b0013'], ['b0014'], ')']],
        ';'],
      [ 'Sb',
        [['s0015'], ['(', ['x0115'], ['b1431'], ['b0014'], ['b0015'], ')']],
        ';'],
      [ 'Sb',
        [['s0016'], ['(', ['x0116'], ['b1531'], ['b0015'], ['b0016'], ')']],
        ';'],
      ['Sn', [['s0017'], ['(', ['x0117'], ['b0016'], ['b0017'], ')']], ';'],
      ['buf', ['b0'], '(', [['U', '[', '0', ']'], ['b0017']], ')', ';'],
      ['buf', ['b1'], '(', [['U', '[', '1', ']'], ['b0118']], ')', ';'],
      ['buf', ['b2'], '(', [['U', '[', '2', ']'], ['b0219']], ')', ';'],
      ['buf', ['b3'], '(', [['U', '[', '3', ']'], ['b0320']], ')', ';'],
      ['buf', ['b4'], '(', [['U', '[', '4', ']'], ['b0421']], ')', ';'],
      ['buf', ['b5'], '(', [['U', '[', '5', ']'], ['b0522']], ')', ';'],
      ['buf', ['b6'], '(', [['U', '[', '6', ']'], ['b0623']], ')', ';'],
      ['buf', ['b7'], '(', [['U', '[', '7', ']'], ['b0724']], ')', ';'],
      ['buf', ['b8'], '(', [['U', '[', '8', ']'], ['b0825']], ')', ';'],
      ['buf', ['b9'], '(', [['U', '[', '9', ']'], ['b0926']], ')', ';'],
      ['buf', ['b10'], '(', [['U', '[', '10', ']'], ['b1027']], ')', ';'],
      ['buf', ['b11'], '(', [['U', '[', '11', ']'], ['b1128']], ')', ';'],
      ['buf', ['b12'], '(', [['U', '[', '12', ']'], ['b1229']], ')', ';'],
      ['buf', ['b13'], '(', [['U', '[', '13', ']'], ['b1330']], ')', ';'],
      ['buf', ['b14'], '(', [['U', '[', '14', ']'], ['b1431']], ')', ';'],
      ['buf', ['b15'], '(', [['U', '[', '15', ']'], ['b1531']], ')', ';']],
    'endmodule'],
  [ ['module', 'tsqrt32', ';'],
    [ ['reg', '[', '31', ':', '0', ']', ['P'], ';'],
      ['wire', '[', '15', ':', '0', ']', ['U'], ';'],
      ['reg', '[', '7', ':', '0', ']', ['temp'], ';'],
      ['integer', ['i'], ';'],
      ['sqrt32', [['s1'], ['(', ['P'], ['U'], ')']], ';'],
      [ 'initial',
        [ 'begin',
          [ [ 'for',
              '(',
              [['i'], '=', '0'],
              ';',
              [['i'], '<', '256'],
              ';',
              [['i'], '=', ['i'], '+', '1'],
              ')',
              [ 'begin',
                [ [[['temp'], '=', ['i']], ';'],
                  [ [ ['P'],
                      '=',
                      [ '{',
                        ['temp'],
                        ['temp'],
                        ['temp'],
                        ['temp'],
                        '}']],
                    ';'],
                  [ ['#', '257'],
                    [ '$display',
                      '(',
                      '"sqrt( %b )= %b"',
                      ['P'],
                      ['U'],
                      ')',
                      ';']]],
                'end']]],
          'end']]],
    'endmodule']]
