Ошибка «sys clk does not seem to be running» появляется в среде отладки (чаще всего в Xilinx Vivado при работе через JTAG-кабель и hw_server), когда отладчик не обнаруживает работающий системный тактовый сигнал на целевом устройстве. Типичный сценарий: вы подключаетесь к плате, пытаетесь запустить отладку процессорной системы или прочитать регистры, а инструмент сообщает, что sys clk не тактируется, и прерывает операцию.
Проблема почти всегда сводится к одному из трёх: тактовый сигнал физически отсутствует на входе чипа, тактирование заблокировано внутри проекта (не запущен PLL/MMCM, сброшен блок тактирования) либо отладчик подключён к домену, который в данный момент не получает clock. Ниже разберём, как локализовать причину и устранить её без риска для платы.
Что означает эта ошибка
Сообщение формируется отладочным ПО, когда оно пытается выполнить операцию, требующую активного системного такта — например, обратиться к шине AXI, остановить ядро процессора или прочитать память через Debug Module. Если логика не тактируется, транзакция «зависает», и инструмент делает вывод, что sys clk не работает.
Важно понимать: ошибка не означает неисправность JTAG-кабеля. Цепочка TCK/TMS/TDI/TDO при этом может быть полностью рабочей — отладчик видит устройство в цепи, читает IDCODE, но любые действия, зависящие от системного такта, завершаются неудачей.
Ошибка «sys clk does not seem to be running» говорит об отсутствии системного тактирования на отлаживаемом домене, а не о проблеме с JTAG-подключением.
Основные причины отсутствия тактового сигнала
Причины удобно разделить на аппаратные и проектные. Аппаратные связаны с самой платой, проектные — с конфигурацией, загруженной в FPGA или SoC.
- 🔌 Не запитан или не запущен внешний генератор — кварцевый генератор на плате обесточен, не запаян или вышел из строя.
- ⏱️ Неверные констрейнты — в файле XDC тактовый вход привязан не к тому выводу, и реальный сигнал не попадает в проект.
- 🔒 PLL/MMCM не захватил частоту — блок тактирования не вышел из сброса, сигнал
lockedне установлен, выходные clock заблокированы. - 🧯 Активный сброс — линия reset удерживает логику или блок тактирования в нерабочем состоянии.
- 📦 Загружен не тот битстрим — в FPGA прошита конфигурация без процессорной системы или с другой схемой тактирования.
На платах с Zynq добавляется ещё один сценарий: процессорная система (PS) не инициализировала тактирование, потому что загрузка остановилась на раннем этапе — например, из-за неверного режима загрузки или повреждённого FSBL.
Быстрая диагностика: с чего начать
Прежде чем лезть в проект, выполните простые проверки, которые не требуют изменения прошивки. Они безопасны и часто сразу указывают на источник проблемы.
☑️ Первичная проверка тактирования
Если JTAG-цепь вообще не определяется — проблема в подключении, а не в такте, и эта статья про другой случай. Если устройство видно, но операции с памятью и ядром падают с ошибкой про sys clk, переходите к проверке самого тактового сигнала.
⚠️ Внимание: не подавайте питание на плату и не подключайте отладчик «на горячую», если это не предусмотрено документацией на вашу плату. Некорректная последовательность включения может повредить буферы JTAG или питание доменов.
Проверка тактового сигнала на плате
Самый надёжный способ — измерить clock физически. Если у вас есть осциллограф, прикоснитесь щупом к выходу генератора или к тактовому выводу, указанному в схеме платы. Отсутствие колебаний означает аппаратную проблему: генератор не запитан, не запаян или неисправен.
Если осциллографа нет, косвенные признаки тоже информативны. Многие платы имеют светодиод DONE (конфигурация загружена) и иногда светодиод, подключённый к locked-сигналу PLL. Светится DONE, но отладка не работает — вероятно, битстрим загружен, а тактирование внутри него не запускается.
Если в проекте есть свободный светодиод, временно выведите на него сигнал locked от MMCM/PLL или поделённый системный clock — это даст наглядный индикатор работы тактирования без осциллографа.
Ещё один метод — встроенный логический анализатор ILA (Integrated Logic Analyzer) в Vivado. Но учтите нюанс: ядро ILA само требует рабочего такта на наблюдаемом домене, поэтому для диагностики отсутствующего clock его подключают к заведомо рабочему независимому источнику, а проверяемый сигнал подают как данные.
Проверка настроек проекта и констрейнтов
Значительная часть случаев решается на уровне проекта. Откройте файл констрейнтов и сверьте привязку тактового входа:
create_clock -period 10.000 [get_ports sys_clk]
Проверьте, что порт sys_clk в XDC назначен на тот вывод, к которому реально подключён генератор на вашей плате (смотрите схему платы, а не чужой пример проекта). Несовпадение даже на один пин — классическая причина «мёртвого» такта после загрузки рабочего, казалось бы, дизайна.
Далее проверьте блок тактирования. Если используется Clocking Wizard (MMCM/PLL), убедитесь, что его входной сброс не удерживается активным, а сигнал locked реально используется для разблокировки остальной логики. Если логика сбрасывается через locked, а PLL не захватывает частоту из-за неверной входной частоты — вся система останется в сбросе, и отладчик честно сообщит, что clock не бежит.
Особенности для Zynq и процессорных систем
На Zynq-7000 и Zynq UltraScale+ системный такт процессорной части формируется блоком PS Clock, который настраивается либо при загрузке через FSBL/boot image, либо из скрипта инициализации в отладчике. Если вы подключаетесь к «голому» чипу без загрузки ПО, тактирование PS может быть просто не настроено.
В этом случае в Vitis или XSCT перед отладкой выполняют инициализацию PS скриптом, который генерируется из проекта (обычно файл вида ps7_init.tcl или аналогичный для вашей платформы). Порядок действий: запустить hw_server, подключиться к таргету, выполнить инициализацию PS, затем сбросить и запустить ядро. Без шага инициализации обращения к памяти и периферии PS будут падать именно с ошибкой тактирования.
Почему инициализация PS обязательна
Регистры тактирования, PLL процессорной системы и контроллер DDR после включения питания находятся в состоянии по умолчанию. Их настройку выполняет либо FSBL при обычной загрузке, либо TCL-скрипт инициализации при отладке через JTAG. Пока эта процедура не выполнена, домены PS не тактируются корректно, и отладчик сообщает об отсутствии sys clk.
Для чисто FPGA-части (PL) без процессора проверьте, что битстрим загружен именно в тот чип и что проект вообще содержит источник тактирования для отлаживаемой логики.
Типовые сценарии и способы устранения
| Симптом | Вероятная причина | Что делать |
|---|---|---|
| IDCODE читается, память не читается | Нет системного clock в дизайне | Проверить констрейнты и генератор |
| Ошибка после загрузки битстрима | Загружен старый/чужой битстрим | Собрать и прошить актуальный проект |
| Ошибка только на Zynq при старте отладки | PS не инициализирован | Выполнить скрипт инициализации PS |
| ILA не подключается к ядру | Clock-домен ILA не тактируется | Проверить clock ILA и сигнал locked |
| Clock отсутствует на щупе осциллографа | Неисправен/обесточен генератор | Проверить питание и монтаж генератора |
⚠️ Внимание: изменение констрейнтов и пересборка проекта — безопасные операции, но прошивку загрузочного образа (boot image) на флеш выполняйте только с файлом, собранным именно под вашу плату. Неверный образ может сделать плату незагружаемой до восстановления через JTAG.
Когда проблема аппаратная
Если тактовый сигнал отсутствует физически, а питание генератора в норме, остаются аппаратные версии: трещина в пайке резонатора, повреждённый буфер распределения clock, неправильно установленный джампер выбора источника тактирования. На многих отладочных платах источник clock выбирается перемычками или переключателями — сверьтесь с руководством конкретной платы, так как расположение и логика джамперов у каждого производителя свои.
Ремонт пайки генератора или замена компонента — уже работа для тех, кто уверенно владеет паяльной станцией. Если плата на гарантии или дорогая, разумнее обратиться к продавцу или в сервис, чем рисковать многослойной платой.
Диагностику ведите от простого к сложному: питание и JTAG → битстрим и констрейнты → PLL/locked → инициализация PS → аппаратура платы.
Часто задаваемые вопросы
Ошибка появляется, но JTAG видит устройство — кабель виноват?
Нет. Если отладчик читает IDCODE и видит цепочку устройств, JTAG-подключение работает. Ошибка «sys clk does not seem to be running» относится к системному такту целевой логики, а не к такту JTAG (TCK), который генерирует сам отладчик.
Можно ли отлаживать логику без системного clock?
Только ограниченно. Операции, не требующие такта (сканирование цепочки, чтение IDCODE), доступны всегда. Остановка ядра, доступ к памяти и регистрам требуют работающего clock на соответствующем домене.
PLL показывает locked, но ошибка остаётся — что проверить?
Проверьте, что тактируется именно тот домен, к которому обращается отладчик: возможно, между PLL и логикой стоит clock gate, сброс по locked инвертирован, либо отлаживаемый модуль подключён к другому clock-выходу, который не разрешён в настройках Clocking Wizard.
Помогает ли перепрошивка битстрима?
Да, если причина была в загруженной неактуальной конфигурации. Но если констрейнты или схема тактирования ошибочны, пересобранный из того же проекта битстрим воспроизведёт ту же ошибку — сначала нужно найти и исправить причину.
Ошибка специфична только для Vivado?
Формулировка характерна для инструментов Xilinx (hw_server, Vitis), но аналогичная ситуация — «цель не тактируется» — встречается и в других отладчиках при работе с FPGA и SoC. Логика диагностики та же: питание, источник clock, сброс, инициализация.