Вопросы на собеседовании: FPGA-инженер
100 реальных вопросов с образцовыми ответами и пояснениями для уровня Middle.
Смотреть пример резюме: FPGA-инженер →Тренировка флешкарточками
Интервальное повторение · Hunter Pass
Вопросы
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-анализ минимальной задержки через их реальные временные отношения.
WNS описывает один худший slack, а TNS суммирует отрицательный slack по всем нарушенным конечным точкам группы путей.
- WNS -0,20 нс означает, что хотя бы одна конечная точка не выполняет требование на 0,20 нс.
- TNS отличает одно локальное нарушение от множества небольших нарушений, которым может потребоваться более широкое архитектурное изменение.
- Количество нарушенных конечных точек добавляет контекст, поскольку одинаковый TNS может соответствовать разным распределениям ошибок.
- Для setup и hold существуют отдельные WNS и TNS, которые нужно рассматривать независимо.
Зачем это спрашивают: Интервьюер оценивает, рассматривает ли кандидат timing closure одновременно как тяжесть худшего нарушения и общий масштаб проблем.
Критический путь является ограниченным путём с наименьшим 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.
Constraint generated clock сохраняет отношение частоты, фазы и источника между производным и основным clock.
- Constraint указывает реальный вывод генерации и задаёт деление, умножение, сдвиг фазы или отображение фронтов.
- Static timing после этого анализирует переходы между связанными доменами с правильными запускающими и захватывающими фронтами.
- Объявление выхода как несвязанного primary clock теряет это отношение и создаёт неверные проверки или ненужные CDC-исключения.
- Каждому физически используемому выходу PLL или делителя нужно своё описание generated clock, если инструмент FPGA не выводит его автоматически.
Зачем это спрашивают: Сильный ответ связывает constraints generated clock с точными отношениями фронтов, а не считает их метаданными для имён.
Constraints I/O delay моделируют timing за пределами FPGA относительно clock, управляющего интерфейсом.
- Максимальная входная задержка включает самый поздний clock-to-out внешнего устройства и задержку платы до входа FPGA.
- Минимальная входная задержка моделирует самый ранний приход и необходима для полноценной проверки input hold.
- Максимальная выходная задержка представляет setup-требование приёмника вместе с задержкой платы, а минимальная учитывает его hold-требование.
- Virtual clock удобен, когда внешний опорный clock не проходит через логику FPGA.
Зачем это спрашивают: Интервьюер оценивает, умеет ли кандидат ограничить интерфейс платы как по раннему, так и по позднему приходу данных.
Constraint multicycle сообщает, что функционально корректному синхронному переносу разрешено занять больше стандартного числа фронтов clock.
- Setup multicycle со значением N переносит захватывающий setup-фронт на N-й подходящий фронт, не добавляя оборудование.
- Для соответствующего hold-отношения обычно нужна поправка N минус 1, чтобы инструмент не проверял hold относительно сдвинутого фронта.
- Clock enable или условие протокола должно гарантировать, что назначение не использует промежуточные данные раньше времени.
- Исключение должно охватывать только нужные регистры, поскольку широкий multicycle может скрыть обычные однотактовые нарушения.
Зачем это спрашивают: Сильный ответ объясняет и функциональный контракт, и связанные setup- и hold-семантики исключения multicycle.
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-модели.
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 как ограниченное последовательностное преобразование и называет практические препятствия.
Упрощение булевой логики может не помочь, если в задержке пути доминируют маршрутизация, fanout или размещение.
- Сигнал управления с высоким fanout может проводить больше времени в программируемых соединениях, чем в LUT назначения.
- Перегруженное размещение может заставить простой путь идти в обход между уровнями логики.
- Дублирование регистров локализует управляющий сигнал ценой дополнительных триггеров и реплицированной логики.
- Граница pipeline или изменение floorplan эффективнее, когда отчёт показывает доминирование routing delay над cell delay.
Зачем это спрашивают: Интервьюер проверяет, выбирает ли кандидат timing-технику по физическому составу пути, а не только по сложности RTL.
MTBF синхронизатора экспоненциально растёт с доступным временем разрешения и падает при росте активности источника и частоты clock назначения.
- Переход внутри aperture принимающего триггера может оставить его выход метастабильным на непредсказуемое время.
- Каждый дополнительный каскад на clock назначения даёт метастабильному узлу примерно ещё один такт на стабилизацию до наблюдения.
- Более быстрый clock назначения и частые асинхронные переходы создают больше возможностей попасть в окно метастабильности.
- Для численной оценки MTBF нужны параметры метастабильности конкретного устройства и фактическая задержка маршрутизации.
Зачем это спрашивают: Сильный ответ объясняет физические и статистические переменные MTBF, а не утверждает, что два каскада устраняют метастабильность.
Корректный синхронизатор уровня является цепочкой регистров на clock назначения, где первый каскад не управляет функциональной логикой.
- Только последний каскад подаётся в логику назначения, поскольку у первого выше всего вероятность неразрешённой метастабильности.
- Между каскадами не должно быть комбинационной логики, а implementation attributes должны обозначать их как регистры синхронизатора.
- Близкое размещение увеличивает время разрешения метастабильности за счёт минимальной задержки маршрута между каскадами.
- Уровень источника должен сохраняться достаточно долго для захвата, поэтому такая структура сама по себе не гарантирует приём короткого импульса.
Зачем это спрашивают: Интервьюер оценивает, знает ли кандидат и топологию RTL, и физические требования к реализации синхронизатора.
Регистрирование источника устраняет комбинационные glitches, которые иначе повышают асинхронную активность на входе синхронизатора.
- Комбинационное выражение может переключиться несколько раз при установлении входов, даже если итоговое логическое значение изменилось один раз.
- Каждый дополнительный переход увеличивает вероятность того, что фронт clock назначения попадёт в aperture метастабильности.
- Регистр источника также явно задаёт происхождение crossing и контракт стабильности для CDC-анализа.
- Этот шаг не заменяет синхронизатор назначения, поскольку зарегистрированный источник остаётся асинхронным относительно другого clock.
Зачем это спрашивают: Сильный ответ связывает чистоту источника с частотой событий метастабильности, сохраняя необходимость синхронизации в домене назначения.
Request-acknowledge handshake передаёт владение, удерживая данные стабильными, пока оба домена не увидят обмен управляющими сигналами.
- Источник регистрирует payload, устанавливает request и не меняет их до возврата синхронизированного acknowledge.
- Назначение синхронизирует request, захватывает стабильный payload и устанавливает acknowledge в своём clock domain.
- Источник синхронизирует acknowledge обратно и только затем снимает request или меняет payload.
- Полный обмен занимает несколько тактов, но обеспечивает перенос без потерь и естественный backpressure.
Зачем это спрашивают: Интервьюер проверяет, умеет ли кандидат отделять синхронизированное управление от согласованно удерживаемых многобитных данных.
Toggle-синхронизатор кодирует каждое событие как изменение состояния, которое сохраняется до захвата в домене назначения.
- Источник инвертирует один бит для каждого принятого события вместо отправки однотактового импульса.
- Назначение синхронизирует бит и выполняет XOR стабильного значения с его задержанной копией, восстанавливая локальный однотактовый импульс.
- Соседние события должны быть разделены достаточно, чтобы каждое значение пересекло границу, иначе два изменения взаимно скроются до наблюдения.
- Обоим доменам нужны согласованные reset-состояния, поскольку их несовпадение может выглядеть как ложное событие.
Зачем это спрашивают: Сильный ответ говорит, почему сохраняющийся переход не теряется как короткий импульс и откуда берётся ограничение частоты событий.
Выбор зависит от ограничения интервала между событиями, допустимости потерь и наличия backpressure.
- Растяжение импульса проще всего при известной минимальной ширине в несколько тактов назначения, но близкие события могут слиться.
- Toggle переносит редкие события без обратного канала, если источник не может изменить бит дважды до наблюдения назначением.
- Handshake гарантирует каждое принятое событие и сообщает источнику готовность к следующему ценой round-trip latency.
- Нельзя выбирать схему только по средним частотам clock, поскольку захват определяют относительная фаза и худший интервал между событиями.
Зачем это спрашивают: Интервьюер оценивает, сопоставляет ли кандидат event protocol с явными гарантиями частоты и доставки.
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 намного выше ожиданий; как найти практичное снижение?