// ************************************************************************** //
//                                                                            //
//    eses                   eses                                             //
//   eses                     eses                                            //
//  eses    eseses  esesese    eses   Embedded Systems Group                  //
//  ese    ese  ese ese         ese                                           //
//  ese    eseseses eseseses    ese   Department of Computer Science          //
//  eses   eses          ese   eses                                           //
//   eses   eseses  eseseses  eses    University of Kaiserslautern            //
//    eses                   eses                                             //
//                                                                            //
// ************************************************************************** //

// The following algorithm converts a given natural number zin to its Radix-B //

// representation to base B provided that N digits are sufficient.            //
// ************************************************************************** //

macro B = 4;

macro N = 10;

macro natval(x,m) = sum(i=0..m-1) (x[i] * exp(B,i));

module ToRadixB(nat ?zin,[N]nat{B} x,event !rdy) {
    nat z;
    nat{N+1} i;
    z = zin;
    i = 0;
    while(z!=0) {
        x[i] = z % B;
        next(z) = z / B;
        next(i) = i+1;
        pause;
    }
    emit(rdy);
    assert(zin == natval(x,N));

}

drivenby {
    zin = 25;
    await(rdy);

}
drivenby {
    zin = 15;
    await(rdy);
}