Skip to content

Вопросы на собеседовании: FPGA-инженер

100 реальных вопросов с образцовыми ответами и пояснениями для уровня Middle.

Смотреть пример резюме: FPGA-инженер

Тренировка флешкарточками

Интервальное повторение · Hunter Pass

Вопросы

timing

Setup slack равен требуемому времени прихода данных на регистр назначения минус фактическое время их прихода.

  • Фактическое время включает задержку clock до исходного регистра, clock-to-Q, комбинационную задержку и задержку маршрутизации.
  • Требуемое время определяется захватывающим фронтом, задержкой clock до регистра назначения, setup time и setup uncertainty.
  • Положительный slack означает выполнение смоделированного требования, а отрицательный показывает величину опоздания.
  • Проверка должна проходить для каждого анализируемого setup corner и отношения clock, а не только для номинального периода.

Зачем это спрашивают: Интервьюер проверяет, умеет ли кандидат связать значение setup slack в отчёте с формирующими его компонентами clock и пути данных.

Период clock меняет setup-требование для следующего фронта, но обычно не меняет hold-требование для того же фронта.

  • Более длинный период даёт данным максимальной задержки больше времени, чтобы достичь назначения до setup-дедлайна.
  • Hold-анализ использует самый ранний приход данных после соответствующего захватывающего фронта, поэтому дополнительный период в проверку не входит.
  • Hold slack равен самому раннему приходу минус требуемое hold time с учётом минимальной задержки clock и skew.
  • Настоящее исправление hold добавляет минимальную задержку данных или меняет размещение и маршрутизацию, а не снижает частоту.

Зачем это спрашивают: Сильный ответ различает setup-анализ максимальной задержки и hold-анализ минимальной задержки через их реальные временные отношения.

timing

WNS описывает один худший slack, а TNS суммирует отрицательный slack по всем нарушенным конечным точкам группы путей.

  • WNS -0,20 нс означает, что хотя бы одна конечная точка не выполняет требование на 0,20 нс.
  • TNS отличает одно локальное нарушение от множества небольших нарушений, которым может потребоваться более широкое архитектурное изменение.
  • Количество нарушенных конечных точек добавляет контекст, поскольку одинаковый TNS может соответствовать разным распределениям ошибок.
  • Для setup и hold существуют отдельные WNS и TNS, которые нужно рассматривать независимо.

Зачем это спрашивают: Интервьюер оценивает, рассматривает ли кандидат timing closure одновременно как тяжесть худшего нарушения и общий масштаб проблем.

schedulingcommunication

Критический путь является ограниченным путём с наименьшим slack, а не обязательно путём с максимальным числом уровней логики.

  • Короткий путь с длинной программируемой маршрутизацией или высоким fanout может быть медленнее глубокого пути на локальных выделенных соединениях.
  • Carry chains и каскады DSP могут проводить несколько операций быстрее эквивалентной схемы через обычную маршрутизацию LUT.
  • Clock skew, uncertainty и отношение конечных точек влияют на slack даже при одинаковой задержке двух путей данных.
  • Критический путь может измениться после placement and routing, поскольку при synthesis физическая задержка только оценивается.

Зачем это спрашивают: Сильный ответ показывает, что timing FPGA зависит от физической маршрутизации и требований clock, а не только от глубины булевой логики.

Clock skew моделирует разницу прихода clock к исходному и принимающему регистрам, а uncertainty резервирует запас на jitter и ошибку фазы.

  • Более поздний приход захватывающего clock относительно запускающего обычно улучшает setup slack, поскольку у данных больше времени.
  • Тот же положительный skew обычно ухудшает hold slack, поскольку старые данные должны дольше оставаться стабильными на входе назначения.
  • Setup uncertainty сокращает окно максимальной задержки, а hold uncertainty увеличивает требуемый запас минимальной задержки.
  • Распространение clock, рассчитанное инструментом, и явный uncertainty нужно моделировать согласованно, чтобы не скрыть и не посчитать запас дважды.

Зачем это спрашивают: Интервьюер проверяет, понимает ли кандидат, почему одно отношение clock может улучшать setup и ухудшать hold.

clockingconstraints

Constraint generated clock сохраняет отношение частоты, фазы и источника между производным и основным clock.

  • Constraint указывает реальный вывод генерации и задаёт деление, умножение, сдвиг фазы или отображение фронтов.
  • Static timing после этого анализирует переходы между связанными доменами с правильными запускающими и захватывающими фронтами.
  • Объявление выхода как несвязанного primary clock теряет это отношение и создаёт неверные проверки или ненужные CDC-исключения.
  • Каждому физически используемому выходу PLL или делителя нужно своё описание generated clock, если инструмент FPGA не выводит его автоматически.

Зачем это спрашивают: Сильный ответ связывает constraints generated clock с точными отношениями фронтов, а не считает их метаданными для имён.

constraints

Constraints I/O delay моделируют timing за пределами FPGA относительно clock, управляющего интерфейсом.

  • Максимальная входная задержка включает самый поздний clock-to-out внешнего устройства и задержку платы до входа FPGA.
  • Минимальная входная задержка моделирует самый ранний приход и необходима для полноценной проверки input hold.
  • Максимальная выходная задержка представляет setup-требование приёмника вместе с задержкой платы, а минимальная учитывает его hold-требование.
  • Virtual clock удобен, когда внешний опорный clock не проходит через логику FPGA.

Зачем это спрашивают: Интервьюер оценивает, умеет ли кандидат ограничить интерфейс платы как по раннему, так и по позднему приходу данных.

ownershipconstraints

Constraint multicycle сообщает, что функционально корректному синхронному переносу разрешено занять больше стандартного числа фронтов clock.

  • Setup multicycle со значением N переносит захватывающий setup-фронт на N-й подходящий фронт, не добавляя оборудование.
  • Для соответствующего hold-отношения обычно нужна поправка N минус 1, чтобы инструмент не проверял hold относительно сдвинутого фронта.
  • Clock enable или условие протокола должно гарантировать, что назначение не использует промежуточные данные раньше времени.
  • Исключение должно охватывать только нужные регистры, поскольку широкий multicycle может скрыть обычные однотактовые нарушения.

Зачем это спрашивают: Сильный ответ объясняет и функциональный контракт, и связанные setup- и hold-семантики исключения multicycle.

constraintsasync

False path исключает timing-анализ только там, где функционального требования к переносу от запуска до захвата не существует.

  • Точечный false path подходит для конкретного нефункционального пути или первого каскада распознанного синхронизатора.
  • Asynchronous clock groups отключают timing в обоих направлениях между целыми группами clock и поэтому действуют намного шире.
  • Ни одно исключение не делает CDC безопасным, поэтому синхронизаторы, handshake или асинхронные FIFO всё равно необходимы.
  • Медленный, но функционально захватываемый синхронный путь не становится false path только потому, что редко меняется.

Зачем это спрашивают: Интервьюер проверяет, считает ли кандидат timing exceptions точной моделью, а не способом заглушить нарушения.

Явные constraints максимальной или минимальной задержки применяют, когда пути нужна граница задержки данных, которую не выражает стандартное отношение фронтов.

  • Maximum delay может ограничить source-synchronous путь или разброс между независимо синхронизированными битами Gray-кода.
  • Minimum delay может сохранить contamination delay там, где данные не должны прийти к назначению слишком рано.
  • Опция datapath-only исключает clock skew из границы, когда требование относится именно к задержке пути данных.
  • Эти constraints должны быть ограничены именованными конечными точками, поскольку они переопределяют обычные timing-предположения.

Зачем это спрашивают: Сильный ответ называет конкретные применения границ задержки и понимает, что эти команды заменяют часть стандартной timing-модели.

timing

Setup определяется поздним приходом данных, а hold ранним, поэтому их худшие условия process, voltage и temperature различаются.

  • Медленная логика и маршрутизация обычно ухудшают setup-проверки максимальной задержки.
  • Быстрая логика и маршрутизация обычно ухудшают hold-проверки минимальной задержки.
  • Тактовые сети могут масштабироваться иначе, чем пути данных, поэтому on-chip variation и skew способны изменить настоящий худший corner.
  • Прохождение одного номинального corner не означает closure, пока не пройдут все обязательные setup- и hold-варианты анализа.

Зачем это спрашивают: Интервьюер оценивает, понимает ли кандидат, почему multi-corner signoff нельзя заменить одним репрезентативным запуском.

Register retiming перемещает последовательностные границы через комбинационную логику, чтобы сбалансировать задержки путей с сохранением внешнего потактового поведения.

  • Перенос регистра через эквивалентную логику может сократить одну стадию без изменения числа тактов интерфейса.
  • Асинхронные resets, несовместимые enables, constraints dont_touch и некоторые границы памяти или DSP могут запрещать допустимое перемещение.
  • Retiming способен изменить имена внутренних регистров и точки наблюдения при сохранении поведения блока от входа до выхода.
  • Equivalence checking или регрессия с учётом latency должны подтвердить соответствие преобразованного проекта контракту.

Зачем это спрашивают: Сильный ответ описывает retiming как ограниченное последовательностное преобразование и называет практические препятствия.

schedulingcommunication

Упрощение булевой логики может не помочь, если в задержке пути доминируют маршрутизация, fanout или размещение.

  • Сигнал управления с высоким fanout может проводить больше времени в программируемых соединениях, чем в LUT назначения.
  • Перегруженное размещение может заставить простой путь идти в обход между уровнями логики.
  • Дублирование регистров локализует управляющий сигнал ценой дополнительных триггеров и реплицированной логики.
  • Граница pipeline или изменение floorplan эффективнее, когда отчёт показывает доминирование routing delay над cell delay.

Зачем это спрашивают: Интервьюер проверяет, выбирает ли кандидат timing-технику по физическому составу пути, а не только по сложности RTL.

MTBF синхронизатора экспоненциально растёт с доступным временем разрешения и падает при росте активности источника и частоты clock назначения.

  • Переход внутри aperture принимающего триггера может оставить его выход метастабильным на непредсказуемое время.
  • Каждый дополнительный каскад на clock назначения даёт метастабильному узлу примерно ещё один такт на стабилизацию до наблюдения.
  • Более быстрый clock назначения и частые асинхронные переходы создают больше возможностей попасть в окно метастабильности.
  • Для численной оценки MTBF нужны параметры метастабильности конкретного устройства и фактическая задержка маршрутизации.

Зачем это спрашивают: Сильный ответ объясняет физические и статистические переменные MTBF, а не утверждает, что два каскада устраняют метастабильность.

resources

Корректный синхронизатор уровня является цепочкой регистров на clock назначения, где первый каскад не управляет функциональной логикой.

  • Только последний каскад подаётся в логику назначения, поскольку у первого выше всего вероятность неразрешённой метастабильности.
  • Между каскадами не должно быть комбинационной логики, а implementation attributes должны обозначать их как регистры синхронизатора.
  • Близкое размещение увеличивает время разрешения метастабильности за счёт минимальной задержки маршрута между каскадами.
  • Уровень источника должен сохраняться достаточно долго для захвата, поэтому такая структура сама по себе не гарантирует приём короткого импульса.

Зачем это спрашивают: Интервьюер оценивает, знает ли кандидат и топологию RTL, и физические требования к реализации синхронизатора.

cdc

Регистрирование источника устраняет комбинационные glitches, которые иначе повышают асинхронную активность на входе синхронизатора.

  • Комбинационное выражение может переключиться несколько раз при установлении входов, даже если итоговое логическое значение изменилось один раз.
  • Каждый дополнительный переход увеличивает вероятность того, что фронт clock назначения попадёт в aperture метастабильности.
  • Регистр источника также явно задаёт происхождение crossing и контракт стабильности для CDC-анализа.
  • Этот шаг не заменяет синхронизатор назначения, поскольку зарегистрированный источник остаётся асинхронным относительно другого clock.

Зачем это спрашивают: Сильный ответ связывает чистоту источника с частотой событий метастабильности, сохраняя необходимость синхронизации в домене назначения.

cdc

Request-acknowledge handshake передаёт владение, удерживая данные стабильными, пока оба домена не увидят обмен управляющими сигналами.

  • Источник регистрирует payload, устанавливает request и не меняет их до возврата синхронизированного acknowledge.
  • Назначение синхронизирует request, захватывает стабильный payload и устанавливает acknowledge в своём clock domain.
  • Источник синхронизирует acknowledge обратно и только затем снимает request или меняет payload.
  • Полный обмен занимает несколько тактов, но обеспечивает перенос без потерь и естественный backpressure.

Зачем это спрашивают: Интервьюер проверяет, умеет ли кандидат отделять синхронизированное управление от согласованно удерживаемых многобитных данных.

cdc

Toggle-синхронизатор кодирует каждое событие как изменение состояния, которое сохраняется до захвата в домене назначения.

  • Источник инвертирует один бит для каждого принятого события вместо отправки однотактового импульса.
  • Назначение синхронизирует бит и выполняет XOR стабильного значения с его задержанной копией, восстанавливая локальный однотактовый импульс.
  • Соседние события должны быть разделены достаточно, чтобы каждое значение пересекло границу, иначе два изменения взаимно скроются до наблюдения.
  • Обоим доменам нужны согласованные reset-состояния, поскольку их несовпадение может выглядеть как ложное событие.

Зачем это спрашивают: Сильный ответ говорит, почему сохраняющийся переход не теряется как короткий импульс и откуда берётся ограничение частоты событий.

Выбор зависит от ограничения интервала между событиями, допустимости потерь и наличия backpressure.

  • Растяжение импульса проще всего при известной минимальной ширине в несколько тактов назначения, но близкие события могут слиться.
  • Toggle переносит редкие события без обратного канала, если источник не может изменить бит дважды до наблюдения назначением.
  • Handshake гарантирует каждое принятое событие и сообщает источнику готовность к следующему ценой round-trip latency.
  • Нельзя выбирать схему только по средним частотам clock, поскольку захват определяют относительная фаза и худший интервал между событиями.

Зачем это спрашивают: Интервьюер оценивает, сопоставляет ли кандидат event protocol с явными гарантиями частоты и доставки.

cdctiming

Bundled-data CDC удерживает многобитный payload стабильным, пока отдельно синхронизируемый управляющий сигнал не разрешит его захват.

  • Источник регистрирует данные до установки request или valid.
  • Задержка синхронизатора даёт шине данных время установиться по прямым путям от источника к назначению.
  • Назначение захватывает всю шину только после наблюдения синхронизированного управляющего события.
  • Источник не должен менять шину до завершения acknowledge или заданного интервала удержания.

Зачем это спрашивают: Сильный ответ определяет контракт стабильности данных, который сохраняет целостность шины без отдельной синхронизации каждого бита.

Закрытые вопросы

  • 21

    Почему для указателей асинхронной FIFO используют Gray code?

    fifoasync
  • 22

    Из каких основных архитектурных частей состоит асинхронная FIFO?

    fifoasync
  • 23

    Почему флаги full и empty асинхронной FIFO могут оставаться консервативными несколько тактов?

    fifoasync
  • 24

    Что такое reset-domain crossing и почему асинхронное снятие reset опасно?

    async
  • 25

    Что такое CDC reconvergence и почему отдельно синхронизированные сигналы всё равно могут быть небезопасны?

    cdc
  • 26

    Чем отличаются latency и throughput в конвейерном datapath FPGA?

    fpgapipelininglatency
  • 27

    Что такое initiation interval и почему у конвейерного блока он может быть больше единицы?

    pipeliningci-cd
  • 28

    Каковы основные правила интерфейса ready-valid в pipeline?

    pipeliningtypesci-cd
  • 29

    Какую проблему решает skid buffer в ready-valid path?

  • 30

    Как backpressure распространяется по elastic pipeline?

    pipeliningbackpressureci-cd
  • 31

    Какое состояние должно оставаться выровненным в pipeline с поддержкой stalls и bubbles?

    pipeliningci-cd
  • 32

    Как synthesis отображает комбинационную логику и регистры на ресурсы LUT и flip-flop?

    resourcessynthesis
  • 33

    Почему arithmetic RTL обычно должен позволять инструменту вывести выделенные carry chains?

    rtl
  • 34

    Какие решения в RTL обычно определяют, будет ли массив выведен как block RAM?

    rtl
  • 35

    Как width, depth и banking влияют на utilization block RAM?

    resources
  • 36

    Что помогает арифметическому выражению эффективно отображаться на DSP-блоки FPGA?

    fpga
  • 37

    Когда SRL предпочтительнее цепочки flip-flops и какова его цена?

    resources
  • 38

    В чём компромисс FPGA между совместным использованием и дублированием арифметического блока?

    fpga
  • 39

    Когда следует явно создавать экземпляр vendor primitive вместо inference?

    procurement
  • 40

    Какие функции FPGA PLL или MMCM выполняют помимо изменения частоты clock?

    fpga
  • 41

    Что нужно учитывать при переключении clocks или включении generated clock domain?

    cdc
  • 42

    Чем AXI4 и AXI4-Lite отличаются на уровне протокола?

    typing
  • 43

    Какие правила должен соблюдать источник AXI для VALID и payload при backpressure?

    interfacesbackpressure
  • 44

    Почему AXI write slave должен независимо обрабатывать каналы AW и W?

    interfaces
  • 45

    Какие ограничения определяют AXI4 burst?

    constraints
  • 46

    Как transaction IDs AXI влияют на ordering и throughput?

    transactionsthroughputinterfaces
  • 47

    Каковы основные обязанности memory controller в FPGA?

    fpgamemory
  • 48

    Чем отличаются overlapped и non-overlapped implication в SystemVerilog Assertions?

    system-designsystemverilogverification
  • 49

    Как code coverage и functional coverage дополняют assertions при RTL verification?

    coverageverificationrtl
  • 50

    Как utilization и switching activity влияют на power FPGA?

    fpgaresources
  • 51

    Проложенный путь между регистрами не проходит setup, причём основная задержка приходится на routing, а не на логику; как вы будете закрывать timing?

  • 52

    После изменения floorplan проект проходит setup, но получает hold violations; что вы будете делать?

    designfloorplanning
  • 53

    Новый выход PLL тактирует логику, но timing report показывает unconstrained endpoints; как исправить constraints?

    clockingendpointstiming
  • 54

    Timing внезапно проходит после добавления широкого false-path constraint; как вы проверите изменение?

    timingconstraints
  • 55

    Автоматический retiming включён, но критический путь и положение регистров не меняются; что вы проверите?

    schedulingcommunication
  • 56

    Путь multiply-accumulate не проходит timing, хотя отображается в один DSP-блок; как его улучшить?

    timing
  • 57

    Чтение BRAM с последующим decode и арифметикой не проходит timing; где вы поставите границу pipeline?

    resourcespipeliningci-cd
  • 58

    Одна стадия pipeline с фиксированной latency не проходит timing, а соседние имеют запас; как её перебалансировать?

    latencytimingcss
  • 59

    Clock enable с высоким fanout является худшим setup path для множества регистров; как решить проблему?

  • 60

    Результаты timing сильно меняются между implementation seeds; примете ли вы лучший проходящий запуск?

    timing
  • 61

    Source-synchronous входная шина нарушает setup только у выводов FPGA; как вы будете её отлаживать?

    fpga
  • 62

    AXI-Lite slave зависает, когда адрес и данные записи приходят в разных тактах; как его исправить?

    interfaces
  • 63

    Ответ AXI-Lite исчезает, когда BREADY низок; что нужно изменить в slave?

    interfaces
  • 64

    Программа записывает один байт через AXI-Lite, но остальные байты регистра обнуляются; как это исправить?

    interfaces
  • 65

    Status register AXI-Lite очищается до того, как master принимает read data; когда должен происходить эффект?

    interfaces
  • 66

    AXI-Stream пакет теряет последнее слово только при downstream backpressure; как найти ошибку?

    interfacesbackpressure
  • 67

    AXI-Stream datapath проходит timing, но комбинационная цепочка TREADY нет; как её разорвать?

    interfacestiming
  • 68

    Bridge пересылает AXI burst через границу 4 КБ; как это обработать?

    interfaces
  • 69

    DMA engine должен переносить длинные буферы из host memory в AXI-Stream pipeline; как его построить?

    pipelininginterfacesmemory
  • 70

    DMA transfer повреждает только последние невыровненные байты буфера; что вы проверите?

  • 71

    Descriptor-ring DMA обрабатывает один descriptor дважды при wrap кольца; как отладить ownership?

    concurrencydescriptorsownership
  • 72

    Пропускная способность DMA read низкая, хотя AXI data bus простаивает; какие изменения вы рассмотрите?

    interfaces
  • 73

    Процессор видит устаревшие данные после записи FPGA DMA в system memory; где проходит граница hardware и software?

    system-designfpgamemory
  • 74

    Reset DMA приходит при outstanding AXI transactions; как избежать повреждения следующего transfer?

    transactionsinterfaces
  • 75

    Однотактовое событие при переходе в медленный clock domain иногда теряется; как изменить схему?

    cdc
  • 76

    Многобитная status bus иногда показывает невозможное значение после перехода между clocks; как это исправить?

    cdc
  • 77

    Асинхронная FIFO теряет данные только при wrap указателя записи; куда вы посмотрите сначала?

    fifoasync
  • 78

    Асинхронная FIFO проходит RTL simulation, но теряет слова на hardware; как исследовать проблему?

    rtlfifoasync
  • 79

    Toggle-based CDC создаёт ложное событие при независимом reset одного домена; как это исправить?

    cdc
  • 80

    Редкий полевой сбой указывает на однобитный синхронизатор; что вы проверите до добавления стадий?

  • 81

    Флаг almost-full приходит слишком поздно, чтобы остановить burst source до переполнения FIFO; как изменить flow control?

    fifoasync
  • 82

    CDC analysis сообщает reconvergence после двух отдельно синхронизированных mode bits; как определить безопасность?

    cdc
  • 83

    LUT utilization резко вырос после добавления переменного сдвига в datapath; как его уменьшить?

    resources
  • 84

    Большая inferred memory использует flip-flops вместо BRAM после добавления reset logic; что вы измените?

    resourcesmemory
  • 85

    В устройстве закончились BRAM из-за множества неглубоких control FIFO; как высвободить память?

    resourcesmemory
  • 86

    Проект превышает бюджет DSP, но имеет запас timing; как обменять throughput на ресурсы?

    throughputtimingdesign
  • 87

    Slice occupancy высока, хотя отдельные проценты LUT и flip-flop умеренные; что вы проверите?

    resources
  • 88

    Multiplier неожиданно отображается на LUT вместо DSP; как диагностировать inference?

  • 89

    Place-and-route становится congested при внешне приемлемом utilization; как снизить нагрузку?

    resources
  • 90

    Умножение на константу занимает дефицитный DSP при свободных LUT; будете ли вы его переносить?

  • 91

    Как построить self-checking testbench для блока обработки пакетов с переменным backpressure?

    backpressureconcurrencyverification
  • 92

    Как верифицировать arbiter, который не должен допускать starvation постоянно запрашивающего клиента?

  • 93

    Elastic pipeline повреждает данные только при последовательных stalls; какую верификацию вы добавите?

    pipeliningci-cd
  • 94

    Functional coverage высока, но редкий AXI ordering bug пропущен; как улучшить closure?

    coverageverificationclosures
  • 95

    Обновление vendor FIFO IP изменило latency и сломало downstream control; как безопасно его интегрировать?

    procurementlatencyfifo
  • 96

    DDR controller иногда не проходит calibration после включения; как сузить причину?

    interfaces
  • 97

    Wrapper memory controller проходит простые тесты, но ломается при смешанных reads и writes; что вы проверите?

    memorytesting
  • 98

    Processing pipeline должен выдавать один sample за такт, но shared stage принимает через такт; что вы измените?

    pipeliningconcurrencyci-cd
  • 99

    Простаивающий DSP pipeline всё равно доминирует в dynamic power; как снизить его активность?

    pipeliningci-cd
  • 100

    Power estimate после place-and-route намного выше ожиданий; как найти практичное снижение?