Contents 1 Introduction and motivation 2 High assurance software lessons and techniques 3 Hardware security challenges 4 FPGA updates and programmability 5 Memory protection on FPGAs 6 Spatial separation with moats 7 Putting it all together: a design example 8 Forward-looking problems A Computer architecture fundamentals