Добро пожаловать, Гость
Логин: Пароль: Запомнить меня
  • Страница:
  • 1

ТЕМА: Аналог порограматора для LINUX

Аналог порограматора для LINUX 10 года 1 мес. назад #2718

  • chuiii
  • chuiii аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 1
  • Спасибо получено: 0
Предыстория
У меня уже давно валялась демо плата Марсоход 2 и вот только сейчас появилось время в ней поковыряться.
Я достаточно наслышан о подводных камнях при разработке под FPGA, но я не ожидал что я начну спотыкаться на самом первом этапе - подключения демо платы к ПК.
Посокрушавшись об отсутствии нативной Quartus'овской поддержки я собрал прошивалку mbftdi. К моему удивлению и она меня тоже послала лесом.
Оказалось, что <a href="aquartus2">Quartus II</a> v13.1 генерирует для EP3C10E144 в .svf файле для первого проекта секцию TDI длинной 2944296 бит, причём сами данные были разбиты на несколько тысяч строк. На сколько я понял Квартус делает подобную фигню из соображений скорости заливки: меньше оверхед на сброс и переключение в SDR заново. Проблема в том, что mbftdi на такие трюки не рассчитана. Покопавшись в коде, выяснилось, что mbftdi ... скажем так, поддерживает очень ограниченную спецификацию SVF формата.
В глубокой депрессии от бесполезности этой очень крутой железяки и безысходности своего положения я погрузился в настолько глубокое отчаяние, что был близок к тому чтобы переписать этот ... скажем так, код. Но перед этим я вознёс краткую молитву Всезнающему защитнику нашему с просьбой указать ... погуглил, короче.

Программа.
Оказывается добрые дяденьки уже написали всё необходимое для решения данной проблемы. Чудо сие UrJTAG именуется. Это GNU пакет, включающий инструкции jtag для небольшого набора популярных чипов, драйвера коннекторов и командную оболочку. И что самое важное, в командной оболочке есть команда `svf`, лексер которой построен с полной поддержкой спецификации формата(у самой команды есть ограничения с которыми можно ознакомиться в файле /usr/share/doc/urjtag/UrJTAG.txt.gz, но на работоспособность векторных файлов для марсохода они не влияют)

Первый тест.
Далее предполагается что мы пользуемся линуксом с debian-вкусом(обладатели других дистрибутивов могут обратится к своему драгдиллеру за дополнительной информацией о их пакетном менеджере)
Установка
	$ sudo apt-get install urjtag
ну и запускаем
	$ jtag

	UrJTAG 0.10 #1502
	Copyright (C) 2002, 2003 ETC s.r.o.
	Copyright (C) 2007, 2008, 2009 Kolja Waschk and the respective authors

	UrJTAG is free software, covered by the GNU General Public License, and you are
	welcome to change it and/or distribute copies of it under certain conditions.
	There is absolutely no warranty for UrJTAG.

	WARNING: UrJTAG may damage your hardware!
	Type "quit" to exit, "help" for help.

	jtag>
Первое что нам нужно сделать - подключиться к железяке. Для этого существует множество драйверов, список которых можно получить набрав:
	jtag> help cable
Нас интересует самый постой - FT2232 драйвер.
	jtag> cable FT2232 help
	Usage: cable FT2232 [vid=VID] [pid=PID] [desc=DESC] [driver=DRIVER]

	VID        vendor ID (hex), defaults to 0000
	PID        product ID (hex), defaults to 0000
	DESC       Some string to match in description or serial no.
	DRIVER     usbconn driver, either ftdi-mpsse or ftd2xx-mpsse
			   defaults to ftdi-mpsse if not specified
	
	jtag>
Как видно нам хорошо бы знать айдишники вендора и продукта. Ну так давайте их таки и узнаем, запустив еще один терминал и набрав(естественно в этот момент Марсоход надобно к компу таки подключить)
	$ lsusb | grep -i ft2232
	Bus 001 Device 020: ID 0403:6010 Future Technology Devices International, Ltd FT2232C Dual USB-UART/FIFO IC
	$
(Если lsusb не нашёл наш девайс то надо копать в сторону udev и глубже в libusb... но это совсеееем другая история)
Вооот, в нашем случае вендор айди - 0403h, а прдукт айди - 0601h. Подключаемся к девайсу
	jtag> cable FT2232 vid=0403 pid=0601
	Connected to libftdi driver.
	jtag>
Следующий этап - определение jtag-chain. Это делается с помощю команды `detect`:
	jtag> detect
	IR length: 10
	Chain length: 1
	Device Id: 00000010000011110001000011011101 (0x00000000020F10DD)
	  Manufacturer: Altera
	    Unknown part!
		chain.c(149) Part 0 without active instruction
		chain.c(200) Part 0 without active instruction
		chain.c(149) Part 0 without active instruction
	jtag>
Ой, а это что за ерунда. Дело в том что UrJTAG не знает про все девайсы на свете и наш циклон как раз в числе неизвестных. К счастью, исправить это досадное недоразумение достаточно просто - достаточно иметь .BSD файл для нашего чипа, который Altera любезно предоставила . Скачав его куда-нибудь, надо рассказать UrJTAG`у о нашей находке:
	jtag> bsdl path /директория/в/которой/лежит/наш/замечательный/файл
	jtag> detect
	IR length: 10
	Chain length: 1
	Device Id: 00000010000011110001000011011101 (0x00000000020F10DD)
	  Filename:     /home/chuiii/develop/programing/verilog/bsdl/EP3C10E144.BSD
	jtag>
Всё готово к заливке
	jtag> svf /путь/к/файлу/проекта.svf
Вот и всё - плата весело мигает диодами и на мониторе отображаются цветные полосы. Ура.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от nckm.
  • Страница:
  • 1
Время создания страницы: 0.097 секунд
Работает на Kunena форум