%i   "inc4.sfl"

submod_class inc4 {
   input   in<4> ;
   output  out<4> ;
   instrin do ;
   instr_arg do(in) ;
   }

module count4 {
   input      in<4> ;
   output     out<4> ;
   tmp        tmp<4> ;
   reg        r<4> ;
   instrin    start;

   inc4       inc0 ;

   stage_name count {
      task    run() ;
      }

   instruct start generate count.run() ;

   stage   count {
      state_name  st0 ;
      state_name  st1 ;
      first_state st0 ;

      state st0 par {
         tmp = in ;
         r := tmp ;
         out = r ;
         goto st1 ;
         }
      state st1 par {
         tmp = inc0.do(r).out ;
         r := tmp ;
         out = r ;
         goto st1 ;
         }
      }
   }