Как запрограммировать конфигурационную ПЗУ Altera типа EPCS или танцы с бубном вокруг .sof и .elf файлов

Программирование конфигурационной ПЗУ EPCSКонфигурационная ПЗУ Altera типа EPCS программируется по JTAG интерфейсу в режиме Active Serial с помощью любого из загрузочных кабелей Altera, например USB-Blaster, Byte-Blaster и для ее прошивки используется файл в формате JTAG Indirect Configuration (.jic). Jic-файл можно сформировать из файла конфигурации FPGA .sof в среде проектирования Quartus. Для этого нужно выполнить следующие шаги:

1. В главном меню File > Convert Progamming Files
2. На появившейся панели выбираем тип программируемого файла как JTAG Indirect
Configuration File (.jic) from the Programming file type
3. В поле Configuration device выбрать тип девайса
4. В поле File name определить имя и диреторию выходного .jic файла
5. Кликнкть в поле SOF Data окна Input files to convert
6. Кликнуть Add File
7. Вырать .sof файл который необходимо конвертировать в .jic
8. Подсветить поле FlashLoader и кликнуть по кнопке Add Device
9. На открывшейся панели выбрать необходимый FPGA девайс
10. Клинуть по кнопке Generate

Преобразование .sof в .jic

Выор FPGA девайса

Полезно обратить внимание на чек-бокс Memory Map File который влючен по умолчанию. В этом случае будет сгенерирован файл в котором прописан начальный и конечный адрес блока для программирования и его контрольная сумма.

Далее подготовленный выше описанным способом .jic файл можно перенести собственно в конфигурационную ПЗУ EPCS с помощью Quartus программатора добавив в качестве файла программирования созданный .jic файл.

Все вышеописанные процедуры описаны в документе под названием "Using the Serial FlashLoader with the Quartus II Software"

Надеюсь уважаемый читатель понимает, что это была только прелюдия. Вся вышеописаная операция обычно производится без особых проблем. Танцы с бубном начинаются когда имеется необходимость зашить в конфигурационную ПЗУ конфигурацию FPGA и программу для встроенного процессора Nios II со смещением адресов .sof и .elf файлов, так, чтобы по включению питания все разошлось по своим местам .sof попал в конфигурационную ОЗУ FPGA, .elf попал, например, в SDRAM и программа Nios II запустилась с нужной точки, обычно с 0х0.

Итак допустим создан и отлажен проект со встроенным процессором Nios II. При этом будут созданы два файла с расширениями .sof и .elf. Первый это конфигурация FPGA второй программа для Nios II. Для того, чтобы созданная система работала автономно необходимо чтобы .sof и .elf были размещены в конфигурационной памяти друг за другом и загружались в нужные места FPGA и On-Chip (SDRAM) по включению питания. Имеется несколько вариантов такой загрузки. Один из них, на мой взгляд самый удобный, - использование в SOPC системе EPCS Serial Flash контроллера, который имеет в своем составе специальный загрузчик - программу которая запускается по включению питания. Загрузчик (или бутлоадер) выполняет последовательно загрузку аппаратной и программных частей проекта и переводит вектор на начало программы.

EPCS Serial Flash контроллер

Схема подключения Flash девайса типа EPCS к FPGA ничем особенным не отличается. Состояние входов Msel[1..0] определяет режим конфигурирования Active Serial.

Подключение конфигурационного ПЗУ к FPGA Cyclone

Единственное, что при назначении ножек необходимо установить все ножки двойнго назначения как I/O. Для этого необходимо в меню Quartus выбрать Assigments > Device и кликнуть по кнопке Device and Pin Options. На появившейся панели перейти на закладку Dual-Purpose Pins и выставить все пины как Use as regular I/O.

Ножки двойного назначения в FPGA Cyclone

Прежде чем приступить к программированию ПЗУ EPCS необходимо выполнить некоторые преобразования с файлами .sof и .elf для того, чтобы получить .hex файл программы Nios II с правильным начальным адресом, чтоб затем из .sof и полученного .hex путем вышеописанных преобразований получить .jic файл прошивки последовательного конфигурацинного ПЗУ типа EPCS.

Все можно сделать из командной строки Nios II EDS - Nios Пуск > Все программы > Altera > Nios II EDS <версия> > Nios II <версия> Command Shell, но на мой взгляд проще воспользоваться командной строкой на базе программы Total Commander. Для этого нужно скопировать в отдельную директорию, например C:/Nios из директории с установленной программой Quartus три файла из папок nios2eds/bin и nios2eds/bin/nios2-gnutools/H-i686-pc-cygwin/bin - elf2flash.jar, sof2flash.jar и nios2-elf-objcopy.exe соответственно, а также .sof и .elf файлы проекта (например test.sof и test.elf). Далее последовательно в командной строке Total Commander выполняем следующие преобразования

1. Создать последовательно .flasf файлы из .sof и .elf, причем так, что из .elf .flash создается с опцией --after. Находясь в созданной директории Nios набрать в командной строке
sof2flash.jar --input=test.sof --output=testsof.flash --epcs --verbose
и нажать Enter В результате в директории C:/Nios будет создан файл testsof.flash
2. Набрать в командной строке
elf2flash.jar --input=test.elf --output=testelf.flash --epcs --after=testsof.flash --verbose
и нажать Enter В результате будет создан файл testelf.flash с относительным начальным адресом, который следует непосредственно после конечного адреса в файле testsof.flash
3. Конвертировать testelf.flash в .hex файл Команда -
nios2-elf-objcopy.exe -I srec -O ihex testelf.flash  testelf.hex

How create a JTAG Indirect Configuration File (.jic) file with Nios II hardware and software image

Теперь на базе файлов test.sof и testelf.hex можно создать .jic файл - образ для прошивки EPCS, который будет содержать в себе образы конфигурации FPGA и программы Nios II следующими друг за другом. Как описано в начале данного поста выполняем шаги последовательно по пунктам по пункт номер 9. Далее:
10. Клинуть Add Hex Data и находим файл конфигурации программного проекта testelf.hex. Указываем в свойствах Hex Data PropertiesRelative addressing.
11. Кликнуть по кнопке Generate. После успешного генерирования .jic файла кнфигурации всего проекта егоможно прошивать в EPCS девайс с помощью Quartus Programmer

Создание .jic файла аппаратной и программной частей проекта на FPGA

Если уважаемый читатель подумал, что все, то нет. Не всегда от версии к версии Quartus такой вариант работает. Тоесть после включения питания проект не работает. Наилучший вариант это Nios II Flash Programer. С его помощью можно прошить в девайс типа EPCS образы конфигурации FPGA и программы для Nios II (файлы .sof и .elf) одним махом особо не напрягаясь. Самое важное, что такой вариант полностью работоспособен, тоесть по включению питания модуль имеющий в своем составе FPGA (Nios II) + программу (работающую например в SDRAM) запускается и работает точно также как и в отладчике. Итак, изучив документ Nios II Flash Programmer User Guide:

Из главнго меню Nios II Tools > Flash Programmer > откроется панель на которой необходимо ввести пути к .sof и .elf файлам, а также адрес смещения который можно найти в файле output_file.map.

Nios II Flash Programmer

Файл output_file.map формируется совместно с генерацией output_file.jic файла и содержит в себе начальные и конечные адреса конфигурации FPGA и программы для процессора Nios II.

Какрта распределения адресов памяти аппаратной и программной части

Так вот адрес начала программной части образа для EPCS необходимо ввести в окошко Offset. Далее нажав на кнопку Start можно наблюдать на консоли Nios Eclipse процесс программирования последовательной загрузочной ПЗУ типа EPCS.

Примечание: Все вышеописанное производилось на базе Quartus 9.0 В более поздних версиях Quartus программирование EPCS производится по той-же технологии с поправкой на частные особенности версии.

У кого есть свои варианты процесса прошивки последовательной конфигурационной ПЗУ типа EPCS, варианты загрузки аппаратного и программного образов проекта и т. п. просьба выкладывать в комментах к данному посту на пользу всем плисоводам.

комментариев: (1)

Перейти и растаять в своей любимой социалке