Embedded Systems

Established: March 27, 2000

Our work on Embedded Systems and Reconfigurable Computing covers both the system software and hardware platform issues.


System software is long lived and hard to develop.

  • How can we make computers and consumer electronic devices less helpless and needy of detailed instruction?
  • How can we build predictable systems out of a mix of real-time and non-real-time entities?
  • How can we trust the computers and how can they trust us? But keep our privacy, lifestyle, safety, and convenience?
  • What are the programming paradigms that simplify the programmer’s tasks without undue overheads?
  • How can we verify that software behaves as expected and adapts to a changing environment?
  • How do we structure software for resource-constrained environments, while maximizing portability, reuse, and sharing?

Embedded hardware is diverse and forever changing.

  • How can we realize more stable platforms without raising costs and complexity?
  • What can we do to increase ease-of-use, especially for verification, debugging and performance tuning?
  • How can we shorten the development and testing time for new systems?
  • How can we best use reconfigurable hardware to execute software more efficiently?
  • What are the best ways to exploit the functionality and the efficiency of reconfigurable computing?

Our approach in investigating these complex problems is to understand, simplify, build and test. We keep things as simple and minimalist as possible, without sacrificing generality. We build actual systems, both physical and simulated, to verify and measure the results. We test our systems ourselves and make them freely available to the research community, both for verification and for teaching purposes.

This 96MB Word document is a snapshot of the group’s current work. It reports on the demonstrations that we brought to the 2009 Microsoft Faculty Summit in Redmond, WA, USA. A shorter 2.6MB PDF document is also available, without the posters.













gNOSIS: Advancing Hardware Development

Established: May 1, 2010

Field Programmable Gate Arrays (FPGAs) are used in wide range of applications from small devices to big data centers. Verilog HDL is one of the most common languages used by FPGA designers to implement a design. Then, different CAD tool steps provided by FPGA vendors implement the design for FPGAs.  The innovation of within tools themselves for improving developer productivity and improving code quality has largely stagnated.  There are some examples that show what is…


Established: February 12, 2007

Giano is a simulation framework for the full-system simulation of arbitrary computer systems, with special emphasis on the hardware-software co-development of system software and Real-Time embedded applications. <h2>Overview<h2> Giano allows the simultaneous execution of binary code on a simulated microprocessor and of Verilog code on a simulated FPGA, within a single target system capable of interacting in Real-Time with the outside world. The graphical user interface uses Visio to create the interconnection graph of the…


Established: February 12, 2007

The "extensible MIPS" is a dynamically extensible processor for general-purpose, multi-user systems. The reconfigurable logic (Extensions) dynamically load/unload application-specific circuits. Extensions add specialized instructions to the processor, security monitors, debuggers, new on-chip peripherals. Extended Instructions dramatically speedup application programs, just by patching their binaries. eMIPS runs NetBSD on the Xilinx ML401/2 (Virtex V4) XUP (V5), and on the BEE3(4xV5).

Microsoft Invisible Computing

Established: January 18, 2002

Microsoft Invisible Computing is a toolkit for building systems for invisible computing and embedded web services. Overview Microsoft Invisible Computing is a research prototype for making small devices part of the seamless computing world. It is available free of charge for research and educational use under the Microsoft Shared Source License. Microsoft Invisible Computing consists of compact middleware for constructing embedded web services applications and a small component based Real-Time Operating System with TCP/IP networking…