Computer Laboratory

CODEX Teaching Project

In collaboration with Prof Steve Leeb at MIT (in association with CMI) new hardware, software, tutorials and laboratories were developed under project CODEX (CODesign EXperiments).

Below is the original project motivation, etc.


For many of our students, `hacking the web' has supplanted `working on the Chevy.' The increasing complexity and monolithic integration associated with modern commercial products have conspired to eliminate many of the practical, hands-on experiences which prepared past students for an engineering education. At the same time, many of our classes have been refined to focus on the beauty and technique of analytical methods and fundamental principles used in design, perhaps increasingly without reference to the practical physical systems for which these methods were developed. These trends may account for our informal observation that some EECS students appear increasingly disenfranchised with physics-related courses. A balanced educational experience, which combines a good appreciation of exciting, `computer age' methods and tools with the essential ability to manipulate and understand the physical world, will enable a student to combine new tools with classical methods to design real systems. This ability should be the hallmark of an engineering education. The breadth and immediacy of both of our undergraduate programs would benefit from a concentrated effort to revise and expand our laboratory offerings.

Students need to see, touch, design, and analyze practical, illustrative systems in order to have any hope of understanding how engineering science produces technological realities. An education without these reinforcing physical experiences will fail to prepare students to understand modern industrial problems. Hardware/software codesign is vital to development of digital electronic systems (e.g. communications, entertainment, transport, medical analysis, computers, etc.). As a result, it is considered to be part of the core curriculum (in one form or another) by many EE and CS departments. Paradoxically, equipment required for laboratories to teach this material is not readily available. In particular, evaluation boards from manufactures of the key components required of such systems (e.g. microprocessors and programmable logic devices) often focus on one component (e.g. an ARM evaluation board focuses on the ARM microprocessor) which would severely limit the scope of the material which could be taught. Consequently, many institutions have developed their own equipment; a costly and time consuming process.

Long term plan

This project will primarily focus on hardware/software co-design, the practical component for courses like 6.115 Microcomputer Project Laboratory at MIT, and at Cambridge: Electronic Computer Aided Design (ECAD), Computer Architecture and System Level Programming. The platform will also be used for project work at various levels (e.g., 2nd year group projects in Computer Science and 3rd year projects in Engineering) and could be used as a practical component for Network and Operating Systems courses.

Materials to be produced

Various hardware subsystems will be produced to provide the infrastructure required to improve the teaching laboratories. This hardware will include components necessary to prototype embedded devices, from robot controllers through to network appliances. Components include microprocessors, field programmable gate arrays (soft programmable digital chips), analogue/digital converters, and industrial interfaces like Dallas 1-wire bus, CAN, etc. Extensive design examples will be produced and documented to provide a teaching framework. Where specific tools and languages (e.g. Verilog/VHDL) need to be introduced, web based interactive teaching material will be produced, building upon the very successful 6.001 Structure and Interpretation of Computer Programs course taught at MIT.