Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Spartan-3 JTAG
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Andrey Filippov
Прошлым летом я столкнулся с проблемой - не удавалось конфигурация Spartan-3 через JTAG и я так и не смог найти документацию. В схеме JTAG порт подключен к портам процессора, поэтому я не мог воспользоваться готовым софтом и/или кабелем для загрузки. Со Spartan-IIe, которые я использовал до этого, проблем не было - документации вполне хватало. После недели мучений я обнаружил, что в Spartan-3 Instruction Register имеет ширину 6, а не 5 бит. После этого все заработало. Сейчас я решил проверить - не появилась ли такая документация, где про это написано - и опять не нашел, даже зная что я ищу. Кто-нибудь с такой проблемой сталкивался? Или я плохо искал?
acex2
Такие вещи нужно смотреть в соответствующих BSDL файлах. Там все расписано, включая поддерживаемые команды, длины всех регистров и даже максимальную частоту TCK. Сам .bsd формат есть производное от VHDL, поэтому особых проблем с пониманием что к чему быть не должно. На всякий случай, вот еще ссылочка на AppNote с пояснениями формата: http://direct.xilinx.com/bvdocs/appnotes/xapp476.pdf
3.14
2 Andrey Filippov
А чем Вас конфигурирование в сбросе не устраивает?
Единственно, геморой с втыканием-вытыканием разъема, кстати, я свой LPT программер для Xilinx объединил с программатором AVR (STK200/300), один LPT - два программатора!

2 acex2
<...поэтому особых проблем с пониманием что к чему быть не должно...>
Хотя я VHDL уже и позабыл, но не раз замечал разницу в потоке SVF файлов и алгоритмов в BSDL.
Например BSDL на xc95216, процедура пограммирования:
"flow_program(array) " &
" Repeat 25920 " &
" (ISC_PROGRAM 17:$addr?,8:$last?,2:2 wait TCK 160)" &
" (ISC_PROGRAM 17:$addr,8:$last,2:2 wait TCK 160)" &
" loop min 1 max 32 ( " &
" (ISC_PROGRAM 17:$addr,8:$last,2:2 wait TCK 160 25:0*0,2:3*3:OST)),"&
Из которой я понял, что надо задвигать в SIR команду "ISC_PROGRAM", далее в SDR адрес и данные, задержка 160мкс, повторить вышеописанные действия, инкрементировать адрес и т.д.

В SVF же, следующая реализация:
Одинажды в SIR задвигается "ISC_PROGRAM", дплее в SDR задвигается адрес и данные, задержка, инкремент адреса и т.д. !?
Andrey Filippov
Цитата(acex2 @ Feb 19 2005, 03:10)
Такие вещи нужно смотреть в соответствующих BSDL файлах. Там все расписано, включая поддерживаемые команды, длины всех регистров и даже максимальную частоту TCK. Сам .bsd формат есть производное от VHDL, поэтому особых проблем с пониманием что к чему быть не должно. На всякий случай, вот еще ссылочка на AppNote с пояснениями формата: http://direct.xilinx.com/bvdocs/appnotes/xapp476.pdf
*

Спасибо, в BSDL файлы-то я и не залезал - искал "человеческое" описание, как для предыдущих устройств.
Andrey Filippov
Цитата(3.14 @ Feb 19 2005, 09:19)
А чем Вас конфигурирование в сбросе не устраивает?
Единственно, геморой с втыканием-вытыканием разъема, кстати, я свой LPT программер для Xilinx объединил с программатором AVR (STK200/300), один LPT - два программатора!


А что значит " конфигурирование в сбросе"?

Но никаких лишних разъемов в камере (pdf схемы я приводил выше, а картинки, правда предыдущей модели есть здесь - http://www.xilinx.com/publications/xcellon...xc_freesw46.pdf, перевод без картинок - http://www.elphel.com/articles/xc_freesw46_r.html) нет - наружу торчит только RJ-45 (включая питание согдласно IEEE802.3af). И прошивка - просто один из файлов, которые обновляются пользователем вместе с другим софтом, поэтому никакие специальные кабели и LPT-программаторы не годятся (которые, к тому же, вероятно, не со всеми типами компьютеров и операционных систем работают). Кстати, все исходники прошивки приводятся (в том числе они есть и во флэшке самой камеры), так что саму прошивку можно свободно модифицировать.
acex2
Цитата(3.14 @ Feb 19 2005, 12:19)
Хотя я VHDL уже и позабыл, но не раз замечал разницу в потоке SVF файлов  и алгоритмов в BSDL.
...
Из которой я понял, что надо задвигать в SIR команду "ISC_PROGRAM", далее в SDR адрес и данные, задержка 160мкс, повторить вышеописанные действия, инкрементировать адрес и т.д.


Такое очень редко встречается, чтобы в BSDL файле прописывался алгоритм программирования. Обычно производители разделяют описание boundary-scan и реализацию алгоритмов по файлам BSDL и SVF. Поэтому в случае неоднозначности в описаниях я бы верил именно SVF.

Что касается алгоритма программирования, то он описывается стандартом IEEE 1532 и представляет собой ISC state-автомат в виде надстройки над стандартным TAP автоматом. Подробности можно найти в самом стандарте или в краткой форме в описаниях от производителей. У Xilinx, например, подробное описание алгоритма загрузки приводится в Platform User Guide отдельно по каждой платформе.
Andrey Filippov
Цитата(acex2 @ Feb 19 2005, 14:14)
У Xilinx, например, подробное описание алгоритма загрузки приводится в Platform User Guide отдельно по каждой платформе.

http://www.xilinx.com/bvdocs/userguides/ug_spartan3.htm
"The Spartan-3 FPGA family is described in the data sheet and application notes and does not have a separate User Guide" :-(
А xapp-ы то я все просмотрел ...
acex2
Цитата(Andrey Filippov @ Feb 19 2005, 17:33)
Цитата(acex2 @ Feb 19 2005, 14:14)
У Xilinx, например, подробное описание алгоритма загрузки приводится в Platform User Guide отдельно по каждой платформе.

http://www.xilinx.com/bvdocs/userguides/ug_spartan3.htm
"The Spartan-3 FPGA family is described in the data sheet and application notes and does not have a separate User Guide" :-(
А xapp-ы то я все просмотрел ...
*



Отдельного User Guide нет потому что Spartan-3 - это по сути тот же Virtex-II в дешевом варианте. Вам сюда:
http://www.xilinx.com/xlnx/xweb/xil_public...tegory=-1209831
Полный документ тянет за 10 Мег. Поэтому если нужна только глава по конфигурированию (около 500 Кб), то искать надо по ключевому слову "ug002_ch3.pdf". Например, копия была здесь: http://techwww.in.tu-clausthal.de/Dokument...D/ug002_ch3.pdf
Andrey Filippov
Цитата(acex2 @ Feb 19 2005, 17:55)
http://www.xilinx.com/xlnx/xweb/xil_public...tegory=-1209831
Полный документ тянет за 10 Мег...

Спасибо, там, действительно, 6-битный IR (в отличие от S2e) - как-то я это и прозевал.
alexf
To Andrey Filippov


Я стараюсь не учить жить людей которые уже давно что то делают. Поэтому не утверждение, а вопрос: а не проще ли в slave serial mode?

Тепрь по делу. Я нашел бесплатный код для JTAG конфигурации Spartan3.
Использовал верхний слой для своей проги. Нижний слой мой собственный под мой USB JTAG.

Вот верхний слой. Работает на ура. Если надо могу прислать полный исходник.

------------------------------------------------------------------
const byte JPROGRAM=0x0b;
const byte CFG_IN=0x05;
const byte JSHUTDOWN=0x0d;
const byte JSTART=0x0c;
const byte BYPASS=0x3f;

extern int length;

int program()
{
shiftIR(&JPROGRAM);
shiftIR(&CFG_IN);


byte init[24];
longToByteArray(0xffffffff,&init[0]); // Sync
longToByteArray(0x66aa9955,&init[4]); // Sync
longToByteArray(0x8001000c,&init[8]); // CMD
longToByteArray(0xe0000000,&init[12]); // Clear CRC
longToByteArray(0x00000000,&init[16]); // Flush
longToByteArray(0x00000000,&init[20]); // Flush
shiftDR(init,0,192,32); // Align to 32 bits.
shiftIR(&JSHUTDOWN);
cycleTCK(12);
shiftIR(&CFG_IN);

byte hdr[12];
longToByteArray(0x8001000c,&hdr[0]); // CMD
longToByteArray(0x10000000,&hdr[4]); // Assert GHIGH
longToByteArray(0x00000000,&hdr[8]); // Flush
shiftDR(hdr,0,96,32,false); // Align to 32 bits and do not goto EXIT1-DR
shiftDR(file_data,0,length*8);
tapTestLogicReset();
setTapState(RUN_TEST_IDLE);
shiftIR(&JSTART);
cycleTCK(12);
shiftIR(&BYPASS); // Don't know why, but without this the FPGA will not reconfigure from Flash when PROG is asserted.
return 0;
}
3.14
2 Andrey Filippov
<А что значит " конфигурирование в сбросе"?>
Паяете в паралель разъем для программатора, добавляете джампер на сброс. При программировании держите проц в сбросе, далее отключаете программатор. Я так и делаю, т.к. "встроенный" самодельный программер и работает медленее и с файлами конфигурации гемерой - сгененрить HEX (или ISC), перенести в QNX, по терминалу перелить на таргет устройство, запрограммироваь.

2 acex2
<Такое очень редко встречается, чтобы в BSDL файле прописывался алгоритм программирования...>
А чего тут редкого, у Xilinx на каждое устройство есть BSDL в формате IEEEE1532.
Еще, у Xilinx есть утилита JDrive (идет вместе с исходниками), которая использует ISC и BSDL (IEEE1532). Далее создаеш CMD, в котором ссылаешся на процедуры описываемые в BSDL, типа "flow_programm" и т.п. и твориш что хочеш.

Еще у меня есть сильное подозрение на то, что Impact работает не по алгоритмам BSDL. Например, xc95216, через Impact стирается секунды 3. а в BSDL указывается задержка в 12с.
Andrey Filippov
Цитата(alexf @ Feb 20 2005, 05:33)
To Andrey Filippov
Я стараюсь не учить жить людей которые уже давно что то делают. Поэтому не утверждение, а вопрос: а не проще ли в slave serial mode?

Сейчас я точно не помню всех доводов за такой выбор, который я делал 2 с половиной года назад, когда начинал первый проект на Xilinx-е (- камеру с - JPEG сжималкой, которая описана, в частности, в статье Xcell, ссылку на которую я уже приводил). Но, как минимум, JTAG - он и есть JTAG, годится не только для конфигурации.
Цитата(alexf @ Feb 20 2005, 05:33)
Тепрь по делу. Я нашел бесплатный код для JTAG конфигурации Spartan3.
Использовал верхний слой для своей проги. Нижний слой мой собственный под мой USB JTAG.
Вот верхний слой. Работает на ура. Если надо могу прислать полный исходник.

Спасибо за программу, но я, наверное, плохо описал, что мне нужно. Я спрашивал про документацию - это для написания новой статьи в Xcell (весенний выпуск, который выйдет в июне, будет опять про Spartan-3). С самой программой-то я, промучившись неделю, все-таки справился (вся разница была в длине IR). Ну и хотел поделиться опытом (проверив и не найдя до сих пор описания конфигурации Spartan-3 через JTAG) - думал - может еще у кого аналогичная проблема.

Исходник для программы пока на CVS Sourceforge не выложен - этих камер-то еще всего 2 штуки, и софт еще не готов для начального релиза, хотя исходники прошивок уже лежат:
http://cvs.sourceforge.net/viewcvs.py/elphel/fpga/
Для предыдущей версии (Spartan-IIe) код драйвера тоже там есть:
http://cvs.sourceforge.net/viewcvs.py/elph...g.c?view=markup
а сама конфигурация осуществляется строчкой инициализационного скрипта
http://cvs.sourceforge.net/viewcvs.py/elph...pga?view=markup
...
cat /etc/x313.bit >/dev/fpgaconfjtag
...
Andrey Filippov
Цитата(3.14 @ Feb 20 2005, 09:36)
2 Andrey Filippov
<А что значит " конфигурирование в сбросе"?>
Паяете в паралель разъем для программатора, добавляете джампер на сброс. При программировании держите проц в сбросе, далее отключаете программатор. Я так и делаю, т.к. "встроенный" самодельный программер и работает медленее и с файлами конфигурации гемерой - сгененрить HEX (или ISC), перенести в QNX, по терминалу перелить на таргет устройство, запрограммироваь.

Да, разъем мне не годится - нужна возможность программировать на уже установленной у пользователя камере. При отладке это для меня две операции - переслать новый файл по ftp и залить (проще, правда на всякий случай послать "init 0" и перезапустить камеру - прошивка установится новая. Кстати, проделать это (зная пароль ftp/telnet) несложно и через интернет для тех камер, которые к нему подключены.

Ну а для обновления у пользователя - такая програмка есть на Live CD (на основе Knoppix-а). Она использует удобное свойство процессора (Axis ETRAX100LX) зашитый в нем начальный загрузчик через сеть - так что впаивать можно чистые флешки и всего одна кнопка переводит камеру в режим заливки ПО - никаких лишних разъемов. Заодно нет опасности, что кто-нибудь ошибется в процессе перезаливки - всегда можно начать с начала.
3.14
Круто, это Вы так зарабатывеате - статьи в Xcell пишете!?
Еще, раз разговор пошел, кто нибудь пользовался юзер командами при встраивании примитива TAP в свои проекты?
Я сильно не разбирался, интересует, а что собственно они могут позволить?
Ну торчит два выхода - сигнализирующие о поступлении юзер команд, а как логика работы с SDR обстоит?
Andrey Filippov
Цитата(3.14 @ Feb 20 2005, 10:31)
Круто, это Вы так зарабатывеате - статьи в Xcell пишете!?

Да нет, деньги зарабатываются продажей железок. Кроме всего прочего - на рынке открытых разработок - конкуренция вообще практически отсутствует.
А за статьи Xcell не платит, но и не берет :-)

Цитата(3.14 @ Feb 20 2005, 10:31)
Еще, раз разговор пошел, кто нибудь пользовался юзер командами при встраивании примитива TAP  в свои проекты?

Не, до этого руки не доходили.
acex2
Цитата(3.14 @ Feb 20 2005, 13:31)
Еще, раз разговор пошел, кто нибудь пользовался юзер командами при встраивании примитива TAP  в свои проекты?
Я сильно не разбирался, интересует, а что собственно они могут позволить?
Ну торчит два выхода - сигнализирующие о поступлении юзер команд, а как логика работы с SDR обстоит?
*


Очень полезная вещь, когда необходимо стандартным способом обеспечить возможность подгрузки/выгрузки любой информации (например, внутреннего состояния какого-нибудь автомата для отладки или содержимого BlockRAM) через JTAG. Работает все очень просто: когда поступает команда USER1 в IR, вход примитива SEL1 устанавливается в 1. Данные для SDR нужно читать самому, используя сигнал-копию TDI и DRCK1, который повторяет TCK во время состояния SHIFT-DR. Выгрузку данных необходимо делать в TDO1, который подключается к реальному TDO на время активности команды USER1.

Аналогично и для USER2, только там используются SEL2, DRCK2 и TDO2.
Andrey Filippov
Цитата(acex2 @ Feb 20 2005, 11:43)
Очень полезная вещь, когда необходимо стандартным способом обеспечить возможность подгрузки/выгрузки любой информации (например, внутреннего состояния какого-нибудь автомата для отладки или содержимого BlockRAM) через JTAG.

Да, судя по описаниям, это использовать не сложно. Просто в моем случае, т.к. ПЛИС все равно сидит на магистрали процессора и программный доступ давно отлажен, я сделал свой аналог - длинный последовательный регистр, к которому подключаю отладочную информацию. А считываю его через обычный интерфейс, как и рабочие данные - один бит в статусном регистре.
vicg
Еще один вопрос по JTAG.
1. Создаю проект для SPARTAN-3.
2. Компилирую его.
3. Включаю питание устройста с SPARTAN-3 (например STARTER KIT SPARTAN- 3).

4. С помощью iMPACT программирую SPARTAN-3 в режиме Boundary Scan..(т.е. с помощью JTAG кабеля)

5. Прекрасно. Проект работает.
6. Теперь вношу незначительные изменения в проект. (например ввожу мигание дополнительным свето диодом.)
7. Компилирую измененный проект.
6. опять с помощью iMPACT программирую SPARTAN-3 в режиме Boundary Scan.
(при этом птание уст-ва после первой прошивки не выключаю)
7. Хрен. проект не работает.
Но если выкл. вкл. питание и снова загрузить измененный проект. То все заработает.

Теперь вопрос. Можно ли сделать так, чтобы не нужно было выкл. вкл питание перед тем как программировать SPARTAN-3 в режиме Bondary Scan.(т.е. с помощью JTAG кабеля)
alexf
Питание выключать - слишком радикально.
А на кнопку нажать не пробовал? У меня получается.
bbg
Цитата(vicg @ Feb 23 2005, 10:25)
Теперь вопрос. Можно ли сделать так, чтобы не нужно было выкл. вкл питание перед тем как программировать SPARTAN-3 в режиме Bondary Scan.(т.е. с помощью JTAG кабеля)


Очень на то похоже, что в соседнем трэде я немножко ответил на этот Ваш вопрос..
Kushtan
Что касается алгоритма программирования, то он описывается стандартом IEEE 1532 и представляет собой ISC state-автомат в виде надстройки над стандартным TAP автоматом. Подробности можно найти в самом стандарте или в краткой форме в описаниях от производителей. У Xilinx, например, подробное описание алгоритма загрузки приводится в Platform User Guide отдельно по каждой платформе.
[/quote]


Кто-нибудь знает, где можно достать стандарт IEEE 1532 безвозмездно?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.