Немного поделюсь и своим опытом на эту тему, т.к. в безуспешных (до текущего момента) попытках провел неделю точно.
Мною был заказан и успешно получен комплект с Алиэкспресс под названием ALINX, содержащий отладку на базе Spartan6 xc6slx9 и программатор следующего вида:
Как потом выяснилось, такой программатор больше нигде кроме ALINX не применяется, однако тогда я это не проверил и понадеялся на добросовестность китайцев. Ну и в итоге, естественно, по закону подлости в ISE 14.7 он не завелся
Вот тогда я начал копать всю эту тему, вышел на этот форум и другие источники. Выяснилось, что программатор этот на основе
FT232H (а значит закос под
Digilent HS2), хотя непосредственно с чипа как-будто были стерты все обозначения и тип был установлен через
FT_Prog. Через него же было установлено, что китайцы все же записали в
EEPROM некоторые нужные байты, но, видимо, что-то напутали и программатор никак в
iMPACT не определялся. Дальнейшие разборки показали, что требуется шить именно
User Area и тут уже начали опускаться руки, т.к. инфы по этому поводу мало, она часто путает, а скудные образцы кода были почти никак не комментированы (не в обиду
@ADA007 ).
Здесь я решил уйти немного в сторону и присобачить к злосчастному программатору
UrJTAG и/или
OpenOCD. В общем под
Виндой (проверял на
7ке, т.к. версию ISE для 10ки у меня не тянет проц в следствие отсутствия виртуализации) достаточно установить официальный установочник драйверов VCP/D2XX (https://www.ftdichip.com/Drivers/VCP.htm или
https://www.ftdichip.com/Drivers/D2XX.htm, там одно и то же, нажимать на ссылку в разделе
Comments), возможно потребуется немного поиграть с заменой драйверов в
Zadig, если уже были установлены какие-либо драйвера до этого или успели уже что-то понаустанавливать. В конце концов UrJTAG научится определять программатор:
Код
cable ft2232
(да, ft2232, даже если у вас, как и у меня, 232h). Далее, чтобы работала команда
Код
detect
нужно предварительно сказать UrJTAG где ему искать конфигурацию. Для этого с сайта Xilinx
качаем BSDL файлы, распаковываем и прописываем команду
Код
bsdl path C:\Users\Chufyrev\Xilinx\xc6s-2014
и теперь можно детектировать chain (в папке можно оставить только bsdl-файлик для вашей ПЛИСины). Вместо прошивки непосредственно bitstream я генерировал в iMPACT svf-файл:
- Жмем Output - SVF File - Create
- Выбираем наш сгенерированный ранее bit-файл
- Появляется картинка чипа, жмем на него, слева Program
- Из того же меню Output говорим Stop SVF
Теперь у нас есть SVF, который мы можем скормить UrJTAG. После пары десятков прошивок рука набьется в этих действиях до автоматизма
Все команды UrJTAG можно запилить в отдельный скриптик для ускорения процесса:
Код
cable ft2232
bsdl path C:\Users\User\Xilinx\xc6s-2014
detect
svf C:\Users\User\Xilinx\projects\project_1\project_1.svf
Под линуксами UrJTAG заводиться решительно не хотел, а OpenOCD не принимал программатор вообще нигде. Проблема была в драйверах, UrJTAG по умолчанию пользуется libftdi, в то время как оказались нужны ftd2xx. Для решения следует вручную скомпилировать UrJTAG с ftd2xx, используя соответствующую опцию. Процесс описан в доках и на просторах сети, однако там есть свои нюансы, если кто заинтересуется, могу изложить подробнее. Скажу только, что в итоге UrJTAG заработал и под пингвином. OpenOCD я с тех пор не тестировал, однако есть подозрения что подобный трюк может завести и его.
Тут решено было вернуться к
баранам попыткам подружить все-таки программатор и iMPACT напрямую, а для этого, как мы знаем, нужно прошивать User Area. Вот здесь мы возвращаемся к D2XX, поскольку именно этот драйвер умеет это делать. Берем исходники по ссылке выше, на этот раз не из секции Comments. В версии для Linux находим примеры на все случаи жизни, в т.ч. Read/Write UA. Нужное содержание этого самого UA взял из этой ветки, скомпилировал программу, прошило и ... лажа. Не смотря на отсутствие ошибок работы функции FT_EE_UAWrite() вся EEPROM затерлась 0xFF, даже то, что было "в наличии". Определяемый размер UA тоже изменился, возможно это связано с тем, что на размер UA влияет строка Manufacturer/Model/SerialNumber. Но вообще какое-то странное поведение. Решил уже проверить то же самое под Windows, установил Visual Studio, слинковал ftd2xx.lib (внимание, берите тот файл, который весит ~20кБ, я долго разбирался со второй версией на 1МБ) (либу можно взять все по той же ссылке выше). Результат тот же - 0xFF. Ну в общем фиг знает, я накосячил, или драйвер, но вернулся я еще раз к методу ADA007 и его статье в КиТ. После конфигурации FT_Prog'ом и запуска FTDI_User_Area_Writer.exe программатор распознался и iMPACT'ом! Повезло, по всей видимости, что размер EEPROM у нас оказался одинаковым, 128Б (EEPROM 93C56). Если что, UrJTAG воспринимает FT232H в любом виде, вне зависимости от содержания EEPROM в принципе, так что как запасной вариант остается всегда.
Под Linux новопрошитый программатор не распознался, но это скорее всего из-за отсутствия Digilent Plugin, который в Ubuntu, как я понял, поставить надо еще постараться.