FPGA Engineer interview questions
100 real questions with model answers and explanations for Junior candidates.
See a FPGA Engineer resume example →Practice with flashcards
Spaced repetition · Hunter Pass
Questions
An FPGA is a reconfigurable chip whose hardware structure is programmed for a particular digital circuit.
- A CPU executes a sequence of instructions on mostly fixed hardware, while an FPGA can implement many operations as parallel circuits.
- An ASIC has fixed circuitry after fabrication and can offer better density or efficiency, but an FPGA can be reprogrammed after manufacturing.
- An FPGA design maps logic into resources such as LUTs, flip-flops, memories, DSP blocks, and routing.
Why interviewers ask this: The interviewer is checking whether the candidate understands what is physically being designed on an FPGA.
A configuration bitstream programs the FPGA resources and their connections to implement a synthesized design.
- Configuration bits select LUT contents, routing switches, I/O behavior, and options inside hard blocks.
- The file is generated for a specific FPGA family and device, so it is not portable machine code.
- Many SRAM-based FPGAs load the bitstream from external flash or a host each time power is applied.
Why interviewers ask this: A strong answer connects the bitstream to physical configuration rather than treating it as software firmware.
An HDL describes hardware structure and behavior that operate concurrently rather than a sequence of processor instructions.
- Separate always blocks or VHDL processes represent logic active at the same time, even though statements inside one procedural block have defined semantics.
- Signal widths, clocks, registers, and combinational paths affect the resulting circuit directly.
- Synthesizable HDL must map to available hardware, while a simulator can execute additional verification-only constructs.
Why interviewers ask this: The interviewer wants to see that the candidate reasons about circuits and concurrency rather than software execution order.
A Verilog module defines a reusable hardware block with an interface made of input, output, and inout ports.
- Input ports carry signals into the block, while output ports expose values produced inside it.
- Port widths such as logic [7:0] data make the number of physical signal bits explicit.
- Instantiating a module creates hardware for that block and connects its ports to signals in the parent module.
Why interviewers ask this: The interviewer is checking whether the candidate understands basic RTL hierarchy and connectivity.
Combinational logic is commonly described with assign statements or an always_comb block that assigns every output on every path.
- An assign statement suits a direct expression such as assign sum = a + b.
- always_comb automatically reacts to signals read by the block and allows procedural if or case logic.
- Every assigned variable needs a value for all input combinations, often through a default assignment, to avoid a latch.
Why interviewers ask this: A strong answer shows both valid coding forms and the complete-assignment rule for combinational hardware.
Clocked sequential logic is normally described in an always_ff block triggered by a clock edge.
- always_ff @(posedge clk) models flip-flops that sample their next values on the rising edge.
- Non-blocking assignments preserve the simultaneous update behavior expected from a bank of registers.
- A reset or clock enable belongs inside the block when those controls are part of the intended register behavior.
Why interviewers ask this: The interviewer is checking whether the candidate can express registers with clear synchronous semantics.
A continuous assignment drives a net from an expression continuously, while a procedural assignment executes inside an always or initial block.
- assign y = a & b updates y whenever an operand changes and directly represents combinational logic.
- Procedural assignments support control flow such as if and case and usually target variables declared as logic in SystemVerilog.
- A signal should normally have one clear driver, because multiple procedural drivers are not ordinary synthesizable register behavior.
Why interviewers ask this: The interviewer is evaluating whether the candidate can choose the correct assignment context and avoid conflicting drivers.
A blocking assignment takes effect immediately within its procedural sequence, while a non-blocking assignment schedules the update for the end of the current simulation step.
- Blocking = is the usual choice for temporary calculations and outputs in combinational always_comb blocks.
- Non-blocking <= is the usual choice for registers in edge-triggered always_ff blocks.
- Using non-blocking assignments for q1 <= d and q2 <= q1 makes q2 receive the previous q1 value, matching two cascaded flip-flops.
Why interviewers ask this: A strong answer relates assignment semantics to the hardware and simulation behavior they are meant to model.
A latch is inferred when combinational procedural logic leaves an output unassigned for some input condition, forcing it to retain its previous value.
- An if without an else can infer a latch when the block assigns the output only in the true branch.
- Assigning a default value before the conditional covers the missing paths without repeating every assignment.
- A latch is level-sensitive storage and is usually unintended in synchronous FPGA RTL.
Why interviewers ask this: The interviewer is checking whether the candidate recognizes incomplete combinational assignments and their hardware consequence.
always_comb automatically includes dependencies read by the block and states the designer's combinational intent.
- A manual list such as always @(a or b) can become stale when the expression later starts reading c.
- A missing sensitivity signal can make RTL simulation disagree with the synthesized combinational circuit.
- Tools can apply extra checks to always_comb, including restrictions on how its assigned variables are driven elsewhere.
Why interviewers ask this: The interviewer wants to see that the candidate uses language constructs that prevent simulation and synthesis mismatches.
wire represents a net driven by a continuous source, while logic is a variable type suitable for most single-driver RTL signals.
- A module output or assign statement can drive a wire because the net reflects its driver's value.
- An always_comb or always_ff block assigns a logic variable procedurally.
- Declaring a signal as logic does not create a flip-flop by itself, because the surrounding assignment and control structure determine the hardware.
Why interviewers ask this: A strong answer separates data type declarations from the logic inferred by the code.
Parameters let one RTL module be configured at elaboration time without duplicating its implementation.
- A WIDTH parameter can define port widths, register sizes, and loop bounds consistently.
- Each module instance can override the default parameter with a constant value.
- Parameters describe static hardware choices and do not behave like writable registers during operation.
Why interviewers ask this: The interviewer is checking whether the candidate can write reusable hardware with compile-time configuration.
Signal width and signedness determine how operands are extended, how arithmetic is interpreted, and which result bits are retained.
- Adding two unsigned 8-bit values may need a 9-bit destination to preserve a carry result up to 510.
- A signed value uses its top bit as the sign and is sign-extended, while an unsigned value is normally zero-extended.
- Explicit sizes and casts prevent unsized literals or mixed signed operands from producing surprising comparisons and arithmetic.
Why interviewers ask this: The interviewer is evaluating whether the candidate can prevent silent truncation and signedness bugs.
Verilog simulation uses 0 and 1 for known logic levels, X for an unknown value, and Z for high impedance.
- X can appear from an uninitialized register, conflicting drivers, or an operation whose result cannot be determined.
- Z models a released tri-state connection, which is mainly meaningful at FPGA I/O pins rather than ordinary internal fabric.
- Inspecting X values helps expose missing reset or assignment logic instead of masking the problem with a forced zero.
Why interviewers ask this: A strong answer explains how four-state simulation reveals real RTL mistakes and where high impedance applies.
Bitwise operators act on corresponding bits, logical operators produce a truth value, and reduction operators combine all bits of one vector.
- For 4'b1010 and 4'b1100, bitwise & produces 4'b1000.
- Logical && treats each whole operand as false or true and returns a one-bit result.
- Reduction &data returns one only when every bit of data is one, while reduction |data detects any set bit.
Why interviewers ask this: The interviewer is checking whether the candidate can predict expression width and meaning instead of confusing similar operators.
Concatenation, replication, and part-selects assemble or extract explicit groups of vector bits.
- {header, payload} places the header bits above the payload bits in one wider vector.
- {4{bit_value}} repeats one value four times and is useful for masks or explicit extension.
- data[7:4] selects a four-bit slice, so declared index direction and boundary positions must be checked carefully.
Why interviewers ask this: The interviewer is evaluating basic fluency with the vector operations used throughout RTL.
Both statements can describe multiplexing, but an if chain naturally expresses priority while case selects among explicit values of one expression.
- In if a then else if b, a wins when both conditions are true, so synthesis builds priority behavior.
- A case statement is clear for an opcode or FSM state with mutually exclusive encoded choices.
- A default branch or an assignment before the statement covers unmatched values and prevents unintended storage.
Why interviewers ask this: A strong answer connects control-flow syntax to the selection hardware and completeness it implies.
A VHDL entity declares a block's external interface, while an architecture defines one implementation of that interface.
- The entity lists ports with directions such as in, out, and inout and types such as std_logic_vector.
- The architecture contains concurrent assignments, processes, component instances, and internal signals.
- Keeping interface and implementation separate allows more than one architecture to be associated with the same entity.
Why interviewers ask this: The interviewer is checking whether the candidate understands the basic organization of a VHDL design unit.
A VHDL signal represents communication between concurrent logic, while a variable updates immediately within the process or subprogram that owns it.
- A signal assignment with <= schedules a new value, so reads later in the same process may still see the old signal value.
- A variable assignment with := takes effect immediately for following statements in that process activation.
- Variables are useful for intermediate calculations, but the process structure still determines whether synthesis creates combinational logic or registers.
Why interviewers ask this: A strong answer explains update semantics instead of claiming that one form always means hardware and the other does not.
A VHDL process describes either combinational or clocked behavior through its sensitivity and assignment structure.
- A combinational process reads all relevant inputs and assigns every output on every path, with process(all) available in VHDL-2008.
- A clocked process commonly uses rising_edge(clk) and updates signals that synthesize into flip-flops.
- Concurrent processes execute independently, so their source-code order does not serialize the hardware blocks.
Why interviewers ask this: The interviewer is evaluating whether the candidate can map VHDL process templates to intended circuits.
Locked questions
- 21
What is a lookup table in an FPGA?
fpga - 22
What role do flip-flops play in an FPGA logic block?
fpgaresources - 23
What is a dedicated carry chain in an FPGA?
fpga - 24
What is block RAM in an FPGA?
fpga - 25
How does distributed RAM differ from block RAM?
distributed - 26
Which arithmetic operations are FPGA DSP blocks designed to implement?
designfpga - 27
Why does an FPGA have dedicated clock resources?
fpga - 28
What functions are provided by FPGA I/O blocks?
fpga - 29
What is the difference between combinational and sequential logic?
- 30
What does synchronous design mean?
design - 31
What are setup time and hold time for a flip-flop?
timingresources - 32
Why is a clock enable usually preferred over creating a clock with ordinary logic?
- 33
Why can an asynchronous input cause metastability?
cdcasync - 34
What is the difference between synchronous and asynchronous reset?
async - 35
Why is asynchronous reset deassertion often synchronized to the clock?
async - 36
Does every register in an FPGA design need an explicit reset?
designfpga - 37
What is a finite-state machine in RTL?
rtlfsm - 38
What is the difference between Moore and Mealy state-machine outputs?
- 39
How can SystemVerilog represent FSM states clearly?
system-designfsmsystemverilog - 40
Why should an FSM handle illegal or unexpected state values?
fsm - 41
How does a binary counter work in synchronous RTL?
rtl - 42
How does a shift register work?
- 43
How are negative integers represented in two's complement?
- 44
What is arithmetic overflow in a fixed-width RTL signal?
rtl - 45
What does a fixed-point format represent?
- 46
How do addition and multiplication affect fixed-point scaling?
scaling - 47
What is the difference between simulation and synthesis?
verificationsynthesis - 48
Which common HDL constructs are simulation-only rather than synthesizable RTL?
rtlhdlsynthesis - 49
What is the purpose of an HDL testbench?
verificationhdl - 50
How do Verilator and cocotb fit into junior FPGA verification?
fpga - 51
How would you implement a modulo-100 counter with enable and a one-cycle rollover pulse?
- 52
A programmable timer fires one clock late; how would you find and fix the RTL bug?
rtl - 53
You need a slow periodic update from a fast system clock; how would you implement it without creating another clock in fabric?
system-design - 54
How would you implement a push-button debouncer for an FPGA input?
debouncefpga - 55
What testbench would you write for a button debouncer?
debounceverification - 56
How would you create a one-cycle pulse when a synchronized level rises?
- 57
A downstream block cannot see a one-cycle status pulse; how would you make the event visible for several cycles?
- 58
How would you implement an 8-bit PWM output with a programmable duty value?
- 59
How would you verify a PWM module without judging it only by eye in a waveform?
- 60
How would you implement a fixed-priority arbiter for several requesters?
- 61
A status register must remember short error events until software clears them; how would you code it?
- 62
How would you code a small synchronous memory so synthesis can infer FPGA block RAM?
fpgamemorysynthesis - 63
A memory testbench expects read data in the request cycle, but the inferred RAM returns it later; what would you change?
memoryverification - 64
How would you design a basic single-clock FIFO?
designfifo - 65
A circular FIFO reports empty when its read and write pointers match; how would you distinguish empty from full?
fifo - 66
How should a single-clock FIFO handle read and write requests in the same cycle?
fifo - 67
What self-checking testbench would you write for a single-clock FIFO?
fifoverification - 68
How would you break a basic UART receiver into RTL blocks?
rtlinterfaces - 69
A UART RX sees a falling edge that returns high before the first data bit; how should it respond?
interfaces - 70
What concrete scenario would you use to test a UART receiver end to end?
interfaces - 71
The system clock is not an exact multiple of the UART baud rate; what would you check before using an integer divider?
system-designinterfaces - 72
A UART receiver returns correct data but occasionally flags a bad stop bit; how would you debug it?
interfaces - 73
How would you implement the receive side of an SPI mode-0 shift register?
evm - 74
What test would catch an SPI receiver that loses the final bit of each word?
evm - 75
How would you implement a one-entry ready-valid buffer?
- 76
How would you test that a ready-valid source behaves correctly under backpressure?
backpressure - 77
A combinational output keeps its previous value for one input case; how would you diagnose and fix it?
- 78
RTL simulation updates an output only when input a changes, but synthesis behaves correctly when input b changes; what is the likely cause?
rtlsynthesisverification - 79
A two-stage pipeline passes new input through both stages in one simulation clock; what RTL mistake would you inspect?
rtlpipeliningownership - 80
A combinational always block uses non-blocking assignments and its testbench sees a stale intermediate result; how would you clean it up?
assignmentsverification - 81
A module never leaves reset in hardware, although its standalone test passes; what reset integration mistake would you check first?
ownership - 82
An intended asynchronous reset only takes effect on the next clock in RTL simulation; what coding error would you inspect?
rtlasyncverification - 83
Simulation starts with X values, but a board test appears to start at zero; how should you handle the difference?
verification - 84
Synthesis reports multiple drivers on a register; how would you restructure the RTL?
rtlsynthesis - 85
An unsigned packet length is reported as negative after an RTL change; how would you locate the width or signedness bug?
rtl - 86
You wrote an RTL memory, but synthesis used many flip-flops instead of block RAM; what would you inspect?
rtlresourcesmemory - 87
The timing report shows negative setup slack on a register-to-register path; what would you do first?
timing - 88
A path has negative hold slack; would lowering the clock frequency fix it?
timing - 89
Where would you look in a static timing report to understand one failing path?
timing - 90
Implementation reports unconstrained timing paths; how would you respond?
timing - 91
A setup violation crosses between unrelated clocks; should you immediately mark it as a false path?
- 92
A long combinational calculation fails setup timing; how would you decide where to add a pipeline register?
pipeliningci-cdtiming - 93
A divided clock was routed through ordinary logic and now shows large skew; how would you redesign it?
- 94
How would you bring an asynchronous one-bit status level into a clock domain?
cdcasync - 95
A one-cycle pulse from a fast clock domain is sometimes missed by a slower domain; why does a two-flip-flop synchronizer not solve it?
resourcescdc - 96
Several bits of an asynchronous status bus are synchronized independently and sometimes form an impossible value; what went wrong?
formsasync - 97
Can a two-flip-flop synchronizer safely transfer a binary counter value between clock domains?
resourcescdc - 98
A synchronized status level works, but its destination edge detector occasionally creates an unexpected pulse after reset; what would you inspect?
- 99
Would you choose binary or one-hot encoding for a small control FSM on an FPGA?
fpgafsm - 100
An FSM meets function in simulation but misses timing after synthesis; how would you evaluate changing its encoding?
decision-makingtimingsynthesis