๐ง 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.
- ๐๐ถ What are FPGAs?
- ๐๏ธ๐ถ Introduction to FPGA - Shawn Hymel (YouTube Playlist)
- ๐๐ถ FPGA 101 - Nandland
- ๐๏ธ Nandland (YouTube Channel)
- ๐๏ธ๐ถ FPGAs for Beginners (YouTube Channel)
- ๐ asic-world.com
- ๐๐ถ๐ 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
- ๐๏ธ 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
- ๐ 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
- ๐ FPGA 4 Fun
- ๐ 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
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:
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.
- ๐ Basics of core-based FPGA design
- ๐ IP Cores For FPGA Designs
- ๐ So you want to Design a FPGA IP Core!
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.
- ๐ Verilog, Formal Verification and Verilator Beginner's Tutorial
- ๐ 11 Myths About Formal Verification
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.
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.
Special thanks to u/No_Delivery_1049 the reddit user who made this comment that served as the base of this roadmap.