High-Level Abstraction Modelling for Dynamic Power Management of Embedded Systems

***Archived: This is a past project,  it is not on offer at the moment!***


Project Description:

New consumer embedded products have largely increased their complexity to be able to execute multiple complex real-time applications (e.g. video processing or videogames), while meeting several additional design constraints (e.g. energy consumption or time-to-market). These new generations of embedded systems are too complex to be designed in a custom way and are composed by many complex and power-hungry elements (e.g. heterogeneous memory hierarchies, processor cores, interconnections, etc.). As a result, suitable new frameworks to explore different architectural power management mechanisms considering the whole system are required. For this reason, power management mechanisms need to be efficiently modelled and explored in a complete framework that can run the system with real-life inputs of the eventual working environment.

The purpose of this project is to define a complete framework to model the run-time behaviour of the main elements that affect performance and power/energy consumption in new embedded system designs (i.e. processing cores and memories). Consequently, once the framework has been defined, our proposed modelling methodology can be employed to perform comparative analyses of dynamic power management policies. The model that needs to be built in this project relies onto the Simulink simulation framework. Its main architectural elements are: i) HW components (core, peripherals) modelled through their power states (active, power or clock gated, voltage/frequency levels); ii) operating system (scheduler, synchronization, I/O interaction); iii) applications (workload, interaction with the OS through system calls and interrupts), iv) power management unit (shutdown, dynamic voltage and frequency control).

To feed the model with realistic workload information, a suitable profiling methodology has to be defined. As a baseline for this project we use a high-level library to profile both statically and dynamically defined variables using templates in C++. This library extract at run-time detailed information about the complex dynamic behavior of each variable (e.g. memory reads or writes), independently from the type of each variable. The profiling library has its foundations in the concept of abstract classes or templates. Templates are compile-time constructs that describe the general behavior of a class or function without having to specify the underlying type within the class. The description of the class or function is parameterized with one or more types to define a family of functions or classes. When the class template is then used, it is instantiated with the desired type, and the compiler generates the correct instructions to deal with that type, which is exactly the mechanism employed in this case. The profiling library includes a complete toolset for statistics extraction, which is written in the interpreted language O’Caml for fast debugging and efficiency.


  • The tasks expected by the student developing this project are very briefly described in the following:
  • Study of the Simulink framework currently available.
  • Study of the C++ profiling library currently available.
  • Modification of profiling library to generate the required output as input for the Simulink framework.
  • Analysis of possible alternatives of tools to extract additional profiling information required for the final system (e.g. instructions spent during execution).
  • Modification of the Simulink framework to model the memory hierarchy.
  • Integration of the model of the profiled application into the Simulink framework.
  • Implementation of various dynamic power management policies to verify the correct behaviour of the system.


This project involves knowledge of different levels of the digital designs as listed below:

  • Knowledge of the design of Finite State Machines.
  • Advanced programming knowledge in C++ and basic knowledge about scripting languages
  • (Perl or O’CamL).
  • Basic knowledge about computer architecture and roles of elementary components (e.g. processors, caches, …).
  • Basic knowledge about operating system principles (e.g. system calls, interrupt management, etc.).


***Archived: This is a past project,  it is not on offer at the moment!***