Добрый день, уважаемые коллеги!
Имеются проблемы с загрузкой конфигурации в ПЛИС. На плате собственной разработки:
- ПЛИС (5ASXBB5) и HPS включены последовательно в JTAG-цепочку.
- Загрузочная флеш EPCQ256.
- Выводы MSEL[4..0] установлены в состояние 10011, что соответствует режиму конфигурации AS. Выводы MSEL[4..0] посажены на GND или VCCPGM напрямую, без резисторов.
- Питания: VCC - 1.1 B, VCCPGM - 3.3 B, VCCPD банка с JTAG - 3.3 B, VCCIO банка с JTAG - 3.3 B, VCCBAT - 1.5 B, питание флеш - 3,3 В.
- TCK через 1 кОм подтянут к GND, TMS и TDI через 10 кОм подтянуты к 3,3 В.
- CONFIG_DONE, nSTATUS, nCONFIG подтянуты через 10 кОм к 3,3 В. nCE напрямую подключен к GND.
- Выводы DCLK и AS_DATA0(ASDO) подтянуты через 10 кОм к GND,
- Опциональные выводы INT_DONE, CLKUSR, DEV_OE, DEV_CLRn, PR_REQUEST не используются.
После включения питания платы nCONFIG сразу устанавливается в единицу, nSTATUS устанавливается в единицу через время порядка 100 мс, CONFIG_DONE в нуле. Периодически в процессе работы ПЛИС устанавливает nSTATUS в ноль затем возвращая в единицу. При использовании функции Auto Detect в Programmer вся JTAG-цепь (ПЛИС и HPS) определяется корректно. При попытке залить в ПЛИС sof-файл Quartus выдает следующий набор сообщений:
- Started programmer operation at ...
- Configuring device index 1
- Device 1 contains JTAG ID code 0x02D030DD
- Can't configure device. Expected JTAG code 0x02D030DD for device 1, but found JTAG ID code 0xFFFFFFFF
- Operation faild
Ошибка большинстве случаев выдается на 99% загрузки конфигурации, изредка на 86% или даже 50% с небольшим. Поскольку Auto Detect работает корректно и в начале программирования JTAG ID code определяется правильно, то мы сделали вывод что JTAG-цепь работает так как надо и проблема в чем-то другом.
В связи с тем, что по JTAG залить конфигурацию не получилось мы пошли другим путем. Изолировали EPCQ256 от ПЛИС, припаяли к ней разъем и залили во флеш pof-файл переведя USB-Blaster в режим AS. Флешка запрограммировалась успешно, после этого все связи с ПЛИС восстановили. В проекте Quartus назначено конфигурирование с использованием внутреннего генератора ПЛИС 12,5 МГц. При подаче питания ПЛИС сконфигурировалась (CONFIG_DONE встал в единицу, потребляемый ток от источника питания возрос) однако не прошло и минуты как конфигурация "слетела" (CONFIG_DONE упал в ноль, потребляемый ток от источника питания снизился, nSTATUS в единице с периодическими провалами в ноль). Далее еще интереснее, оказалось что явление когда ПЛИС стартует с флешки возникает очень редко (если включать плату с утра :)) В подавляющем большинстве случаев ПЛИС не конфигурируется не смотря на то что на флешке есть и nCS, и DCLK и идут данные.
Явно сделано что-то не так, но что не так найти не можем. Прошу Вашей помощи
P.S. Смотрели напряжения питания осциллографом. Никакого криминала (выбросов или провалов) на питании не заметили.