ПЛИС
ПЛИС\Удаленная прошивка ПЛИС\Программная реализация
Программная реализация удалённой прошивки ПЛИС
Осталось написать библиотеку функций или драйвер для реализации основных функциональных возможностей, а именно:
- Определение типа загруженной конфигурации в ПЛИС (базовая или рабочая)
- Попытка загрузки рабочей версии программного обеспечения в ПЛИС, если текущая конфигурация является базовой
- Определение статуса загрузки рабочей конфигурации в ПЛИС (успешно или с ошибкой, определение типа ошибки)
В памяти EEPROM будут храниться признак, занимающий 1 байт адресного пространства. Признак может принимать следующие значения :
- 0xFF - Application-конфигурация отсутствует
- 0x00 - Application-конфигурация имеется, но ещё не запускалась ни разу (не проверена на работоспособность)
- 0x01 - Application-конфигурация имеется и уже успешно запускалась (работоспособна)
- 0x02 - Application-конфигурация имеется, но не работоспособна (была неуспешная попытка запуска) - код может быть замененн на 0xFF
Функция Ru_CheckAndLoadApplication проверяет тип текущей конфигурации. Если текущая конфигурация - рабочая и это её первый запуск, то в байт-признак записывается значение 0x01, указывая на то, что имеется рабочая конфигурация. Если текущая конфигурация - базовая и загружена в результате ошибки реконфигурации, то в байт-признак записывается значение 0xFF, указывая на то, что рабочая конфигурация отсутствует и не следует при следующем включении пытаться её загрузить. В этом случае будет функционировать только базовая конфигурация, которая может выполнять все функции рабочей конфигурации, как было оговорено ранее.
В любом случае, после включения будет загружена базовая конфигурация, в которой менеджер конфигураций (функция Ru_CheckAndLoadApplication из примера) выберет и
выполнит загрузку рабочей конфигурации, если такая имеется. В случае ошибки загрузки рабочей конфигурации будет загружена снова базовая конфигурация, а в дальнейшем не будет производиться попыток
загрузить рабочую конфигурацию до тех пор, пока на её место не будет записана новая рабочая конфигурация (до тех пор, пока байт-признак в памяти EEPROM не будет сброшен в 0xFF).
Данный алгоритм позволяет обезопаситься от загрузки некорректной прошивки и автоматически вернуться к базовой прошивке, которая всегда остаётся работоспособной, так как не подлежит изменению. Тем самым
устройство остаётся работоспособным в любом случае. Текст программы драйвера с примерами написан на языке С.
По поводу адресов хранения конфигураций в памяти EPCS. Адреса должны быть кратны границам секторов, так как перед записью в память FLASH необходимо очистить весь сектор целиком. Базовая конфигурация будет
располагаться по адресу 0x000000. Объём, занимаемый конфигурационным файлом для ПЛИС Stratix II EP2S60 равен 16951824 бит (2118978 байт). Размер конфигурационного файла зависит от ПЛИС. Для ПЛИС семейства
Stratix II эти размеры указаны в таблице.
Размер сектора конфигуратора EPCS64 равен 65536 байт, количество секторов 128. Отсюда следует, что конфигурационный файл занимает в памяти EPCS64 33 сектора (при расчётах необходимо округлять в большую сторону). Так как после конфигурационных данных располагается программа для процессора NIOS, то необходимо учесть и её размер. В нашем случае программа для NIOS не превышает по объёму 64 КБайт, то есть 1 сектор. Итого, полный объём, занимаемый конфигурационными данными и программой для NIOS составляет 33+1=34 сектора. При этом, начиная с сектора 35 можно размещать рабочую конфигурацию. При этом всего можно разместить 128 / 34 = 3 различных конфигурации и ещё останется немного свободного места. 34 сектора по 65536 байт соответствуют размеру итогового файла прошивки 34*65536=2228224 байт (2,125 МБайт). Ниже в таблице приведены диапазоны адресов для некоторых секторов. Нумерация секторов начинается от 0. Более подробную информацию можно найти в документации на микросхему EPCS64.
Комментарии