// **************************************************************************
//
//    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
//
// **************************************************************************
//
// DeltaSigmaModulator is an Analog mixed signal(AMS) system model.
//
// The example has been taken from the following reference:
// @phdthesis{Baue12,
//   key         ={Baue12},
//   author      ={K. Bauer},
//   title       ={A New Modelling Language for Cyber-physical Systems},
//   address     ={Kaiserslautern, Germany},
//   editor      ={K. Schneider and R. Majumdar},
//   month       ={January},
//   school      ={Department of Computer Science, University of Kaiserslautern, Germany},
//   year        ={2012},
//   note        ={PhD},
//   remark      ={rsg}
// }
// ******************************************************************************


macro deltaT = 3.14159/2.0;
module DeltaSigmaModulator(
) {
    hybrid real mySignal,t;
    int out,dac;
    real integral;
    flow{} until (true);
    dac = −1;
    mySignal = 0.0;
    flow{}until(true);
    
    { // analog signal
      flow{
          mySign al <− sin(cont(time));
      } until (false);
    }
    ||
    { // Delta Sigma Modulator
      loop{
          next(integral) = integral + deltaT∗(mySignal − dac);
          flow{} until (true);
          if (integral > 0){
          out = 1;
          } else { 
	      out = −1;
          }
          next(dac) = out;
          t = 0;
          flow{
              drv(t) <− 1.0;
          } until (cont(t) >= deltaT);
      }
    }
}