Skip to content

About

A roadmap for those who want to build a career as an FPGA / ASIC Engineer

Resources

Contributing

Stars

728 stars

Watchers

10 watching

Forks

Latest commit

 

History

65 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

FPGA / ASIC Engineering Roadmap

This roadmap helps beginners who want to start a career in FPGA and ASIC (chip) design, and helps current practitioners broaden their skills. FPGA and ASIC engineers write the same kind of code (RTL) and share most of the fundamentals; the main differences are in the tools, the implementation flow and the cost of a mistake.

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.

Topic priority (shown under each topic in the Roadmap):

  • Required : Every engineer in the field needs it.
  • Recommended : Needed for most jobs or for a given specialization.
  • Optional : Useful in specific domains or for going deeper.

New to the field? Start with the suggested learning path below, and keep this in mind while you study:

Warning

You do not need to read every book and article or watch every video listed here. Study enough to understand a topic, then practice by writing and simulating real designs. Hardware design is learned by doing.

Suggested Learning Path

  1. Learn digital logic and computer architecture. Gates, flip-flops, finite-state machines, and how a simple CPU works: Nand2Tetris, Computation Structures, and the book Digital Design and Computer Architecture (see Digital Logic and Computer Architecture).
  2. Pick one HDL and practice small problems. Verilog/SystemVerilog with HDLBits, or VHDL with VHDLwhiz. Do not worry about the "best" language: the concepts transfer (see Hardware Description Languages).
  3. Set up free simulation tools. Icarus Verilog or Verilator (or GHDL for VHDL) with GTKWave, or simply use EDA Playground in the browser (see Simulation, Testbenches and Debugging).
  4. Write clean, synthesizable RTL. Learn state machines, registers, resets and coding style before writing big designs (see RTL Design Practices).
  5. Run the full FPGA flow on real hardware. Synthesize, place-and-route and program a cheap board (see Getting an FPGA Board) with Nandland or Project F.
  6. Learn timing, clock domain crossing and standard interfaces. These separate hobby designs from professional ones (see Timing Analysis and Constraints, Clock Domain Crossing and Resets, and Interfaces, Protocols and Memory).
  7. Build projects. A UART, a VGA/HDMI display controller, a small RISC-V CPU (see Projects).
  8. Specialize. Go deeper into implementation, verification or ASIC design.

Learning Resources

A general collection of courses, tutorials, books and websites to get started. Resources for specific topics are listed in the Roadmap section below, and neighboring fields (electronics, RF, power electronics) are at the end of this section.

Related Fields (Optional)

Electronics, semiconductor physics, RF, power electronics and microcontrollers are not required to start with FPGA/ASIC design, but they help for board-level work, analog/mixed-signal design and chip fabrication.

Projects

Project ideas and complete open-source designs to practice on and read. Start small (blinking LEDs, a UART, a display controller) before moving on to CPUs and SoCs.

Getting an FPGA Board

You can learn a lot with simulation alone, but programming a real board makes the concepts concrete. Pick a board whose toolchain you are comfortable with:

Roadmap

The world of FPGA and ASIC engineering thrives on two crucial disciplines: Implementation Engineering and Verification Engineering. While intertwined, each plays a distinct role in bringing innovative ideas to life in programmable hardware or custom silicon. Engineers who target custom chips additionally need ASIC-specific physical design and sign-off skills.

Implementation Engineers are the architects of the design, meticulously crafting it 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.

The topics are ordered roughly in the sequence in which you should learn them: Common Skills first (needed by everyone), then the Implementation, Verification and ASIC Design specializations, and finally domains, community and career. Each topic is tagged with its priority.

✳️ Common Skills

🔵 Digital Logic and Computer Architecture

Priority: Required

Logic gates, combinational and sequential circuits, finite-state machines, memory architectures, and how CPUs and memory systems work. This can be extended to specialized architectures, such as Graphics Processing Units (GPUs) or custom accelerator designs.

🔵 Linux, Scripting and Version Control

Priority: Required

FPGA and ASIC tools run mostly on Linux and are driven by scripts. Comfort with the command line, Git, and a scripting language (Tcl, Python, Make, shell) lets you automate builds, simulations and regressions, and is expected in every job.

🔵 Hardware Description Languages (HDLs)

Priority: Required

Knowledge of VHDL and/or Verilog is crucial as they're commonly used to design and describe digital circuits. Pick one first and learn the other later; the concepts transfer.

Modern HDLs and HDL-embedded generators (optional, learn them after you are comfortable with Verilog or VHDL):

🔵 RTL Design Practices

Priority: Required

Writing code that synthesizes into the hardware you intend: registers versus latches, blocking versus non-blocking assignments, finite-state machine (FSM) coding styles, pipelining, and number representation and arithmetic (fixed-point, multipliers, CORDIC). Bad habits here cause bugs that are hard to find later.

Pipeline design and flow control (skid buffers, FIFOs): decoupling stages, managing backpressure, and avoiding timing bottlenecks in pipelined designs.

🔵 Simulation, Testbenches and Debugging

Priority: Required

Every designer simulates their own code. Learn to write simple self-checking testbenches, read waveforms, lint your code, and debug on real hardware with logic analyzers built into the FPGA. (Advanced verification methodology is covered under Verification Engineer.)

🔵 FPGA Architecture

Priority: Required

What is inside an FPGA: look-up tables (LUTs), flip-flops, carry chains, block RAM, DSP slices, clocking resources (PLL/MMCM), I/O standards and routing. Knowing the architecture explains why some code maps well to hardware and some does not.

🔵 FPGA Toolchain

Priority: Required

Understanding of specific FPGA toolchains like Xilinx Vivado, Intel Quartus, etc. Vendor tools have free editions for most small and mid-size devices; open-source tools are a great way to understand what each step of the flow does.

Simulation, synthesis and place-and-route (open source):

Vendor and commercial tools:

🔵 Familiarity with FPGA and ASIC Design Flow

Priority: Required

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.

🔵 Timing Analysis and Constraints

Priority: Required

A design only works if signals arrive on time. Learn setup and hold times, clock frequency and slack, critical paths, and how to write timing constraints (SDC/XDC) and read timing reports. Proficiency in these is what makes a design run at the intended clock speed.

🔵 Clock Domain Crossing and Resets

Priority: Required

Signals that cross between unrelated clocks, and resets that are not handled properly, are among the most common causes of intermittent hardware bugs. Learn synchronizers, handshakes, asynchronous FIFOs and reset strategies.

🔵 Interfaces, Protocols and Memory

Priority: Required

Real designs talk to other chips and blocks. Start with simple serial protocols (UART, SPI), then learn on-chip bus standards (AXI, AXI-Stream, Wishbone), and later memory (DDR) and high-speed interfaces (Ethernet, PCIe). Both implementation and verification engineers need to be aware of requirements, architecture, and interconnect standards and interfaces.

🔵 Industry Standards

Priority: Recommended

Familiarity with relevant industry standards can be important, especially in fields like telecommunications or automotive.


✳️ Implementation Engineer

As an FPGA (Field Programmable Gate Array) implementation engineer, there are several important topics to be well-versed in:

🔵 FPGA Design Methodologies

Priority: Required

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. It is an advanced topic; learn RTL first.

🔶 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.

🔶 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.

🔶 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.

🔵 SoC FPGAs and Soft Processors

Priority: Recommended

Many modern FPGAs combine programmable logic with hard processor cores (for example AMD Zynq), or run a processor you build in the fabric (soft cores such as MicroBlaze or RISC-V). Working at this boundary needs both hardware and embedded software knowledge: bus interfaces, device drivers, booting and Linux.

🔵 Digital Signal Processing

Priority: Recommended

Depending on the application, an understanding of digital signal processing concepts can be very useful.

🔵 Power and Thermal Management

Priority: Optional

Techniques to optimize the power consumption and manage heat dissipation.

🔵 Board Bring-up and PCB Design for FPGAs

Priority: Optional

When a design moves from a development board to custom hardware, you need to understand FPGA configuration and boot, power supplies and sequencing, pin assignment, and signal integrity for high-speed signals.

🔵 FPGA Bitstream Documentation and Open Toolchains

Priority: Optional (advanced)

FPGA vendors do not publish the format of the bitstream (the file that configures the chip). Open-source projects document it by generating many small designs with vendor tools and analyzing how each change affects the bitstream (fuzzing), then store the result in a database used by open synthesis and place-and-route tools. This is advanced work that needs solid knowledge of FPGA architecture, the toolchain and scripting (Python, Tcl) first. The usual learning path is: master FPGA Architecture and the FPGA Toolchain, run the open-source flow on a supported board, then read the documentation of a project such as Project X-Ray (Xilinx 7 Series) and reproduce its fuzzers. Check the license and terms of use of the vendor tools you analyze.

🔵 Software Development Skills

Priority: Recommended

Including proficiency in languages such as C/C++, Python, and knowing how to work with software drivers for hardware interfaces.

🔵 Embedded Systems

Priority: Optional

Understanding of embedded system design, including both hardware and software aspects.

🔵 Application Domains

Priority: Optional

FPGAs are used in networking, video and imaging, software-defined radio, motor control, finance, hardware security, and machine-learning acceleration. Pick a domain that interests you and build a project in it.


✳️ Verification Engineer

The other side of the coin is the verification engineer, who plays a crucial role in the development of hardware and software systems by ensuring the design meets the specified requirements. Verification is a large part of both FPGA and ASIC projects, and in ASIC work it usually takes more effort than design itself. Here are several important subjects and topics that a Verification Engineer should know:

🔵 Hardware Verification Languages (HVLs)

Priority: Required

These include SystemVerilog, which is commonly used for hardware verification, and others like Property Specification Language (PSL).

🔵 Testbench Creation

Priority: Required

Verification engineers must know how to develop testbenches to simulate and verify the functionality and performance of a design, including self-checking testbenches, reference models and scoreboards.

🔵 Randomization, Assertions and Functional Coverage

Priority: Required

Constrained-random stimulus finds corner cases that hand-written tests miss. Assertions and functional coverage 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)

Priority: Recommended

This is an industry-standard methodology for verification of hardware designs, and is expected in most ASIC verification jobs.

🔵 Formal Verification Methods

Priority: Recommended

Including equivalence checking and model checking.


✳️ ASIC Design Engineer

ASIC (Application-Specific Integrated Circuit) engineers take RTL through synthesis, floorplanning, placement, clock tree synthesis, routing and sign-off to produce the final chip layout (GDSII). Since a chip cannot be patched after fabrication, verification, timing sign-off and physical checks are even more critical than in FPGA design. Open-source tools and open process design kits (PDKs) now let anyone learn this flow for free. The front-end work (RTL, verification, synthesis, DFT) builds directly on the Common Skills and Verification sections above; the back-end work is physical design.

🔵 RTL-to-GDSII Flow

Priority: Required

The complete path from RTL to a manufacturable layout, using free tools. Tiny Tapeout and the Zero to ASIC Course are the easiest way to run this flow end to end.

🔵 Design for Test (DFT)

Priority: Recommended

Testability features are added to the hardware design to make it easier to test and debug manufactured chips. This includes scan chains, automatic test pattern generation (ATPG) and built-in self-test (BIST). Unlike FPGAs, every manufactured ASIC must be tested, so DFT is a core ASIC skill.

🔵 Low-Power Design

Priority: Recommended

Techniques such as clock gating, power gating and multiple voltage domains, described with the Unified Power Format (UPF). Power is usually a key constraint in chip projects. Learn the basics from the commercial tool documentation and training of Cadence and Synopsys.

🔵 Open Process Design Kits (PDKs)

Priority: Recommended

A PDK describes a foundry's manufacturing process (cell libraries, design rules, device models). Open PDKs are what make open-source chip design possible.

🔵 Layout, Physical Verification and Sign-off

Priority: Recommended

Viewing and editing layouts, checking design rules (DRC) and layout-versus-schematic (LVS), and verifying timing before tape-out.

🔵 CMOS VLSI Fundamentals

Priority: Recommended

How transistors form gates and how gate-level behavior, delay and power follow from the circuit level.

🔵 Analog and Mixed-Signal Basics

Priority: Optional

Even digital ASICs contain analog blocks (PLLs, ADCs, I/O). Digital engineers benefit from knowing circuit simulation and schematic capture to understand what these blocks need from the digital side.

🔵 Prototyping and Tape-out

Priority: Optional

Large ASICs are usually prototyped on FPGAs before fabrication. Tape-out is the hand-off of the final layout to the foundry; low-cost shuttle services let students and hobbyists get real chips made.

Community and Career

Hardware design is easier with other people to ask. Search before asking, share your code and the exact error message, and be specific about what you tried:

Typical entry-level roles are RTL/FPGA design engineer, design verification (DV) engineer, and physical design engineer. A public portfolio (simulated and hardware-tested projects on GitHub, ideally with testbenches and a README explaining the design) is the best way to show your skills, and interview preparation usually focuses on digital logic, FSMs, timing and clock domain crossing, and HDL coding questions:

Contribution

If you are an experienced FPGA or ASIC engineer, or a learner who found something that really helped, your input is welcome. In particular:

  • Which topics are missing or misplaced in this roadmap?
  • What are the best resources you know for each topic?

Please open an issue or make a pull request with your suggestions, and read the contribution guidelines before adding resources.

Acknowledgement

This roadmap started as a discussion on Reddit to gather information, categorize it under different topics, and decide how important each one is. Special thanks to u/No_Delivery_1049, whose comment served as the base of this roadmap, and to everyone who has contributed since.

About

A roadmap for those who want to build a career as an FPGA / ASIC Engineer

Resources

Contributing

Stars

728 stars

Watchers

10 watching

Forks

Releases

Packages

Contributors