реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> VC707 доступ к Linear Flash, Либо загрузка, либо доступ
ConstHw
сообщение Mar 25 2016, 12:51
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 58
Регистрация: 12-11-15
Пользователь №: 89 287



Всем привет

Плата в режиме BPI Config
http://www.xilinx.com/support/documentatio...707_Eval_Bd.pdf
( Страница 80 )

1.1 Берем проект для Xilinx VC707 - BIST
http://www.xilinx.com/products/boards-and-...l#documentation
1.2 Скачиваем, смотрим внутри на наличие внутри ядра AXI_EMC в режиме Linear Flash
1.3 Собираем bit файл system_wrapper.bit
1.4 Экспортируем hdf в SDK
1.5 В SDK создаем бутлоадер. Задаем оффсет
1.6 Создаем в SDK прошивку download.bit - инициализируем файл BRAM в system_wrapper.bit бутлоодером
1.7 Генерим SREC файл из того что хотим сделать нашим приложением
1.8 Открываем опять Вивадо, собираем mcs файл
Код
Addr1         Addr2         Date                    File(s)
0x00000000    0x007B616F    Mar 25 14:22:08 2016    D:/Users/vinogradovk/rdf0195-vc707-bist-c-2015-1/bins/download.bit
0x02000000    0x0209B29F    Mar 25 12:22:55 2016    D:/Users/vinogradovk/rdf0195-vc707-bist-c-2015-1/bins/lwip_echo_server.srec

1.9 Загружаем mcs файл во флэшку

Дальше начинаются чудеса
2.1. Плата по прежнему в режиме "грузись с флэшки"
2.2 Дергаем питание и смотрим в консоль
Код
SREC Bootloader
Loading SREC image from flash @ address: 62000000
ERROR: Error while reading an SREC line from flash

2.3 То есть плиса прошилась, бутлоадер оказался в памяти BRAM, но не смог прочитать SREC
2.4 Оставляя плису прошитой, открываем SDK, запускаем бутлоадер из SDK на платформе
2.5 Ставим точку останова перед началом чтения памяти и открываем смотрелку памяти из SDK memory
2.6 Видим фигу - по адресу 0x60000000, где лежит битфайл с которого плиса только что грузилась, лежат нули. Остальные памяти, например DDR3 через МИГ видны и доступны

Исключаем чудеса
3.1 Открываем Hw_Manager, берем файл download.bit грузим его в ПЛИС и О ЧУДО
Код
SREC Bootloader
Loading SREC image from flash @ address: 62000000

Executing program starting at address: 00000000


-----lwIP TCP echo server ------
TCP packets sent to port 6001 will be echoed back
Start PHY autonegotiation

3.2 Запускаем на прошитой через JTAG плисе любое приложение, ставим останов
3.3 В SDK инструменте Memory видим битник прошивки плис по адресу 0x600000 и SREC приложения по адресу 62000000

Выводы
Если ПЛИСа была загружена с BPI FLASH, то доступа к этой BPI FLASH у нее уже нет

Как такое может быть?
И как это победить?
Чем плиса залитая из флэшки отличается от плисы залитой с jtag?
Помню была ситуация когда ножка SCK для SPI конфигурационной флэшки была доступна после ухищирений, но ведь тут в ПЛИСу заливаются абсолютно одинаковые битфайлы, отличающиеся путем попадания в ПЛИСу.
Положение джамперов на плате не меняется, всегда в режиме "грузись с BPI"
Go to the top of the page
 
+Quote Post
doom13
сообщение Mar 25 2016, 13:20
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(ConstHw @ Mar 25 2016, 15:51) *
Выводы
Если ПЛИСа была загружена с BPI FLASH, то доступа к этой BPI FLASH у нее уже нет

Как такое может быть?
И как это победить?
Чем плиса залитая из флэшки отличается от плисы залитой с jtag?
Помню была ситуация когда ножка SCK для SPI конфигурационной флэшки была доступна после ухищирений, но ведь тут в ПЛИСу заливаются абсолютно одинаковые битфайлы, отличающиеся путем попадания в ПЛИСу.
Положение джамперов на плате не меняется, всегда в режиме "грузись с BPI"

Загрузчик оставляет память в SYNC Mode (думаю, в констрейнах Вы прописали грузиться именно в этом режиме), у меня читать флэшку в SYNC mode не получилось, решил забить, перед её инициализацией в программе загоняю флэш обратно в ASYNC mode и всё работает.
(похожую тему поднимал тут)

PS:
Если скорость загрузки не критична, то можно в SDC-файле прописать, чтобы сразу грузилась в ASYNC mode.
Go to the top of the page
 
+Quote Post
ConstHw
сообщение Mar 25 2016, 13:52
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 58
Регистрация: 12-11-15
Пользователь №: 89 287



doom13, спасибо! Стало намного понятнее, но ряд вопросов остался

1) Чтобы в EMC контроллере был доступен register Интерфейс, надо включить режим Custom и выбрать режим памяти отличный от Linear Flash. Какой режим выбрать? И тогда в бутлоадер надо будет добавить команду инициализации контроллера флэшки в режим linear flash?

2) Про примитив Startupe2.
Тот, что доступен в 7Series имеет вход только для клока. При этом на 707 клок выходит из флэшки и заходит в конфигурационный порт. Для работы EMC не используется
http://www.xilinx.com/support/documentatio...ries_Config.pdf
http://www.xilinx.com/support/answers/52626.html
Вы в своей теме упомянули пример со Startupe3, но во-первых для Ultrascale, во вторых пропускат данные.
Нужен ли блок startupe на 7 серии при linear flash?

3) Как выключить синхронный режим чтения при конфигурации? В командах генерации битстрима и MCS не нашел таких опций

Код
write_bitstream  [-force] [-verbose] [-raw_bitfile] [-no_binary_bitfile]
                 [-mask_file] [-readback_file] [-logic_location_file]
                 [-bin_file] [-reference_bitfile <arg>] [-cell <arg>] [-quiet]
                 <file>
write_cfgmem  [-force] -format <arg> -size <arg> [-interface <arg>] [-checksum]
              [-disablebitswap] [-loadbit <arg>] [-loaddata <arg>] [-quiet]
              [-verbose] <file>


Огромное спасибо за помощь

Сообщение отредактировал ConstHw - Mar 25 2016, 15:29
Go to the top of the page
 
+Quote Post
doom13
сообщение Mar 25 2016, 18:35
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(ConstHw @ Mar 25 2016, 16:52) *
1) Чтобы в EMC контроллере был доступен register Интерфейс, надо включить режим Custom и выбрать режим памяти отличный от Linear Flash. Какой режим выбрать? И тогда в бутлоадер надо будет добавить команду инициализации контроллера флэшки в режим linear flash?

Я использовал AXI EMC в режиме Linear flash.
Цитата(ConstHw @ Mar 25 2016, 16:52) *
2) Про примитив Startupe2.
Тот, что доступен в 7Series имеет вход только для клока. При этом на 707 клок выходит из флэшки и заходит в конфигурационный порт. Для работы EMC не используется...
Вы в своей теме упомянули пример со Startupe3, но во-первых для Ultrascale, во вторых пропускат данные.
Нужен ли блок startupe на 7 серии при linear flash?

Через startupe2 на flash memory заводится нужная частота, у меня было 100 MHz (при старте загрузчик FPGA тактирует память таким же клоком), думал, может для SYNC mode многовато, может развелось криво, сбрасывал до меньших значений но SYNC mode так и не заработал, хз в чём проблема и что делал не так. Для ASYNC mode может клок и не нужен, без доки не скажу?
Цитата(ConstHw @ Mar 25 2016, 16:52) *
3) Как выключить синхронный режим чтения при конфигурации?

ug908 стр. 64
Цитата
BITSTREAM.CONFIG.BPI_SYNC_MODE

но, если не меняли, то должен быть ASYNC mode.

PS:
Ссорри, невнимательно прочитал Ваше первое сообщение, решил, что проблема аналогична моей.
Проблема тут:
Цитата(ConstHw @ Mar 25 2016, 15:51) *
2.5 Ставим точку останова перед началом чтения памяти и открываем смотрелку памяти из SDK memory
2.6 Видим фигу - по адресу 0x60000000, где лежит битфайл с которого плиса только что грузилась, лежат нули. Остальные памяти, например DDR3 через МИГ видны и доступны

так писать/читать BPI flash memory не получится (через указатель, как с DDR3 тут работать не будет), смотрите в сторону Common Flash Memory Interface. Если проще - то xilflash в помощь, там всё сделали за нас, ещё можно скачать драйвер для работы с памятью с сайта Micron (я именно его и использовал). Там всё круто (у Micron), мегакросплатформенно сделано, если master для flash memory не MicroBlaze, то самое то.
Go to the top of the page
 
+Quote Post
Muscat
сообщение Mar 25 2016, 19:32
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 277
Регистрация: 8-04-09
Из: Москва
Пользователь №: 47 382



1) Если EMC в режиме linear flash, то нет доступа к внутренним регистрам (AXI_REG шина не появляется)

2) Не понял? В режиме синхронного чтения клок выходит ИЗ флэшки и идет В ПЛИСу, разве нет?
Страница 62
http://www.xilinx.com/support/documentatio...ries_Config.pdf
При этом блок STARTUPE (там же страница 92) используется для вывода клока ИЗ плисы, когда используется SPI FLASH. Разве не так?

3) Не менял, но флэшку не вижу после конфигурации из нее. У вас же так же было "по умолчанию"? Вы добавили блок Startupe? Или изменили режим?

Последний пункт не понял. Почему не будет? Если ПЛИСа сконфигурирована через JTAG, то как раз все работает, бутлоадер видит флэшку, можно обращаться к данным по указателю. См пункты 3.1-3.3
Для Commong Flash Memory Interface нужно еще какое то ядро? EMC не подходит?

Огромное спасибо что так активно и содержательно помогаете


--------------------
Because it's there
Go to the top of the page
 
+Quote Post
doom13
сообщение Mar 25 2016, 20:31
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(Muscat @ Mar 25 2016, 22:32) *
2) Не понял? В режиме синхронного чтения клок выходит ИЗ флэшки и идет В ПЛИСу, разве нет?
Страница 62...

Как Вы такое увидели? sm.gif
Цитата(Muscat @ Mar 25 2016, 22:32) *
При этом блок STARTUPE (там же страница 92) используется для вывода клока ИЗ плисы, когда используется SPI FLASH. Разве не так?

Для Master BPI mode тактовая на память вытаскивается через STARTUPE2.

Цитата(Muscat @ Mar 25 2016, 22:32) *
Для Commong Flash Memory Interface нужно еще какое то ядро? EMC не подходит?

Commong Flash Memory Interface - это софтовый интерфейс/протокол общения с параллельной памятью, (включает разного рода команды для памяти, которые передаются по параллельной шине), EMC - железный контроллер параллельной шины. Как-то так. Как и с последовательной флэшкой поверх SPI идёт протокол (набор команд) последовательной флэш памяти.
Ставите EMC, для чтения/записи используете либу xilflash (в BSP галкой включается) или сливаете драйвер памяти с сайта Micron (советую! в дальнейшем может пригодиться).


Цитата(Muscat @ Mar 25 2016, 22:32) *
Если ПЛИСа сконфигурирована через JTAG, то как раз все работает, бутлоадер видит флэшку, можно обращаться к данным по указателю. См пункты 3.1-3.3

Он её видит как-то через "зад", какие-то куски памяти совпадают с тем что хотите увидеть, попробуйте писать/читать - работать не должно.
Адресное пространство, которое видит MicroBlaze не есть адресное пространство памяти.
Т.е. загрузчик FPGA умеет писать/читать флэшку, но для этого он использует что-то типа AXI EMC + xilflash.
Go to the top of the page
 
+Quote Post
Muscat
сообщение Mar 25 2016, 21:02
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 277
Регистрация: 8-04-09
Из: Москва
Пользователь №: 47 382



Да, с направлением клока ошибся sm.gif
Так, то есть если я правильно понял, что

1) ПЛИС при подаче питания включилась в режим синхронного чтения из флэшки
http://www.xilinx.com/support/documentatio...ries_Config.pdf
(Страница 62)
2) Вычитала память, загрузилась и оставила висеть клоковую ногу CCLK_0_N10 (N10) в воздухе
http://www.xilinx.com/support/documentatio...p135_rev1_0.pdf
(страница 3)
3) Как я понял из описания корки
http://www.xilinx.com/support/documentatio...100-axi-emc.pdf
Она не может тактировать память, среди External Memory Interface Signals нет клока
4) Надо взять блок Startup2 и передать через него "на улицу" клок s_axi_clk, главное тот что подан на пин rdclk корки. В блокдизайне это делать нельзя, корка не поддерживает, по старинке объявлять ручками во враппере блок
Код
STARTUPE2 #(
                       .PROG_USR("FALSE"),    
                       .SIM_CCLK_FREQ(10.0))
     STARTUPE2_inst (
                                     .CFGCLK      (/* NC */),
                                     .CFGMCLK  (/* NC */),
                                     .EOS             (/* NC */),
                                     .PREQ          (/* NC */),
                                     .CLK      (1'b0),
                                     .GSR      (1'b0),
                                     .GTS      (1'b0),
                                     .KEYCLEARB(1'b0),
                                     .PACK     (1'b0),
                                     .USRCCLKO (MY_CLK),
                                     .USRCCLKTS(1'b1),
                                     .USRDONEO (1'b0),
                                     .USRDONETS(1'b0)
                                     );

http://www.xilinx.com/support/documentatio...ries_Config.pdf
(Страница 91)

5) В бутлоадере и приложениях, которые хочу использовать добавить Xilflash в BSP. ( Это уже пробовал раньше, эффекта не было - при загрузке из JTAG и так работало, при загрузке из флэшки и так не работало, убрал sm.gif )


--------------------
Because it's there
Go to the top of the page
 
+Quote Post
doom13
сообщение Mar 25 2016, 21:23
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(Muscat @ Mar 26 2016, 00:02) *
1) ПЛИС при подаче питания включилась в режим синхронного чтения из флэшки
http://www.xilinx.com/support/documentatio...ries_Config.pdf
(Страница 62)

Default boot mode - ASYNC (это однозначно, проверялось, и соответствует тому, что написано в ug908 на странице 64 - возможны ТРИ!!! значения для BITSTREAM.CONFIG.BPI_SYNC_MODE). Если констрейн для SYNC моде не прописывали, должен быть ASYNC mode.
Цитата(Muscat @ Mar 26 2016, 00:02) *
2) Вычитала память, загрузилась и оставила висеть клоковую ногу CCLK_0_N10 (N10) в воздухе

Тут всё так, клока на ноге памяти не будет, пока не выбросите его через STARTUPE2.

Цитата(Muscat @ Mar 26 2016, 00:02) *
3) Как я понял из описания корки
http://www.xilinx.com/support/documentatio...100-axi-emc.pdf
Она не может тактировать память, среди External Memory Interface Signals нет клока

Да, тактирование памяти только через STARTUPE2.
Go to the top of the page
 
+Quote Post
Muscat
сообщение Mar 25 2016, 21:26
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 277
Регистрация: 8-04-09
Из: Москва
Пользователь №: 47 382



Ну вроде разобрались sm.gif

Если дефолтный режим асинхронный, то почему флэшка недоступна после конфигурирования, но доступна если загружена по JTAG? Ведь при загрузке по JTAG тоже startupe блока нет, а значит и нет клок?


--------------------
Because it's there
Go to the top of the page
 
+Quote Post
doom13
сообщение Mar 25 2016, 21:47
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(Muscat @ Mar 26 2016, 00:26) *
Если дефолтный режим асинхронный, то почему флэшка недоступна после конфигурирования, но доступна если загружена по JTAG? Ведь при загрузке по JTAG тоже startupe блока нет, а значит и нет клок?

Посмотрите на:
Цитата
.USRCCLKTS(1'b1),

USRCCLKTS - User CCLK 3-state enable input, т.е. клок на память не попадает.

Цитата(Muscat @ Mar 26 2016, 00:02) *
5) В бутлоадере и приложениях, которые хочу использовать добавить Xilflash в BSP. ( Это уже пробовал раньше, эффекта не было - при загрузке из JTAG и так работало, при загрузке из флэшки и так не работало, убрал sm.gif )

При загрузке по JTAG идёт запись во флэш - только ASYNC mode, при старте FPGA по включению питания идёт чтение флэшки (default ASYNC mode or SYNC mode), может попробуйте ей явно выключить SYNC_MODE?

PS:
Если не ошибаюсь настройка SYNC_MODE может быть прописана в SDC файле, а может стоять галка где-то в настройках проекта Vivado.
Go to the top of the page
 
+Quote Post
doom13
сообщение Mar 28 2016, 06:56
Сообщение #11


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Маленький нюанс подключения AXI EMC к BPI Flash (учли ли его?):
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
ConstHw
сообщение Mar 28 2016, 15:31
Сообщение #12


Участник
*

Группа: Участник
Сообщений: 58
Регистрация: 12-11-15
Пользователь №: 89 287



Адресацию оставил как есть, то есть использую внешний порт "linear flash" заданный для этой борды. Рассчитываю, что он подключен правильно sm.gif
assign linear_flash_addr[26:1] = axi_emc_0_EMC_INTF_ADDR;
В асинхронном режиме по крайей мере память была видна правильно.

Выкинул клок наружу, теперь ловлю описанные проблемы - память микроблейзу видна криво (какие то куски повторяются), теперь он пытается читать SREC но спотыкается.
Клок выкинул 100МГц, такой же как в порт rdclk.
В BSP либу включил, но смотрю код бутлоадера и не вижу, где она используется

Сообщение отредактировал ConstHw - Mar 28 2016, 15:34
Go to the top of the page
 
+Quote Post
doom13
сообщение Mar 28 2016, 18:19
Сообщение #13


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(ConstHw @ Mar 28 2016, 18:31) *
Адресацию оставил как есть, то есть использую внешний порт "linear flash" заданный для этой борды. Рассчитываю, что он подключен правильно sm.gif
assign linear_flash_addr[26:1] = axi_emc_0_EMC_INTF_ADDR;

Тут неправильно, должно быть так (названия шин соответствуют схеме для vc707):
Цитата
порт памяти A[26:1] = порт FPGA FLASH_A[25:0] = axi_emc_0_EMC_INTF_ADDR[26:1]
Go to the top of the page
 
+Quote Post
ConstHw
сообщение Mar 29 2016, 09:41
Сообщение #14


Участник
*

Группа: Участник
Сообщений: 58
Регистрация: 12-11-15
Пользователь №: 89 287



Я все таки думаю дело в другом, потому что в асинхронном режиме чтения память работает корректно (бутлоадер вычитывает объемистый SREC без ошибок и стартует)
Go to the top of the page
 
+Quote Post
doom13
сообщение Mar 29 2016, 14:38
Сообщение #15


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(ConstHw @ Mar 29 2016, 12:41) *
Я все таки думаю дело в другом, потому что в асинхронном режиме чтения память работает корректно (бутлоадер вычитывает объемистый SREC без ошибок и стартует)

А я почему-то уверен, что проблема именно в отсутствии сдвига в шине адреса AXI EMC на 1 бит относительно шины памяти (см. выше). В примере Xilinx AXI_EMC_IP_STARTUPE3.zip он есть. У себя ещё раз перепроверил - без него не работает, с ним все ок (и bootloader правильно все читает), плата - аналог Вашей.
Прикрепленные файлы
Прикрепленный файл  test_emc.rar ( 414.5 килобайт ) Кол-во скачиваний: 12
 
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 21:23
Рейтинг@Mail.ru


Страница сгенерированна за 0.01522 секунд с 7
ELECTRONIX ©2004-2016