%i "alu4.sfl"

submod_class alu4 {
   input      a<4>,b<4>,ci ;
   output     sum<4>,co ;
   instrin    add,trans_a ;
   instr_arg  trans_a(a) ;
   instr_arg  add(a,b,ci) ;
   }

module acc4 {
   input      in<4> ;
   output     out<4> ;
   reg        r<4> ;
   instrin    load_acc ;
   instrin    hold_acc ;
   instrin    clear_acc ;
   instrin    add_acc ;
   alu4       alu ;

   instruct load_acc par {
      r := alu.trans_a(in).sum ;
      out = r ;
      }

   instruct hold_acc par {
      out = r ;
      }

   instruct clear_acc par {
      r := 0b0000 ;
      out = r ;
      }

   instruct add_acc par {
      r := alu.add(in,r,0b0).sum ;
      out = r ;
      }
   }