Syllabus and synopsis
In this course, participants will learn about the building blocks of computer hardware and software by studying the design of a sequence of simple embedded systems, including understanding how the hardware works, and how it can be programmed at a low level, using assembly language on the bare hardware, and at a high level, using C code and a process scheduler.
Following the course, participants will be able to
- Explain the functioning of computer hardware at the gate level and architectural level.
- Understand the low-level mechanisms that support programming in a high-level language.
- Design programs that interact with the hardware of the processor and I/O devices.
- Interpret IC datasheets in order to drive simple I/O devices.
Simple design of combinational and sequential circuits; standard design elements.
Data representations and computer arithmetic.
Register transfer level design of a simple microprocessor.
Programming at the machine level: registers, instructions, memory addressing, subroutines, interrupts.
Rôle of assemblers, compilers and linkers.
Simple operating system services: processes, device drivers.
It is too soon to say how the content will be divided into lectures, because I hope to match the pace to the prior experience of the audience. But the sequence of topics will be as follows.
Programming at the machine level: the programmer's model.
Number representations and computer arithmetic.
Control structures and conditional branching.
Memory addressing, arrays, records and pointers.
Programming I/O devices: device registers, GPIO, UART.
Interrupt control and asynchronous events.
Programming with a simple operating system. Processes and message passing.
Implementing the operating system: context switches, process queues.
Combinational and sequential circuits. Logic gates in CMOS.
Architectural components: ALU, register file, control unit.
Register-transfer level design of a simple implementation scheme.