// ************************************************************************** //
//                                                                            //
//    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                                             //
//                                                                            //
// ************************************************************************** //
// This module implements an algorithm for evaluation of a radix-B number to  //
// a base B with digits x[0..N-1]. Thus, we have to evaluate the expression   //
// sum(i=0) (x[i]*exp(B,i)) which is the evaluation of a polynom with the     //
// coefficients x[i] at B. Thus, we can evaluate the number in time O(log(N)) //
// using O(N) processors.                                                     //
// ************************************************************************** //

macro N = 8;

module EvalRadixB(nat ?B,[N]nat ?x,nat !y,event !rdy) {
    EvalPolynom(B,x,y,rdy);
}
drivenby {
    B = 2;
    for(i=0..N-1) 
        x[i] = (nat2bv(147,8){i} ? 1 : 0);
    await(rdy);
    assert(y==147);
}