FPGA / ASIC Engineering Roadmap
FPGA and ASIC engineering roadmap for learners targeting digital hardware and chip design roles.
FPGA / ASIC Engineering Roadmap
🚧 WORK IN PROGRESS!
According to the positive feedback I received for the Embedded Systems Engineering Roadmap and due to my own interest in FPGA, I decided to create a separate roadmap specifically for FPGA design in this repository.
[!WARNING] The contents in this repository are gathered from various sources to create a roadmap. At present, no sorting or filtering has been done on this information. If you require a comprehensive roadmap right now, the contents in this repository might not yet be suitable for you. [!TIP] To differentiate between the types of learning resources and the quality of their content, specific symbols are used before each item.
Resource types:
- 📘 : Books
- 🎞️ : Videos
- 📝 : Write-ups, articles, and blog posts
- 🔗 : Other links that do not fit into any of the above categories
Content quality symbols:
- 👶 : Easy-to-understand and beginner-friendly resources. Refer to them if you do not have prior knowledge in a topic.
- 💎 : Well-known references that have truly invaluable and comprehensive content. Refer to them if you want to deepen your understanding of a topic.
Learning Resources
- 📝👶 What are FPGAs?
- 🎞️👶 Introduction to FPGA - Shawn Hymel (YouTube Playlist)
- 🔗👶 FPGA 101 - Nandland
- 🎞️ Nandland (YouTube Channel)
- 🎞️👶 FPGAs for Beginners (YouTube Channel)
- 🔗 asic-world.com
- 🔗 Learn Chip Design & Verification
- 📝 VHDL vs Verilog vs SystemVerilog: Which Hardware Language Should You Learn First for a Successful Career?
- 🔗 Digital Electronics Deeds
- 📝👶💎 Project F - FPGA Tutorials
- 🔗💎 Tiny Tapeout: from idea to chip design in minutes!
- 📝💎 Learning FPGA, yosys, nextpnr, and RISC-V
- 🔗💎 Doulos - Global Independent Leaders in Design and Verification KnowHow
- 🎞️ Coursera - FPGA Design for Embedded Systems Specialization
- 🎞️ Coursera - ARM Cortex STM32 Deep Dive: Mastering Embedded Systems
- 🎞️ Coursera - Introduction to Electronics
- 🎞️ Coursera - Semiconductor Physics
- 🎞️ Coursera - MOSFET
- 🎞️ Coursera - Introduction to Microfabrication
- 🎞️ Coursera - Power Electronics Specialization
- 🎞️ Coursera - RF MM-Wave Circuit Design
- 🎞️ Coursera - RF/Microwave Design - S-Parameter Analysis
- 🎞️ Coursera - RF/Microwave Design - Impedance Matching
- 🎞️ Coursera - RF/Microwave Design - Antenna Design
- 🎞️ Coursera - Microwave Antenna
- 🎞️ Coursera - Computer Architecture
- 🎞️ Coursera - Hardware Security
- 🎞️ Udemy – FPGA Embedded Design, Part 1 - Verilog
- 🎞️ Udemy – FPGA Embedded Design, Part 2 - Basic FPGA Training
- 🎞️ Udemy – FPGA Embedded Design, Part 3 - EDA Tools
- 🎞️ Udemy – FPGA Embedded Design, Part 4 - Microprocessor Design
- 🔗👶 FPGA 4 Students
- 🔗👶 Access an FPGA right now!
- 📝 Designing a Custom AXI Slave (Avnet PDF)
- 🎞️👶 Neso Academy - Electronics & Communication
- 🎞️ edX - MITx: Circuits and Electronics 1: Basic Circuit Analysis
- 🎞️ YouTube Playlist - CMOS Digital VLSI Design
- 🔗💎 Computation Structures
- 🎞️ YouTube Playlist - Basic Computer Architecture
- 🎞️ YouTube Playlist - Hardware Modeling using Verilog
- 🎞️ YouTube Playlist - Microprocessors and Microcontrollers
Projects
- 🔗 FPGA 4 Fun
- 🔗 AMD Based FPGA Projects - Whitney Knitter
- 🔗 AMD Based FPGA Projects - Adam Taylor
- 🔗 Aegis - MidstallSoftware
- 🔗 OpenSignal
- 📝 Quake 2 on FPGA
- 🔗 mVIDIA
- 🎞️ RISC-V Single Cycle Core in Verilog
- 🎞️ SPI Project in FPGA - Ambient Light Sensor
- 🔗 FPGA Conway
Roadmap
The world of FPGA engineering thrives on two crucial disciplines: Implementation Engineering and Verification Engineering. While intertwined, each plays a distinct role in bringing innovative ideas to life on programmable hardware.
Implementation Engineers are the architects of the FPGA, meticulously crafting the design by translating algorithms and functionalities into hardware configurations. They leverage their expertise in hardware description languages and synthesis tools to optimize design performance and resource utilization.
Verification Engineers, on the other hand, safeguard the design's integrity. They design and execute comprehensive test strategies, utilizing advanced simulation tools and real-world test setups. By comparing expected behavior with actual outputs, they identify and eliminate errors, ensuring the final product functions as intended.
Both disciplines are equally critical, working hand-in-hand throughout the development process. Implementation engineers rely on verification feedback to refine their designs, while verification engineers depend on accurate implementation models to create effective tests.
Commons skills and specialized expertise needed in these disciplines are mentioned below:
✳️ Common Skills
🔵 Hardware Description Languages (HDLs):
Knowledge of VHDL and/or Verilog is crucial as they're commonly used to design and describe digital circuits.
- 📝 VHDLwhiz - Basic VHDL Tutorials
- 🎞️ VHDLwhiz.com (YouTube Channel)
- 📝 HDLBits — Verilog Practice
- 📝 FPGA designs with Verilog
🔵 Digital System Design
Fundamental concepts in digital system design like logic gates, finite-state machines, and memory architectures.
- 📝 Tiny Tapeout > Digital Design Guide
- 📝 FPGA Fundamentals - Nandland
- 📘 Digital Design - Morris Mano, Michael Ciletti
- 📘 Digital Design and Computer Architecture: ARM Edition - Sarah Harris, David Harris
- 📘 Digital Design and Computer Architecture: RISC-V Edition - Sarah Harris, David Harris
- 📘 Digital Fundamentals - Thomas L. Floyd
🔵 Pipeline Design and Flow Control (Skid Buffer / FIFO for Pipeline)
Resources focused on decoupling stages, managing backpressure, and avoiding timing bottlenecks in pipelined designs.
- 📝 Skid Buffer (ZipCPU)
- 📝 Pipeline Skid Buffer (FPGA CPU)
- 📝 Designing Skid Buffers for Pipelines (Chipmunk Logic)
- 📝 A Case Study on Effective Pipeline Design in Digital System
🔵 Simulation and Digital Waveforms
Tools for generating and visualizing waveforms and logic behavior during design and verification.
🔵 Computer Architecture
Deep understanding of how CPUs and memory systems work. This can be extended to specialized architectures, such as Graphics Processing Units (GPUs) or custom accelerator designs.
- 📘 Computer Organization and Design: ARM Edition - David A. Patterson, John L. Hennessy
- 📘 Digital Design and Computer Architecture: ARM Edition - Sarah Harris, David Harris
- 📘 Digital Design and Computer Architecture: RISC-V Edition - Sarah Harris, David Harris
- 🎞️ Build an 8-bit computer from scratch
- 📝 Every GPU Architecture in a Staggering Visual Timeline
🔵 Test and Debugging Techniques
Knowledge of simulation tools, testbenches, and hardware debugging techniques.
🔵 Version Control
Familiarity with systems like Git or Subversion is important for managing code and tracking changes.
- 🎞️ Git Tutorial for Beginners: Learn Git in 1 Hour
- 🎞️ Git for Professionals Tutorial - Tools & Concepts for Mastering Version Control with Git
- 🔗 Apache® Subversion®
🔵 Familiarity with FPGA and ASIC Design Flow
Understanding the overall process of design, from specification to synthesis and place-and-route, is helpful in order to interface effectively with the design team.
- 📘 A Hands-On Guide to Designing Embedded Systems - Adam Taylor, Dan Binnun, Saket Srivastava
- 📝 Understanding FPGA Programming and Design Flow
- 📝 ASIC Design Flow in VLSI Engineering Services – A Quick Guide
Both implementation and verification engineer need to be aware of requirements, architecture and interconnect standards and interfaces.
✳️ Implementation Engineer
As an FPGA (Field Programmable Gate Array) implement engineer, there are several important topics to be well-versed in:
🔵 FPGA Design Methodologies:
Understanding of various FPGA design techniques and best practices is important.
FPGA design methodologies encompass a broad range of techniques and strategies used in the process of designing and implementing digital logic on FPGA devices. Here are some key methods:
🔶 RTL Design
Register Transfer Level (RTL) design is a method where the digital system is described at a high level in terms of data flow between registers and the logical operations performed on the data. This allows the designer to focus on the logic functionality and data flow, rather than the specifics of how each gate is connected.
🔶 High-Level Synthesis (HLS)
HLS is a design methodology where the digital system is described in a high-level programming language such as C or C++, and then automatically converted into RTL code by an HLS tool. This approach can be faster and easier than writing RTL code directly, especially for complex algorithms.
- 📘 High-Level Synthesis Made Easy: Synthesizing Behavioral Descriptions directly into Hardware Circuits
- 📘 High-Level Synthesis Blue Book
- 🔗 Vitis HLS — Vitis™ Tutorials
🔶 IP Core Based Design
IP (Intellectual Property) cores are pre-designed circuit blocks that can be reused in multiple designs. Using IP cores can significantly speed up the design process and improve the reliability of the design, since the IP cores have been pre-verified.
- 📝 Basics of core-based FPGA design
- 📝 IP Cores For FPGA Designs
- 📝 So you want to Design a FPGA IP Core!
🔶 Hardware-Software Co-Design
In many FPGA applications, a portion of the system functionality is implemented in software running on an embedded processor, while other portions are implemented in custom hardware on the FPGA. Hardware-software co-design involves designing the hardware and software components together to achieve the best overall system performance.
🔶 Design for Test (DFT)
This is a design methodology where testability features are added to the hardware design to make it easier to test and debug. This might include adding scan chains or built-in self-test (BIST) capabilities.
🔶 Timing-Driven Design
This design methodology prioritizes meeting timing constraints. This may involve strategies such as pipelining to increase clock speed, carefully partitioning the design to reduce routing congestion, or using timing constraints files to guide the place-and-route process.
🔶 Resource-Optimized Design
This involves making the most efficient use of FPGA resources such as logic blocks, DSP blocks, and memory blocks. It might involve strategies such as sharing resources between multiple functions, or optimizing the logic to reduce the number of logic blocks used.
These methodologies are not mutually exclusive and can often be used together in the same design. The appropriate methodology to use depends on the specific design goals and constraints.
🔵 Timing Analysis
Proficiency in handling setup and hold times, clock domain crossings, and other timing-related issues.
🔵 Embedded Systems
Understanding of embedded system design, including both hardware and software aspects.
🔵 Digital Signal Processing
Depending on the application, an understanding of digital signal processing concepts can be very useful.
- 📘💎 The Scientist and Engineer's Guide to Digital Signal Processing - Steven W. Smith
- 🔗 controlpaths - Blogs in control and signal processing
- 🎞️ Digital Signal Processing (ECSE-4530) Lectures, Fall 2014 (YouTube Playlist)
- 📘 Real-Time Digital Signal Processing: Fundamentals, Implementations and Applications - Sen M. Kuo, Bob H. Lee, Wenshun Tian
- 📘 Schaum's Outline of Signals and Systems - Hwei P. Hsu
- 📘💎 Digital Signal Processing - John G. Proakis, Dimitris K. Manolakis
- 🎞️ Discrete Fourier Transform - Simple Step by Step
- 🎞️ The Fast Fourier Transform (FFT): Most Ingenious Algorithm Ever?
- 🎞️ The FFT Algorithm - Simple Step by Step
🔵 Power and Thermal Management
Techniques to optimize the power consumption and manage heat dissipation.
🔵 Software Development Skills
Including proficiency in languages such as C/C++, Python, and knowing how to work with software drivers for hardware interfaces.
🔵 FPGA Toolchain
Understanding of specific FPGA toolchains like Xilinx Vivado, Intel Quartus, etc.
- 🔗 EDA Playground
- 🔗 Yosys Open SYnthesis Suite
- 🔗 GHDL - an open-source simulator for the VHDL language
- 🔗 GTKWave - a fully featured GTK+ based wave viewer
- 🔗 ModelSim HDL simulator
- 🔗 AMD (Xilinx) Design Tools
- 🔗 Intel (Altera) Development Tools
- 🔗 Lattice FPGA Design Software
- 🔗 Cadence Design Tools
- 🔗 Synopsys Design Tools
- 🔗 nextpnr
✳️ Verification Engineer
The other side of the coin is the verification engineer they play a crucial role in the development of hardware and software systems, ensuring the design meets the specified requirements. Here are several important subjects and topics that a Verification Engineer should know:
🔵 Hardware Verification Languages (HVLs)
These include SystemVerilog, which is commonly used for hardware verification, and others like Property Specification Language (PSL).
- 📝 SystemVerilog Tutorial
- 📝 SystemVerilog.io
- 📝 Sv-lang
- 📝 VLSI Verify
- 📝 Property Specification Language Tutorial
🔵 Testbench Creation
Verification engineers must know how to develop testbenches to simulate and verify the functionality and performance of a design.
🔵 SystemVerilog Assertions and Functional Coverage
These are key for ensuring the design behaves as expected under all conditions, and for making sure all important scenarios are tested.
🔵 Universal Verification Methodology (UVM)
This is an industry-standard methodology for verification of hardware designs.
- 🔗 UVM (Standard Universal Verification Methodology)
- 📝 UVM 1.2 User Guide
- 📝 UVM Guide for Beginners
- 📘 The UVM Primer: A Step-by-Step Introduction to the Universal Verification Methodology - Ray Salemi
🔵 Formal Verification Methods
Including equivalence checking and model checking.
- 📝 Verilog, Formal Verification and Verilator Beginner's Tutorial
- 📝 11 Myths About Formal Verification
🔵 Scripting Languages
Languages such as TCL, Python, Perl, or Shell scripting are often used to automate tasks in the verification process.
- 📝 Why you need to learn Tcl
- 📝 Top 10 Tips for efficient Perl Scripting for Chip Designers
- 📝 The Python for Verification Series
- 🔗 cocotb, a coroutine based cosimulation library for writing VHDL and Verilog testbenches in Python
🔵 Industry Standards
Familiarity with relevant industry standards can be important, especially in fields like telecommunications or automotive.
Contribution
If you are an expert or experienced individual in the field of FPGA and ASIC design, I kindly request for comments and suggestions on this roadmap.
What topics should be included in the FPGA / ASIC design roadmap?
What are the best resources you know to learn each topic in the roadmap?
Feel free to open an issue or make a pull request and express your ideas.
The first step to building a roadmap is to gather information, categorize it under different titles, and determine the importance of each title. So I started a discussion about the roadmap on Reddit.
Acknowledgement
Special thanks to u/No_Delivery_1049 the reddit user who made this comment that served as the base of this roadmap.