Embedded SystemsCSCE 4114
The theory, analysis, and design of embedded systems. Hardware and software component selection, reuse and design, and modern design flows for creating systems. Coverage includes timing requirements, development and debugging tools, real time operating systems and reactive programming models. Interfacing I/O components and hardware accelerators. System level integration techniques for multiprocessor components and accelerators.
This class will make use of the Xilinx/Digilent Spartan 3e Development Board. This development board contains a modern Spartan series FPGA along with various peripherals such as Ethernet, USB, Audio In/Out, LEDs, buttons, switches, VGA, etc. Various System-On-Chip (SoC) architectures will be developed during this class, all of which will be implemented within the fabric of the FPGA. Most, if not all, of the SoCs developed during this class will use the MicroBlaze processor; a soft 32-bit processor core developed by Xilinx. The instruction set architecture, or ISA, of the MicroBlaze will be studied and used throughout this class, in order to teach students the relationships between high-level languages, assembly language, and the actual hardware implementation of computer systems.
- Within an undergraduate curriculum, there are some courses where the basic fundamental theory and foundational material seems obvious and well defined, and then again there are some that are not. As examples the fundamental theory and foundational materials that should be covered in courses such as Circuits, Microelectronics, Introduction to Programming Languages, and Algorithms seems pretty well set. While faculty opinions may differ on choices of textbooks and supporting laboratory materials, agreement is easily reached on basic content. An undergraduate course in Embedded Systems doesn’t seem to fall into the same bucket of nicely defined courses. Embedded Systems seems more like Software Engineering: everyone knows that no curriculum is complete without one, but no one can tell you exactly what it is. A quick look at Embedded Systems courses taught at various universities bears this out.
- Some of the ambiguity can be attributed to where and how the course may have originated. Some may be a result of how rapidly our technology base changes. Yet more variability can be attributed to the very wide and still evolving definition of what an embedded system is; is it a 2 cent part in a childs toy that makes fuzzy bunny parts move, or a 2 billion dollar distributed embedded control system for a nuclear submarine? When I was thinking about what are the fundamentals of Embedded Systems design I tried to consider these two systems have in common ? What are the fundamental principles that underlay both, and can a course be put together to prepare students to be proficient in designing either ?
- I recently sat down with two of my colleagues to define the fundamentals upon which our Embedded Systems course should be based. We didn’t really have much luck in reaching agreement and in fact the discussion seemed to lead to some hurt feelings. Definitely on my part, I felt very frustrated. I think part of the disconnect was in backgrounds. One colleague had earned all of his degree’s in a very traditional department of Electrical Engineering. His answer to what are the fundamentals was “programmable logic controllers”. Not so much theory but a cheap silicon device. In his view, Embedded Systems should be taught as a project course. He lectures for a few weeks and then turns them loose on projects of their own creation. The requirements for their projects was primarily laying out a simple circuit board, hooking up some LED’s, stepper motors, etc. all under the control of a PIC costing several cents. He argued this was appropriate as most embedded processors out in the world today are small, cheap devices and this is what the students should become familiar with. On the programming side, assembler was the only real language of choice in his view, as performance requirements dictated such low level implementation. In essence he was on the fuzzy bunny side of the economic and complexity ladder. My other colleague envisioned students building autonomous model vehicles. This is in my opinion an interesting project for perhaps applying the fundamentals, but wasn’t really what was attempting to define as the fundamentals.
- When I asked my colleagues to list out the fundamentals that should be taught, what I was hoping for was a combination of several things. First, what is the fundamental scientific principles upon which embedded systems work ?
- Sampling Theory
- Signal Interpretation Conversion
- Nyquist Rates
- Signal Errors
- A/D convertor operations
- Standard interfaces command/status and data registers
- Interface accessing practices. Use of indirection
- Control Theory
- Closed Loop Control Systems
- Signal Processing
- Real Time Operating Systems
- System Architecture and Devices
- Component Selection
- Programmability and customization
- Compiler, Operating Systems, Debug support
- Selecting Processors, Controllers, Accelerators
- Component Selection
- Building a System Architecture := Bus, memory, compute devices, I/O
- Programming/Computational Models
- Reactive Systems
- Finite State Machine Patterns
- Practical Programming Practices
- Low level bit twiddling in C
- ABI standards
- Stacking and parameter passing
- Size, Power, Cost
- How to write a clear requirements specification