Log In
Or create an account ->
Imperial Library
Home
About
News
Upload
Forum
Help
Login/SignUp
Index
Architecting High-Performance Embedded Systems
Why subscribe?
Contributors
About the author
About the reviewer
Packt is searching for authors like you
Preface
Intended audience for this book
What this book covers
To get the most out of this book
Download the example code files
Download the color images
Conventions used
Get in touch
Reviews
Section 1: Fundamentals of High-Performance Embedded Systems
Chapter 1: Architecting High-Performance Embedded Systems
Technical requirements
Elements of embedded systems
Power source
Digital processing
Software and firmware
Specialized circuitry
Input from the environment
Output to the environment
Operating in real time
Periodic operation
Event-driven operation
Real-time operating systems
FPGAs in embedded systems
Digital logic gates
Flip-flops
Elements of FPGAs
FPGA synthesis
Hardware design languages
The benefits of using FPGAs in embedded system designs
Xilinx FPGAs and development tools
Summary
Chapter 2: Sensing the World
Technical requirements
Introducing passive, active, and smart sensors
Applying analog-to-digital converters
The types of sensors used in embedded systems
Light
Temperature
Pressure
Humidity
Fluid flow
Force
Ultrasonic
Audio
Magnetic
Chemical
Ionizing radiation
Radar
Lidar
Video and infrared
Inertial
GPS
Communicating with sensors
GPIO
Analog voltage
I2C
SPI
CAN bus
Wireless
Processing sensor data
Summary
Chapter 3: Operating in Real Time
Technical requirements
What does real-time mean?
Attributes of a real-time embedded system
Performing multiple tasks
Rate-monotonic scheduling
Understanding key RTOS features and challenges
Mutexes
Semaphores
Queues
Event flags
Timers
Dynamic memory allocation
Deadlock
Priority inversion
Popular real-time operating systems
embOS
FreeRTOS
INTEGRITY
Neutrino
µc/OS-III
VxWorks
Summary
Section 2: Designing and Constructing High-Performance Embedded Systems
Chapter 4: Developing Your First FPGA Program
Technical requirements
Using FPGAs in real-time embedded system designs
Block RAM and distributed RAM
FPGA I/O pins and associated features
Specialized hardware resources
Processor cores
FPGA implementation languages
VHDL
Verilog
Block diagrams
C/C++
The FPGA development process
Defining system requirements
Allocating functionality to the FPGA
Identifying required FPGA features
Implementing the FPGA design
Testing the implementation
Developing your first FPGA project
Project description
Installing the Vivado tools
Creating a project
Creating VHDL source files
Testing the logic behavior
Defining I/O signals
Creating a top-level VHDL file
Synthesizing and implementing the FPGA bitstream
Downloading the bitstream to the board
Programming the bitstream to onboard flash memory
Summary
Chapter 5: Implementing systems with FPGAs
Technical requirements
The FPGA compilation process
Design entry
Logic synthesis
Design optimization
High-level synthesis
Optimization and constraints
Algorithm types most suitable for FPGA implementation
Algorithms that process high-speed data streams
Parallel algorithms
Algorithms using nonstandard data sizes
Kicking off the oscilloscope FPGA project
Project description
Baseline Vivado project
Summary
Chapter 6: Designing Circuits with KiCad
Technical requirements
Introducing KiCad
Basic KiCad procedures
Placing and connecting circuit components
Creating component symbols
Developing the project schematic diagram
Adding text annotations
Adding signal labels
Adding global labels
Creating differential signal pairs
Creating offboard connections
Symbol annotation and electrical rules checking
Laying out the PCB
Prototyping the circuit board
Summary
Chapter 7: Building High-Performance Digital Circuits
Technical requirements
Circuit board assembly tools and procedures
Optical magnification
Tweezers
Flux
Solder
Electrostatic discharge protection
Hand soldering
Solder wick
Solder paste application
Reflow soldering
Preparing for assembly and placing parts
Reflow soldering and hand soldering
Hand soldering
Post-assembly board cleaning and inspection
Summary
Section 3: Implementing and Testing Real-Time Firmware
Chapter 8: Bringing Up the Board for the First Time
Technical requirements
Preparing for power-up
Supplying power to the board
Checking our circuit's basic functionality
Testing the board power supplies
Testing the analog amplifiers
Testing the ADC
Adapting the circuit in case of problems
Cutting PCB traces
Installing solder jumpers and jumper wires
Removing components
Adding components
Generating the ADC encoder clock and 1 KHz calibration signal
Summary
Chapter 9: The Firmware Development Process
Technical requirements
Designing and implementing the FPGA algorithm
Digital oscilloscope system overview
Adding the deserializer
Adding a FIFO buffer
Adding the AXI bus interface
Adding the MQTT protocol
Coding style
Naming things
Comments in code
Avoid literal numeric values
Braces, indentation, and vertical spacing
Prioritize readability and correctness
Avoid premature optimization
Avoid implementation-defined behavior
Avoid unconditional jumps
Minimize the scope of identifiers
Indicate that constant things are constant
Automated code formatters
Statically analyzing source code
What is static code analysis?
Static code analysis tools
Using static code analysis effectively
Working with existing code
Begin with only the most severe messages
Resolving analyzer output messages
Common source code analyzer messages
Source code version control
Version control with Git
Test-driven development
TDD applied to embedded systems
Summary
Chapter 10: Testing and Debugging the Embedded System
Technical requirements
Designing system-level tests
Requirements-driven testing
Testing under nominal and off-nominal conditions
Unit testing versus functional testing
Negative testing and penetration testing
Testing in a simulated environment
Achieving repeatable test results
Developing a test plan
Conducting tests and recording results
Identify the data to be collected
Configuring the system under test
Executing the test procedures
Quick-look assessment of test results
Repeating tests when necessary
Regression testing existing code
Ensuring comprehensive test coverage
Requirements traceability matrix
Tracking code coverage
Dealing with syntax and compilation errors and warnings
Working with static code analysis and unit testing
Define the problem clearly and attempt to duplicate it
Determine whether the input is correct
Find ways to gain visibility into the system
Using a binary search debugging process
temporarily removing portions of functionality
Make the smallest program that demonstrates the problem
Summary of best practices for high-performance embedded system development
Designing for test
Leave room for growth
Design hardware with future capabilities in mind
Developing only the code you need right now
Maintain strict version control
Develop unit tests as code is in development
Begin system-level testing as soon as functionality is present
Summary
Other Books You May Enjoy
Leave a review - let other readers know what you think
← Prev
Back
Next →
← Prev
Back
Next →