[Существующие загрузочные кабели Lattice]
В настоящее время фирма Lattice Semiconductor для конфигурирования своих устройств предлагает два вида загрузочных кабелей [1]:
Наименование |
PC интерфейс |
Цена в Digikey |
Цена в России |
HW-USBN-2A |
USB 2.0 |
162$ [2] |
9000 .. 22000р. |
HW-DLN-3C |
LPT |
71$ [3] |
3500 .. 7500р. |
При этом LPT кабель неудобен, загрузка по нему медленная, он не поддерживается последними версиями MICO32 System, и разъём к нему обычно отсутствует на новых компьютерах. В силу малой распространённости китайцы не особо спешат клонировать кабели для FPGA Lattice.
Основу схемы HW-USBN-2A [2] составляют чип FT2232H, отвечающий за USB соединение, и трансляторы уровней, которые обеспечивают работу при уровнях напряжения питания JTAG в диапазоне 1.2V .. 5V. Простота схемы и отсутствие специальной защиты позволяют клонировать HW-USBN-2A на основе готовых плат типа FT2232H Board [4] или FT2232H Mini Module, просто присоединив JTAG разъём к соответствующим ножкам FT2232H.
Такое решение имеет следующие преимущества:
- Очень низкая стоимость и легкодоступность.
- Возможность полноценно работать тем же устройством и с FPGA Xilinx.
- Меньшее время задержки сигнала за счёт отсутствия трансляторов уровня в загрузочном кабеле, что позволяет достичь большей скорости передачи данных (до 30 мегабит), если использовать кабель в качестве отладочного интерфейса.
Есть и недостатки:
- Напряжение питания JTAG может быть только 3.3V.
- Невозможно штатными средствами переводить выходы загрузочного кабеля в состояние высокого импеданса (отключать, проще говоря).
[Изготовление самодельного загрузочного кабеля]
В инструкции к загрузочным кабелям Lattice [5] описываются несколько вариантов цоколевки JTAG. Я использую стандартную цоколевку с разъёмом 5x2. Этот разъём следует присоединить к FT2232H Board следующим образом:
Таблица 1. Цоколевка JTAG и подключение к плате FT2232H Board.
JTAG |
FT2232H Board |
Сигнал JTAG |
Контакт коннектора |
Контакт на плате |
TCK |
1 |
ADBUS0 |
GND |
2 |
GND |
TMS |
3 |
ADBUS3 |
GND |
4 |
GND |
TDI |
5 |
ADBUS1 |
VCC |
6 |
не подключать |
TDO |
7 |
ADBUS2 |
GND |
8 |
GND |
TRST |
9 |
ADBUS7 |
ISPEN |
10 |
ADBUS4 |
Данная схема обладает следующим недостатком: напряжение 3.3 вольта на выходных ножках FT2232H будет появляться при работающем USB сразу после запуска программатора, независимо от наличия питания на программируемой плате. Для некоторых микросхем такой режим недопустим и может привести к постоянному току короткого замыкания через выходной драйвер FT2232H и защитный диод на входе, и даже к тиристорному защёлкиванию. Хотя я и не знаком с FPGA или логическими буферами, таящими подобную опасность(а вот SPI ADC, например, такие встречаются), но всё же предпочёл развести питание так, чтобы исключить эту ситуацию. Потребовалось перерезать две дорожки на FT2232H Board и подавать 3.3V не с USB, а с контакта VCC на разъёме JTAG. На схеме красным показана модификация цепей питания платы FT2232H Board. На фото красным показано, где перерезаны дорожки. Помимо питания, отрезаны от ACBUS5-ACBUS6 боковые выводы разъёма, чтобы не коротили. В питании выводы IC3.VOUT и JP3.2 отрезаны от шины 3.3V, и объединены в VCCINT, вместе с C2. JTAG контакт VCC подключается к отрезанной шине 3.3V.
Чтобы получить возможность легко подключать к FT2232H Board кабели с разной цоколевкой, я установил на боковом поле с отверстиями угловой разъём 2x5, который проводками подпаял к соответствующим боковым выводам на плате. В этот разъём вставляется плоский десятижильный кабель с двумя одинаковыми разъёмами 2x5 на концах, с другой стороны кабель вставляется в разъём на программируемой плате, соответствующий стандартной цоколевке, описанной выше в таблице 1.
UPD1405117. Для согласования уровней сигналов можно также применить защитные токоограничивающие резисторы. Последовательно в каждый сигнал JTAG ставятся резисторы 50..100 ом. Тогда напряжение питания программируемой схемы может быть любым, а напряжение портов FT2232H можно сделать 3.3V. Тогда переделывать схему питания на плате FT2232H Board не потребуется, и не придется резать дорожки.
Тут ещё интереснее получилось: я вначале порезал питание, а потом внимательно просмотрел даташиты и выяснилось, что питание можно и не резать, а просто не подключать JTAG VCC. Для всех микросхем, которые мы используем через JTAG, 3.3 вольта по входу - это допустимое номинальное напряжение. Даже резисторы не нужны. Сейчас я бы не стал переделывать питание. Проблема в том, что на фотках у меня вариант с порезанным:). Хотя с порезанным всё-таки безопаснее.
И ещё, что касается резисторов, в отличие от некоторых, FT2232 - это цивилизованная микросхема и имеет программную регулировку тока выходных драйверов, по умолчанию ток настроен на 4 мА, сопротивление выходов при этом порядка 50 Ом, что обеспечивает хорошую Signal Integrity и без резисторов.
[Установка программного обеспечения]
Установка драйвера и использование самодельного загрузочного кабеля ничем не отличается от родного фирменного. Драйвер установится вместе с IDE Lattice Diamond [5], либо с Lattice Diamond Programmer [7], если при установке не снимать установленную по умолчанию галочку "Programmer Drivers".
После подключения устройства к USB драйверы инициализируются автоматически. При помощи утилиты FT_Prog можно изменить название устройства, которое будет высвечиваться в программаторе, и серийный номер, однако всё может работать и с чистой конфигурацией по-умолчанию.
[Пример программирования FPGA]
Здесь показан пример загрузки прошивки FPGA LFE2M50E с помощью Lattice Standalone Programmer через кабель на FT2232 Board.
После запуска Diamond Programmer появится диалоговое окно с предложением выбрать или продетектировать загрузочный кабель:
После нажатия на кнопку "Detect Cable", выберите первое устройство из выпадающего списка:
Далее нажмите "OK".
После пары секунд сканирования откроется главное окно со списком устройств (оно у меня одно) в цепочке JTAG. Теперь теперь нужно уточнить тип программируемого устройства FPGA (выделено желтым) на LFE2M50E, и выбрать операцию Fast Program и файл с прошивкой.
Окно выбора операции, режима программирования и файла прошивки:
Файл прошивки и операция выбраны:
Нажмите на кнопку "Program", после этого начнется заливка прошивки в конфигурационное ОЗУ FPGA.
Примечание: в FPGA (за исключением некоторых моделей Actel) конфигурация всегда хранилась в ОЗУ, и должна загружаться из ПЗУ после сброса. ПЗУ иногда бывает в том же кристалле, но обычно внешнее. Также можно загрузить ОЗУ прямо через JTAG.
Примерно через 4 секунды операция завершится:
[Debug Mode]
Отладочный режим активируется нажатием на кнопку "Debug mode..." (справа под панелью IO settings). В этом режиме можно вручную управлять уровнями всех сигналов JTAG, что полезно для проверки правильности сборки. Для управления уровнями необходимо галочками(в колонках Hold High или Hold Low) выставить уровни всех сигналов и нажать на кнопку "Test". Примерно через 2 секунды после нажатия на Test новые уровни будут установлены на всех выходах. При этом на линии TRST постоянный низкий уровень не установить, он опускается вниз лишь на долю секунды, что, однако, заметно даже на цифровом мультиметре.
[Ссылки]
1. Lattice Programming Cables for PC site:latticesemi.com. 2. HW-USBN-2A site:digikey.com. 3. HW-DLN-3C site:digikey.com. 4. FT2232H Board - макетная плата на высокоскоростном чипе моста USB фирмы FTDI. 5. ispDOWNLOAD Cables user guide site:latticesemi.com. 6. Lattice Diamond Software site:latticesemi.com. 7. Programmer and Deployment Tool - Lattice Diamond Programmer site:latticesemi.com. |