Learning Computer Architecture with Raspberry Pi
Use your Raspberry Pi to get smart about computing fundamentals In the 1980s, the tech revolution was kickstarted by a flood of relatively inexpensive, highly programmable computers like the Commodore. Now, a second revolution in computing is beginning with the Raspberry Pi. Learning Computer Architecture with the Raspberry Pi is the premier guide to understanding the components of the most exciting tech product available. Thanks to this book, every Raspberry Pi owner can understand how the computer works and how to access all of its hardware and software capabilities. Now, students, hackers, and casual users alike can discover how computers work with Learning Computer Architecture with the Raspberry Pi. This book explains what each and every hardware component does, how they relate to one another, and how they correspond to the components of other computing systems. You'll also learn how programming works and how the operating system relates to the Raspberry Pi's physical components. Co-authored by Eben Upton, one of the creators of the Raspberry Pi, this is a companion volume to the Raspberry Pi User Guide An affordable solution for learning about computer system design considerations and experimenting with low-level programming Understandable descriptions of the functions of memory storage, Ethernet, cameras, processors, and more Gain knowledge of computer design and operation in general by exploring the basic structure of the Raspberry Pi The Raspberry Pi was created to bring forth a new generation of computer scientists, developers, and architects who understand the inner workings of the computers that have become essential to our daily lives. Learning Computer Architecture with the Raspberry Pi is your gateway to the world of computer system design.
Introduction 1 Cambridge 1 Cut to the Chase 3 The Knee in the Curve 4 Forward the Foundation 5 CHAPTER 1 The Shape of a Computer Phenomenon 7 Growing Delicious, Juicy Raspberries 7 System-on-a-Chip 10 An Exciting Credit Card-Sized Computer 12 What Does the Raspberry Pi Do? 14 Meeting and Greeting the Raspberry Pi Board 14 GPIO Pins 15 Status LEDs 16 USB Receptacles 18 Ethernet Connection 18 Audio Out 19 Composite Video 21 CSI Camera Module Connector 21 HDMI 22 Micro USB Power 22 Storage Card 23 DSI Display Connection 24 Mounting Holes 25 The Chips 25 The Future 25 CHAPTER 2 Recapping Computing 27 The Cook as Computer 28 Ingredients as Data 28 Basic Actions 30 The Box That Follows a Plan 31 Doing and Knowing 31 Programs Are Data 32 Memory 33 Registers 34 The System Bus 36 Instruction Sets 36 Voltages, Numbers and Meaning 37 Binary: Counting in 1s and 0s 37 The Digit Shortage 40 Counting and Numbering and 0 40 Hexadecimal as a Shorthand for Binary 41 Doing Binary and Hexadecimal Arithmetic 43 Operating Systems: The Boss of the Box 44 What an Operating System Does 44 Saluting the Kernel 46 Multiple Cores 46 CHAPTER 3 Electronic Memory 47 There Was Memory Before There Were Computers 47 Rotating Magnetic Memory 48 Magnetic Core Memory 50 How Core Memory Works 50 Memory Access Time 52 Static Random Access Memory (SRAM) 53 Address Lines and Data Lines 54 Combining Memory Chips into Memory Systems 56 Dynamic Random Access Memory (DRAM) 59 How DRAM Works 60 Synchronous vs Asynchronous DRAM 62 SDRAM Columns, Rows, Banks, Ranks and DIMMs 64 DDR, DDR2 DDR3 and DDR4 SDRAM 66 Error-Correcting Code (ECC) Memory 69 The Raspberry Pi Memory System 70 Power Reduction Features 70 Ball-Grid Array Packaging 71 Cache 72 Locality of Reference 72 Cache Hierarchy 72 Cache Lines and Cache Mapping 74 Direct Mapping 76 Associative Mapping 78 Set-Associative Cache 79 Writing Cache Back to Memory 81 Virtual Memory 81 The Virtual Memory Big Picture 82 Mapping Virtual to Physical 83 Memory Management Units: Going Deeper 84 Multi-Level Page Tables and the TLB 88 The Raspberry Pi Swap Problem 88 Watching Raspberry Pi Virtual Memory 90 CHAPTER 4 ARM Processors and Systems-on-a-Chip 93 The Incredible Shrinking CPU 93 Microprocessors 94 Transistor Budgets 95 Digital Logic Primer 95 Logic Gates 96 Flip-Flops and Sequential Logic 97 Inside the CPU 99 Branching and Flags 101 The System Stack 102 System Clocks and Execution Time 105 Pipelining 106 Pipelining in Detail 108 Deeper Pipelines and Pipeline Hazards 109 The ARM11 Pipeline 112 Superscalar Execution 113 More Parallelism with SIMD 115 Endianness 118 Rethinking the CPU: CISC vs RISC 119 RISC’s Legacy 121 Expanded Register Files 122 Load/Store Architecture 122 Orthogonal Machine Instructions 123 Separate Caches for Instructions and Data 123 ARMs from Little Acorns Grow 124 Microarchitectures, Cores and Families 125 Selling Licenses Rather Than Chips 125 ARM11 126 The ARM Instruction Set 126 Processor Modes 129 Modes and Registers 131 Fast Interrupts 137 Software Interrupts 137 Interrupt Priority 138 Conditional Instruction Execution 139 Coprocessors 142 The ARM Coprocessor Interface 143 The System Control Coprocessor 143 The Vector Floating Point (VFP) Coprocessor 144 Emulating Coprocessors 145 ARM Cortex 145 Multiple-Issue and Out-Of-Order Execution 146 Thumb 2 147 Thumb EE 147 big.LITTLE 147 The NEON Coprocessor for SIMD 148 ARMv8 and 64-Bit Computing 148 Systems on a Single Chip 150 The Broadcom BCM2835 SoC 150 Broadcom’s Second- and Third-Generation SoC Devices 151 How VLSI Chips Happen 151 Processes, Geometries and Masks 152 IP: Cells, Macrocells and Cores 153 Hard and Soft IP 154 Floorplanning, Layout and Routing 154 Standards for On-Chip Communication: AMBA 155 CHAPTER 5 Programming 159 Programming from a Height 159 The Software Development Process 160 Waterfall vs Spiral vs Agile 162 Programming in Binary 165 Assembly Language and Mnemonics 166 High-Level Languages 167 Après BASIC, Le Deluge 170 Programming Terminology 171 How Native-Code Compilers Work 173 Preprocessing 174 Lexical Analysis 175 Semantic Analysis 175 Intermediate Code Generation 176 Optimisation 176 Target Code Generation 176 Compiling C: A Concrete Example 177 Linking Object Code Files to Executable Files 183 Pure Text Interpreters 184 Bytecode Interpreted Languages 186 P-Code 186 Java 187 Just-In-Time (JIT) Compilation 189 Bytecode and JIT Compilation Beyond Java 191 Android, Java and Dalvik 191 Data Building Blocks 192 Identifiers, Reserved Words, Symbols and Operators 192 Values, Literals and Named Constants 193 Variables, Expressions and Assignment 193 Types and Type Definitions 194 Static and Dynamic Typing 196 Two’s Complement and IEEE 754 198 Code Building Blocks 200 Control Statements and Compound Statements 200 If/Then/Else 200 Switch and Case 202 Repeat Loops 205 While Loops 205 For Loops 207 The Break and Continue Statements 208 Functions 210 Locality and Scope 211 Object-Oriented Programming 214 Encapsulation 217 Inheritance 219 Polymorphism 221 OOP Wrapup 224 A Tour of the GNU Compiler Collection Toolset 224 gcc as Both Compiler and Builder 225 Using Linux Make 228 CHAPTER 6 Non-Volatile Storage 231 Punched Cards and Tape 232 Punched Cards 232 Tape Data Storage 232 The Dawn of Magnetic Storage 235 Magnetic Recording and Encoding Schemes 236 Flux Transitions 237 Perpendicular Recording 238 Magnetic Disk Storage 240 Cylinders, Tracks and Sectors 240 Low-Level Formatting 242 Interfaces and Controllers 244 Floppy Disk Drives 246 Partitions and File Systems 247 Primary Partitions and Extended Partitions 247 File Systems and High-Level Formatting 249 The Future: GUID Partition Tables (GPTs) 249 Partitions on the Raspberry Pi SD Card 250 Optical Discs 252 CD-Derived Formats 254 DVD-Derived Formats 254 Ramdisks 255 Flash Storage 257 ROMs, PROMs and EPROMs 257 Flash as EEPROM 258 Single-Level vs Multi-Level Storage 260 NOR vs NAND Flash 261 Wear Levelling and the Flash Translation Layer 265 Garbage Collection and TRIM 267 SD Cards 268 eMMC 270 The Future of Non-Volatile Storage 271 CHAPTER 7 Wired and Wireless Ethernet 273 The OSI Reference Model for Networking 274 The Application Layer 276 The Presentation Layer 276 The Session Layer 278 The Transport Layer 278 The Network Layer 279 The Data Link Layer 281 The Physical Layer 282 Ethernet 282 Thicknet and Thinnet 283 The Basic Ethernet Idea 283 Collision Detection and Avoidance 285 Ethernet Encoding Systems 286 PAM-5 Encoding 290 10BASE-T and Twisted-Pair Cabling 291 From Bus Topology to Star Topology 292 Switched Ethernet 293 Routers and the Internet 296 Names vs Addresses 296 IP Addresses and TCP Ports 297 Local IP Addresses and DHCP 300 Network Address Translation 302 Wi-Fi 304 Standards within Standards 305 Facing the Real World 305 Wi-Fi Equipment in Use 309 Infrastructure Networks vs Ad Hoc Networks 311 Wi-Fi Distributed Media Access 312 Carrier Sense and the Hidden Node Problem 314 Fragmentation 315 Amplitude Modulation, Phase Modulation and QAM 316 Spread-Spectrum Techniques 319 Wi-Fi Modulation and Coding in Detail 320 How Wi-Fi Connections Happen 323 Wi-Fi Security 325 Wi-Fi on the Raspberry Pi 326 Even More Networking 329 CHAPTER 8 Operating Systems 331 Introduction to Operating Systems 333 History of Operating Systems 333 The Basics of Operating Systems 336 The Kernel: The Basic Facilitator of Operating Systems 343 Operating System Control 344 Modes 345 Memory Management 346 Virtual Memory 347 Multitasking 347 Disk Access and File Systems 348 Device Drivers 349 Enablers and Assistants to the Operating System 349 Waking Up the OS 349 Firmware 353 Operating Systems for Raspberry Pi 354 NOOBS 354 Third-Party Operating Systems 356 Other Available Operating Systems 356 CHAPTER 9 Video Codecs and Video Compression 359 The First Video Codecs 360 Exploiting the Eye 361 Exploiting the Data 363 Understanding Frequency Transform 367 Using Lossless Encoding Techniques 371 Changing with the Times 373 The Latest Standards from MPEG 374 H.265 378 Motion Search 378 Video Quality 381 Processing Power 382 CHAPTER 10 3D Graphics 383 A Brief History of 3D Graphics 383 The Graphical User Interface (GUI) 384 3D Graphics in Video Games 386 Personal Computing and the Graphics Card 387 Two Competing Standards 390 The OpenGL Graphics Pipeline 391 Geometry Specification and Attributes 393 Geometry Transformation 396 Lighting and Materials 400 Primitive Assembly and Rasterisation 403 Pixel Processing (Fragment Shading) 405 Texturing 407 Modern Graphics Hardware 411 Tiled Rendering 411 Geometry Rejection 413 Shading 415 Caching 416 Raspberry Pi GPU 417 Open VG 421 General Purpose GPUs 423 Heterogeneous Architectures 423 OpenCL 425 CHAPTER 11 Audio 427 Can You Hear Me Now? 427 MIDI 428 Sound Cards 428 Analog vs Digital 429 Sound and Signal Processing 430 Editing 431 Compression 431 Recording with Effects 432 Encoding and Decoding Information for Communication 433 1-Bit DAC 434 I2S 436 Raspberry Pi Sound Input/Output 437 Audio Output Jack 437 HDMI 438 Sound on the Raspberry Pi 438 Raspberry Pi Sound on Board 439 Manipulating Sound on the Raspberry Pi 439 CHAPTER 12 Input/Output 447 Introducing Input/Output 448 I/O Enablers 451 Universal Serial Bus 452 USB Powered Hubs 455 Ethernet 457 Universal Asynchronous Receiver/Transmitters 458 Small Computer Systems Interface 459 Parallel ATA 459 Serial Advanced Technology Attachment 460 RS-232 Serial 460 High Definition Media Interface 461 I2S 462 I2C 463 Raspberry Pi Display, Camera Interface and JTAG 464 Raspberry Pi GPIO 464 GPIO Overview and the Broadcom SoC 465 Meeting the GPIO 466 Programming GPIO 473 Alternative Modes 479 GPIO Experimentation the Easy Way 480 Index 481
Eben Upton is one of the co-creators of the Raspberry Pi, driven by the desire to create a new generation of developers capable of making an effective contribution to the field. Eben is also a co-author of the Raspberry Pi User Guide. Jeff Dunteman is a veteran tech author and a co-founder of Coriolis Press. His previous publications include Assembly Language Step By Step and Jeff Dunteman's Wi-Fi Guide.
Take an insider tour of the Raspberry Pi and learn the mechanics of computing Inspired by the relatively cheap, highly programmable computers of the 1980s—and their impact on the UK tech industry—the Raspberry Pi was designed to inspire and empower a new generation of programmers. Accessible both economically and technically, the Raspberry Pi is the ideal vehicle for learning how computers work. Learning Computer Architecture with Raspberry Pi is your personal guide on this journey of discovery, and it's your expert coach for developing a knowledge base that translates well beyond the Pi itself. Authors Eben Upton and Jeff Dunteman are the ideal teachers: Upton provides deep insight as a Raspberry Pi co-creator, and Dunteman distills complex technical knowledge into easily understood explanations. Together they provide expert guidance on the technology behind all computers, based on the mechanics behind the credit card–sized computer that is revolutionizing the world of programming. This book walks you through each component step by step to show you what it does, why it's needed, how it relates to the other components, and the choices the designers faced when creating it. From memory, storage, and processors, to Ethernet, cameras, and audio, Upton and Dunteman team up to give you a solid understanding of the Raspberry Pi internals, and how it relates to the technology underlying computing as a whole. With design intent and critical function straight from the source, Learning Computer Architecture with Raspberry Pi helps you: Learn the purpose behind each piece of the Pi Understand how the various components interact Dig into the thought process behind the system's design Learn how programming works Examine the interplay between hardware and operating system Delve into the mechanics behind the ARM chip Compare and contrast different chips, from ARM to Intel Visit the companion website at www.wiley.com/go/comparchitecture