Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Remote Update Xilinx 7 series FPGAs
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
doom13
Приветствую.
Хочу реализовать поддержку удалённого обновления ПО для Virtex-7 (XC7VX690T) с возможностью хранения в конфигурационном девайсе нескольких прошивок. В качестве конфигурационного девайса используется Flash Micron G18 (MT28GU01GAAX1E) 1024 Mb, режим конфигурации Master BPI.
Пока основной вопрос - есть ли какое-то стандартное ядро для чтения/записи BPI flash (Parallel NOR Flash)? Или тут придётся делать свой контроллер для Parallel NOR Flash памяти (возможно позаимствовать из примеров xapp1081, xapp518)?
Спасибо.

Ещё вопрос, для прошивки в конфигурационную память будет использоваться BIN-файл?
jojo
Я сильно не думал над этим, взял модель микросхемы памяти на Verilog от Micron и конвертировал оттуда тест на язык Си.
То, что было на Verilog регистрами, вывел из FPGA через GPIO.
Чисто софтовое решение, bitbang.

Когда несколько bin зашиты в ПЗУ, по адресу любой прошивки можно сделать горячую перезагрузку.

Что нужно шить я сейчас не помню, нужно уточнить. По идее это BIN или его производные в формате Hex.
doom13
Похоже, ядро AXI EMC v3.0 можно использовать для чтения/записи флэшки. Но пока не могу понять как его законнектить, если кто с ним работал просьба подсказать. Схема в pdf-файле.
Память подключена для синхронной записи/чтения (рисунок из ug470), ногу FPGA CCLK_0_AE34 не могу подключить к линии CCLK_FPGA, что-то её выкидывает
doom13
Разобрался, подключение контроллера к памяти можно посмотреть тут (AXI_EMC_IP_STARTUPE3.zip). Далее используем библиотеку XilFlash или драйвер от Micron.
doom13
Цитата(doom13 @ Jan 13 2016, 10:51) *
Ещё вопрос, для прошивки в конфигурационную память будет использоваться BIN-файл?

Для удалённого обновления используется BIN-файл.
doom13
Приветствую.
Есть ли возможность выдать сигнал на пин INIT_B? Хочу после загрузки прошивки выдать сигнал сброса на flash-память.
Maksim
Цитата(doom13 @ Jan 25 2016, 16:54) *
Приветствую.
Есть ли возможность выдать сигнал на пин INIT_B? Хочу после загрузки прошивки выдать сигнал сброса на flash-память.


он после загрузки ПЛИС, вроде становится пользовательским выводом - "делай, что хочешь"
doom13
Цитата(Maksim @ Jan 26 2016, 00:26) *
он после загрузки ПЛИС, вроде становится пользовательским выводом - "делай, что хочешь"

В доке тип ноги INIT_B указан как Dedicated, при попытке назначения Vivado выбрасывает ошибку. CCLK также Dedicated (при попытке назначения выдаст ошибку), но к нему возможно получить доступ через STARTUPE2. Есть ли что-то аналогичное для INIT_B?

Есть проблема в работе конфигурационной памяти. Конфигурационная флэшка нормально работает в случае закрузки FPGA по JTAG. Есть AXI EMC плюс софтовый драйвер (XilFlash или драйвер от Micron, работают одинаково хорошо), можем писать/читать данные в/с флэш-памяти. Но вот если система стартовала при включении питания, конфигурационная память использовалась загрузчиком FPGA, то есть какая-то проблема. Софтовый драйвер не может пройти процедуру инициализации памяти. Кусок кода, где происходит ошибка:
Код
   /* Step 1: Send the Read CFI Command */
   FLASH_WRITE(0x0055, CMD(0x0098));

   /* Step 2: Check that the CFI interface is operable */
   if( (FLASH_READ(0x0010) != CMD(0x0051)) ||
       (FLASH_READ(0x0011) != CMD(0x0052)) ||
       (FLASH_READ(0x0012) != CMD(0x0059)) )
      return Flash_CfiFailed;

FLASH_READ(0x0010) выдаст 0, если поставить breakpoint и вернуться прочитать всё повторно, то условие выполнится. Вот и пытаюсь найти различия в вариантах загрузки FPGA.
Maksim
ПЛИС загрузилась из флэш памяти, а потом внутри неё процессор не может получить к ней доступ?
Чипскопом посмотреть, что выдаётся на ноги флэш, пробовали?
doom13
Цитата(Maksim @ Jan 27 2016, 14:10) *
ПЛИС загрузилась из флэш памяти, а потом внутри неё процессор не может получить к ней доступ?

Да, ПЛИС загрузилась с флэша и работает. Есть MicroBlaze, AXI EMC и др. В программе MicroBlaze используется библиотека для работы с флэш-памятью ( 1.XilFlash или 2.либа от Micron, выше был кусок кода для функции инициализации флэша из либы Micron). Если ПЛИС стартовала с флэша, то функция инициализации флэша не проходит (кусок кода, где получается ошибка, - выше).
Цитата(Maksim @ Jan 27 2016, 14:10) *
Чипскопом посмотреть, что выдаётся на ноги флэш, пробовали?

Пробовал повесить на ноги флэша ILA (использую Vivado 2015.2), но не вышло, всё время выдаёт ошибку (ILA подключался в сечении порты модуля AXI EMC - выходные буферы FPGA).
Maksim
[/quote]
Пробовал повесить на ноги флэша ILA (использую Vivado 2015.2), но не вышло, всё время выдаёт ошибку (ILA подключался в сечении порты модуля AXI EMC - выходные буферы FPGA).
[/quote]
Если есть свободные "ноги", то можно на них вывести что идёт флэш, а уже к ним попробовать чипскоп подключить, иногда, помогает, когда чипскоп не хочет подключаться
RobFPGA
Приветствую!

Цитата(Maksim @ Jan 27 2016, 16:20) *
Пробовал повесить на ноги флэша ILA (использую Vivado 2015.2), но не вышло, всё время выдаёт ошибку (ILA подключался в сечении порты модуля AXI EMC - выходные буферы FPGA).

Если есть свободные "ноги", то можно на них вывести что идёт флэш, а уже к ним попробовать чипскоп подключить, иногда, помогает, когда чипскоп не хочет подключаться

Надо цеплять ILA не к внешим портам (он такого не позволяет так как физически не подключится) а к линия идущим ко входам OBUF,IOBUF, и от выходов IBUF IOBUF.
Если буфера уже расположенны в корке то легким движенеим рук это не сделать - приходится "рыть" gate-level после синтеза.

Успехов! Rob.

doom13
Цитата(RobFPGA @ Jan 27 2016, 19:34) *
Надо цеплять ILA не к внешим портам (он такого не позволяет так как физически не подключится) а к линия идущим ко входам OBUF,IOBUF, и от выходов IBUF IOBUF.
Если буфера уже расположенны в корке то легким движенеим рук это не сделать - приходится "рыть" gate-level после синтеза.

Так и делал. После выполнения анализа открыл схему и натыкал Debug point-ов между портами модуля AXI EMC и входными/выходными буферами FPGA. Пробовал поставить Debug point-ы внутри самого модуля AXI EMC, но результат тот же - ошибки. Решил, что Vivado не может прикрутить ILA к шине флэша (завтра ещё раз перепроверю).
Maksim
так подключали?
doom13
Цитата(Maksim @ Jan 27 2016, 23:50) *
так подключали?

Такой вариант сейчас опробую, но пока было так: на рисунке 1 показано сечение, куда ставятся Debug point-ы.
Выкидывает ошибку на этапе Bitstream Generation (Synthesis & Implementation проходят нормально):
Цитата
[DRC 23-20] Rule violation (RTSTAT-2) Partially routed net - 45 net(s) are partially routed. The problem bus(es) and/or net(s) are CPU/axi_emc_0/U0/mem_a[30:0], CPU/axi_emc_0/U0/EMC_CTRL_I/IO_REGISTERS_I/mem_cen[0], CPU/axi_emc_0/U0/EMC_CTRL_I/IO_REGISTERS_I/mem_dq_o[15:0], CPU/axi_emc_0/U0/EMC_CTRL_I/IO_REGISTERS_I/mem_oen[0], CPU/axi_emc_0/U0/EMC_CTRL_I/IO_REGISTERS_I/mem_wen_reg.
doom13
Цитата(Maksim @ Jan 27 2016, 23:50) *
так подключали?

Спасибо, так собралось.
doom13
Проблема с работой флэш-памяти при загрузке FPGA с флэшки остаётся. Получается в данной ситуации после операции записи, операция чтения проходит со второй попытки, о чём и писал в сообщении №8 данной темы. Думаю, ресет тут помог бы, но он идёт с ножки INIT_B, по схеме Master BPI всё правильно, но не работает.
doom13
1. Если ПЛИС загружалась по JTAG, то память работает нормально (рисунок 1), MicroBlaze выполняет код:
Код
/* Step 1: Send the Read CFI Command */
FLASH_WRITE(0x0055, CMD(0x0098));

/* Step 2: Check that the CFI interface is operable */
if( (FLASH_READ( 0x0010 ) != CMD(0x0051)) ||
       (FLASH_READ( 0x0011 )  != CMD(0x0052)) ||
       (FLASH_READ( 0x0012 )  != CMD(0x0059)) )
      return Flash_CfiFailed;

2. Если ПЛИС стартовала с флэша, то память работает криво (рисунок 2), MicroBlaze выполняет код:
Код
/* Step 1: Send the Read CFI Command */
FLASH_WRITE(0x0055, CMD(0x0098));

/* Step 2: Check that the CFI interface is operable */
data = FLASH_READ( 0x0010 );
if( (FLASH_READ( 0x0010 )  != CMD(0x0051)) ||
       (FLASH_READ( 0x0011 )  != CMD(0x0052)) ||
       (FLASH_READ( 0x0012 ) != CMD(0x0059)) )
      return Flash_CfiFailed;

Во втором случае, чтобы пройти инициализацию памяти, добавлена дополнительная операция чтения.
Для ядра AXI EMC есть настройки таймингов (рисунок 3), их взял из pg100, там как раз аналогичная память используется. Пробовал их менять, влияния не оказывают. Ещё пробовал менять частоту тактирования памяти, источник тактирования, разрешать тактирующую частоту через определённый интервал времени после загрузки прошивки - результат такой же.
Нужна помощь. Какие будут идеи?
Koluchiy
Я с этой XilFlash чего-то намучился, в итоге забил и написал почти все сам.
doom13
Цитата(Koluchiy @ Mar 31 2016, 16:40) *
Я с этой XilFlash чего-то намучился, в итоге забил и написал почти все сам.

Лучше взять драйвер у Micron, там уже всё сделано и без привязки к конкретной платформе (у меня используется из Linux User Space, пришлось подправить одну строчку в исходниках Micron).
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.