|
Remote Update Xilinx 7 series FPGAs |
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 20)
|
Jan 14 2016, 13:05
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Похоже, ядро AXI EMC v3.0 можно использовать для чтения/записи флэшки. Но пока не могу понять как его законнектить, если кто с ним работал просьба подсказать. Схема в pdf-файле. Память подключена для синхронной записи/чтения (рисунок из ug470), ногу FPGA CCLK_0_AE34 не могу подключить к линии CCLK_FPGA, что-то её выкидывает
Эскизы прикрепленных изображений
Прикрепленные файлы
flash.pdf ( 2.68 мегабайт )
Кол-во скачиваний: 18
|
|
|
|
|
Jan 25 2016, 21:26
|

Частый гость
 
Группа: Свой
Сообщений: 164
Регистрация: 27-06-04
Пользователь №: 194

|
Цитата(doom13 @ Jan 25 2016, 16:54)  Приветствую. Есть ли возможность выдать сигнал на пин INIT_B? Хочу после загрузки прошивки выдать сигнал сброса на flash-память. он после загрузки ПЛИС, вроде становится пользовательским выводом - "делай, что хочешь"
--------------------
qwerty
|
|
|
|
|
Jan 26 2016, 07:43
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Цитата(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.
|
|
|
|
|
Jan 27 2016, 12:25
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Цитата(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).
|
|
|
|
|
Jan 27 2016, 16:34
|
Профессионал
    
Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643

|
Приветствую! Цитата(Maksim @ Jan 27 2016, 16:20)  Пробовал повесить на ноги флэша ILA (использую Vivado 2015.2), но не вышло, всё время выдаёт ошибку (ILA подключался в сечении порты модуля AXI EMC - выходные буферы FPGA).
Если есть свободные "ноги", то можно на них вывести что идёт флэш, а уже к ним попробовать чипскоп подключить, иногда, помогает, когда чипскоп не хочет подключаться Надо цеплять ILA не к внешим портам (он такого не позволяет так как физически не подключится) а к линия идущим ко входам OBUF,IOBUF, и от выходов IBUF IOBUF. Если буфера уже расположенны в корке то легким движенеим рук это не сделать - приходится "рыть" gate-level после синтеза. Успехов! Rob.
|
|
|
|
|
Jan 27 2016, 20:50
|

Частый гость
 
Группа: Свой
Сообщений: 164
Регистрация: 27-06-04
Пользователь №: 194

|
так подключали?
Эскизы прикрепленных изображений
--------------------
qwerty
|
|
|
|
|
Jan 28 2016, 08:22
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Цитата(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.
Эскизы прикрепленных изображений
|
|
|
|
|
Jan 29 2016, 13:31
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
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, там как раз аналогичная память используется. Пробовал их менять, влияния не оказывают. Ещё пробовал менять частоту тактирования памяти, источник тактирования, разрешать тактирующую частоту через определённый интервал времени после загрузки прошивки - результат такой же. Нужна помощь. Какие будут идеи?
Эскизы прикрепленных изображений
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|