Ошибка «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.

Быстрая диагностика: с чего начать

Прежде чем лезть в проект, выполните простые проверки, которые не требуют изменения прошивки. Они безопасны и часто сразу указывают на источник проблемы.

☑️ Первичная проверка тактирования

Выполнено: 0 / 5

Если 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 не бежит.

📊 Где чаще всего оказывалась причина ошибки в вашем случае?
Неверный пин тактового входа в XDC
PLL/MMCM не вышел в locked
Не тот битстрим или PS не инициализирован
Аппаратная проблема генератора

Особенности для 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, сброс, инициализация.