%i   "fa_inst.sfl"

submod_class   fa_inst {
   input   a,b,ci ;
   output  sum,co ;
   instrin do ;
   instr_arg do(a,b,ci) ;
   }

module   add4_inst {
   input      a<4>,b<4>,ci ;
   output     sum<4>,co ;
   tmp        ca,cb,cc,cd ;
   tmp        sa,sb,sc,sd ;
   instrin    do ;
   fa_inst    fa0,fa1,fa2,fa3 ;

   instruct do par {
      ca = fa0.do(a<0>,b<0>,ci).co ;
      cb = fa1.do(a<1>,b<1>,ca).co ;
      cc = fa2.do(a<2>,b<2>,cb).co ;
      cd = fa3.do(a<3>,b<3>,cc).co ;
      sa = fa0.do(a<0>,b<0>,ci).sum ;
      sb = fa1.do(a<1>,b<1>,ca).sum ;
      sc = fa2.do(a<2>,b<2>,cb).sum ;
      sd = fa3.do(a<3>,b<3>,cc).sum ;
      co = cd ;
      sum = sd || sc || sb || sa ;
      }
    }