![Loading...](https://link.springer.com/static/c4a417b97a76cc2980e3c25e2271af3129e08bbe/images/pdf-preview/spacer.gif)
-
Chapter and Conference Paper
Further Experiences Teaching an FPGA-Based Embedded Systems Class
I describe thirteen years of teaching an embedded systems class at Columbia University that spans three “board eras.” Students now develop Linux systems with custom FPGA-based peripherals.
-
Chapter
On Determinism
The notion of deterministic execution of concurrent systems has appeared in many guises throughout Edward A. Lee’s œuvre, but few really grasp how powerful, important, subtle, and flexible the concept really i...
-
Chapter and Conference Paper
Computation vs. Memory Systems: Pinning Down Accelerator Bottlenecks
The world needs special-purpose accelerators to meet future constraints on computation and power consumption. Choosing appropriate accelerator architectures is a key challenge. In this work, we present a pinto...
-
Chapter
Compiling SHIM
Embedded systems demand concurrency for supporting simultaneous actions in their environment and parallel hardware. Although most concurrent programming formalisms are prone to races and non-determinism, some,...
-
Chapter and Conference Paper
Compile-Time Analysis and Specialization of Clocks in Concurrent Programs
Clocks are a mechanism for providing synchronization barriers in concurrent programming languages. They are usually implemented using primitive communication mechanisms and thus spare the programmer from reaso...
-
Chapter and Conference Paper
Concurrency and Communication: Lessons from the SHIM Project
Describing parallel hardware and software is difficult, especially in an embedded setting. Five years ago, we started the shim project to address this challenge by develo** a programming language for hardware/s...
-
Article
Open AccessCode Generation in the Columbia Esterel Compiler
The synchronous language Esterel provides deterministic concurrency by adopting a semantics in which threads march in step with a global clock and communicate in a very disciplined way. Its expressive power co...
-
Book
-
Chapter and Conference Paper
A Processor Extension for Cycle-Accurate Real-Time Software
Certain hard real-time tasks demand precise timing of events, but the usual software solution of periodic interrupts driving a scheduler only provides precision in the millisecond range. NOP-insertion can prov...
-
Chapter and Conference Paper
Approximate Reachability for Dead Code Elimination in Esterel ⋆
Esterel is an imperative synchronous programming language for the design of reactive systems. Esterel ⋆ extends Esterel with a non-instantaneous jump instruction (compatible with concurrency, preemption, etc.) s...
-
Chapter and Conference Paper
Incremental Algorithms for Inter-procedural Analysis of Safety Properties
Automaton-based static program analysis has proved to be an effective tool for bug finding. Current tools generally re-analyze a program from scratch in response to a change in the code, which can result in mu...
-
Chapter and Conference Paper
Separate Compilation for Synchronous Modules
Synchronous models are useful for designing real-time embedded systems because they provide timing control and deterministic concurrency. However, the semantics of such models usually require an entire system ...
-
Chapter
Porting a Network Cryptographic Service to the RMC2000
This chapter describes our experience porting a transport-layer cryptography service to an embedded microcontroller. We describe some key development issues and techniques involved in porting networked softwar...
-
Book
-
Chapter
CoCentric System Studio
CoCentric System Studio (once cailed El Greco—see Buck and Vaid-yanathan [17]) is a graphical design environment for systems built with a combination of dataflow diagrams and hierarchically-nested finite-state...
-
Chapter
Language Basics
Using a language is like operating a marionette. You may not touch the puppet; instead you make it move by manipulating a handle connected to the puppet through strings. Just as a good puppeteer understands ho...
-
Chapter
Verilog
Verilog began life in 1984 as an input language for an event-driven simulator and has since become a key language in chip design because it is succinct, expressive, simulates quickly, and much of it can be aut...
-
Chapter
Software Basics
Software languages describe instructions that will be executed in sequence by a processor. These instructions perform arithmetic on vallies in the processor’s memory or make a decision based on the results. Co...
-
Chapter
Operating Systems
An operating system (os) is a program that provides an environment for executing other programs, often providing facilities for I/O, a filesystem, networking, virtual memory, and multitasking: a way to run mul...
-
Chapter
Java
Sun’s Java programming language is a newer language based on C++, but incompatible with it. Like C++, Java is an object-oriented language that provides classes and inheritance. It is a higher-level language th...