Я для себя написал следующий алгоритм конфигурации. Правда, это для Cyclone-II, но, может, пригодится. Времена будут другие. Проверьте, что у вас удовлетворяются все условия - по времени, по напряжениям. Вдруг на тактовом сигнале глитчи?
* После включения питания Cyclone-II находится в состоянии сброса POR ~ 100 ms * В это время ПЛИС удерживает STATUSn и CONF_DONE низким, * а USER I/O в высокоимпедансном состоянии * ПЛИС сбрасывается низким уровнем на любом из выводов CONFIGn или STATUSn * Когда CONFIGn переводится из низкого уровня в высокий, сброс заканчивается * и STATUSn переходит в высокоимпедансное состояние (через Max 40 us) * Когда STATUSn отпущен, ПЛИС готова принять код конфигурации * (фронт такта через min 1 us). * VCCINT и VCCIO выводы должны быть запитаны требуемым напряжением. * Код из памяти пересылается в ПЛИС побайтно, до тех пор пока ПЛИС не отпустит * CONF_DONE, который за счет внешнего резистора станет высоким. * Данные защелкиваются в ПЛИС по фронту / тактов (период min 10 ns). * Первым посылается младший бит байта (LSB). * Никакого сигнала BUSY не выдается (успевает записаться за 10 ns?). * Такты DCLK после конфигурирования не влияют на ПЛИС. * Для тактов инициализации можно задать использовать CLKUSR * Или использовать внутренний тактовый генератор (~ 10 MHz) по-умолчанию * Требуется 299 тактов, допускается частота до 100 MHz * Такты CLKUSR не влияют на процесс конфигурации * Сигнал INIT_DONE, если используется, говорит об окончании инициализации * INIT_DONE становится низким после первого кадра конфигурации, * и устанавливается высоким после инициализации * После этого ПЛИС входит в USER режим * В USER режиме внутренние weak pull-up резисторы на user I/O отключаются * Если во время конфигурации случился сбой, STATUSn становится низким * и ПЛИС сбрасывает себя внутри * Для реконфигурации ПЛИС нужно подать низкий сигнал CONFIGn (min 40 us)
|