🚧 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 want 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 complete roadmap now, the contents in this repository might not yet suitable for you.
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.
- What are FPGAs?
- Introduction to FPGA - Shawn Hymel (YouTube Playlist)
- FPGA 101 - Nandland
- Nandland (YouTube Channel)
- FPGA 4 Fun
- EDA Playground
- FPGAs for Beginners (YouTube Channel)
- asic-world.com
- Project F - FPGA Tutorials
- Learning FPGA, yosys, nextpnr, and RISC-V
- Doulos - Global Independent Leaders in Design and Verification KnowHow
- Home of MicroZed Chronicles, Blogs on AMD, Intel, Lattice FPGA
- Tiny Tapeout: from idea to chip design in minutes!
- Coursera - FPGA Design for Embedded Systems Specialization
- 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
- AMD Based FPGA Projects - Whitney Knitter
- AMD Based FPGA Projects - Adam Taylor
- RISC-V Single Cycle Core in Verilog
- SPI Project in FPGA - Ambient Light Sensor
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
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
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
Knowledge of simulation tools, testbenches, and hardware debugging techniques.
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®
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.
As an FPGA (Field Programmable Gate Array) implement engineer, there are several important topics to be well-versed in:
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:
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.
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 (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.
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.
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.
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.
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.
Proficiency in handling setup and hold times, clock domain crossings, and other timing-related issues.
Understanding of embedded system design, including both hardware and software aspects.
Depending on the application, an understanding of digital signal processing concepts can be very useful.
Techniques to optimize the power consumption and manage heat dissipation.
Including proficiency in languages such as C/C++, Python, and knowing how to work with software drivers for hardware interfaces.
Understanding of specific FPGA toolchains like Xilinx Vivado, Intel Quartus, etc.
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:
These include SystemVerilog, which is commonly used for hardware verification, and others like Property Specification Language (PSL).
Verification engineers must know how to develop testbenches to simulate and verify the functionality and performance of a design.
These are key for ensuring the design behaves as expected under all conditions, and for making sure all important scenarios are tested.
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
Including equivalence checking and model checking.
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
Familiarity with relevant industry standards can be important, especially in fields like telecommunications or automotive.
Special thanks to u/No_Delivery_1049 the reddit user who made this comment that served as the base of this roadmap.