В 80-х годах группа разработчиков Joint Test Action Group (JTAG) разработала спецификацию для тестирования соединений на плате. Позже, уже усовершенствованная спецификация была принята как стандарт IEEE Std. 1149.1
Сегодня под словом "JTAG" мы обычно подразумеваем разъем на плате, через который идет программирование микросхем, тестирование платы или отладка проектов. Сигналы разъема JTAG позволяют управлять TAP (Test Access Port) контроллером микросхемы.
С помощью сигналов JTAG: TDI, TMS, TCK и TDO в микросхему через ее TAP контроллер можно подавать различные команды, передавать данные и читать данные из микросхемы. Через JTAG можно загружать проект в ПЛИС или выполнять пошаговую отладку программы ARM процессора. Список возможных команд для каждой микросхемы свой, но вот логика работы TAP контроллера всегда одинакова для всех цифровых микросхем поддерживающих стандарт IEEE Std. 1149.1.
Внутри TAP контроллера есть два регистра: IR (instruction) и DR (data).
Доступ к регистрам на запись или чтение можно получить управляя состоянием контроллера с помощью сигнала TMS. Все состояния контроллера описаны вот такой схемой:
Запись в регистры осуществляется через сигнал TDI, чтение данных из TAP контроллера идет через сигнал TDO. Все операции выполняются синхронно по тактовому сигналу TCK.
Файлы в формате SVF (Serial Vector Format) - это текстовые файлы, описывающие последовательность команд для TAP контроллера микросхем.
Спецификацию SVF можно посмотреть вот здесь:
Вот еще полезный документ для ознакомления:
Среда проектирования Altera Quartus II позволяет в процессе компиляции проектов создавать SVF файлы и их можно использовать для загрузки проектов в ПЛИС.
Чтобы Quartus II создавал SVF файл зайдите в меню Assignments => Device... и далее нужно нажать кнопку "Device and Pin Options". В открывшемся диалоговом окне нужно поставить галочку в чекбоксе "Serial Vector Format File (.svf)":
После этого действия, компилируем проект и получаем SVF файл. Выглядеть он будет примерно вот так:
!
FREQUENCY 2.50E+07 HZ;
!
TRST ABSENT;
ENDDR IDLE;
ENDIR IRPAUSE;
STATE IDLE;
SIR 10 TDI (002);
RUNTEST IDLE 25000 TCK ENDSTATE IDLE;
SDR 2944296 TDI (00000000FFFFFFFFFFFFFFFFFFFFFFFFFF.....
Это SVF, описывающий проект для ПЛИС Cyclone III. Здесь команда SIR передает в регистр IR 10-ти битовое число 002. Команда RUNTEST - это пауза длительностью в 25000 тактов, и она должна завершиться в состоянии TAP контроллера "IDLE". Команда SDR собственно передает поток из 2944296 битов в ПЛИС - это и есть прошивка проекта для FPGA Cyclone III.
Мы написали для нашего программатора MBFTDI программу SVF Player - она берет из командной строки имя SVF файла, считывает его, последовательно интерпретирует и исполняет команды на шине JTAG и, таким образом, загружает проект в ПЛИС.
Таким образом, проект в ПЛИС можно загрузить и без среды Altera Quartus II Programmer пользуясь просто нашей консольной утилитой mbftdi.
Сама программа mbftdi - с открытыми исходниками. Ее можно скачать и откомпилировать как для Windows, так и для Linux.
Исходный текст (и exe для Windows) программы можно взять в разделе загрузки:
Второй способ получить исходные тексты - это GitHub:
git clone https://github.com/marsohod4you/MBFTDI-SVF-Player.git
Для использования в Linux нужно откомпилировать программу. Для этого сперва возьмите библиотеки FTDI на их сайте: http://www.ftdichip.com/Drivers/D2XX/Linux/libftd2xx1.1.12.tar.gz и распакуйте где-то в домашней директории. Затем исправьте пути к библиотекам FTDI в файле linux/Makefile. Потом компиляция:
make
Получается исполняемый файл mbftdi.
К сожалению загрузка SVF файла в ПЛИС в Linux требует сперва выгрузить родной драйвер последовательного порта (так написано в документации FTDI):
sudo rmmod ftdi_sio
Затем можно выполнить собственно программирование ПЛИС с помощью SVF плеера mbftdi:
sudo ./mbftdi YourFile.svf
Потом можно опять загрузить драйвер последовательного порта:
sudo insmod ftdi_sio.ko
Только вот нужно знать путь к этому драйверу ftdi_sio.ko, обычно он лежит где-то в директории /lib
В ОС Windows можно просто брать исполняемый файл mbftdi.exe из архива и запускать его. Или можно откомпилировать наши исходники в MS Visual Studio.
Программа SVF плеера mbftdi была протестирована для микросхем Altera MAX II, Cyclone II, Cyclone III, MAX 7000S, и даже Xilinx Vertex4.
Вообще, программа SVF плеера mbftdi - это дальнейшее развитие другого раннего проекта - попытка сделать самый простой JTAG программатор из обычного COM порта. И это нам в общем удалось.
Подробнее...