Syllabus and synopsis (Digital Systems)
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.
A symbolic representation of the machine code for a program.
An integrated circuit that contains a complete CPU.
(General-Purpose Input/Output). A peripheral interface that provides direct access to pins of the microcontroller chip. Pins may be configured as inputs or outputs, and interrupts may be associated with state changes on certain input pins. On the micro:bit, the LEDs and pushbuttons are connected to GPIO pins.
(Universal Asynchronous Receiver/Transmitter). A peripheral interface that is able to send and receive characters serially, commonly used in the past for communication between a computer and an attached terminal. It is commonly used in duplex mode, with the transmitter of one device connected to the receiver of the other with one wire, and the receiver of the one connected to transmitter of the other with a different wire. The asynchronous part of the name refers to the fact that the transmitter and receiver on each wire do not share a common clock, but rely instead on the signalling protocol and precise timing to achieve synchronisation.