|
VC707 доступ к Linear Flash, Либо загрузка, либо доступ |
|
|
|
Mar 25 2016, 12:51
|
Участник

Группа: Участник
Сообщений: 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#documentation1.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"
|
|
|
|
|
Mar 25 2016, 13:20
|
Профессионал
    
Группа: Свой
Сообщений: 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.
|
|
|
|
|
Mar 25 2016, 13:52
|
Участник

Группа: Участник
Сообщений: 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.pdfhttp://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
|
|
|
|
|
Mar 25 2016, 18:35
|
Профессионал
    
Группа: Свой
Сообщений: 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, то самое то.
|
|
|
|
|
Mar 25 2016, 19:32
|

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

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

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

|
Да, с направлением клока ошибся  Так, то есть если я правильно понял, что 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 и так работало, при загрузке из флэшки и так не работало, убрал  )
--------------------
Because it's there
|
|
|
|
|
Mar 25 2016, 21:23
|
Профессионал
    
Группа: Свой
Сообщений: 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.
|
|
|
|
|
Mar 25 2016, 21:47
|
Профессионал
    
Группа: Свой
Сообщений: 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 и так работало, при загрузке из флэшки и так не работало, убрал  ) При загрузке по JTAG идёт запись во флэш - только ASYNC mode, при старте FPGA по включению питания идёт чтение флэшки (default ASYNC mode or SYNC mode), может попробуйте ей явно выключить SYNC_MODE? PS: Если не ошибаюсь настройка SYNC_MODE может быть прописана в SDC файле, а может стоять галка где-то в настройках проекта Vivado.
|
|
|
|
|
Mar 28 2016, 15:31
|
Участник

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

|
Адресацию оставил как есть, то есть использую внешний порт "linear flash" заданный для этой борды. Рассчитываю, что он подключен правильно assign linear_flash_addr[26:1] = axi_emc_0_EMC_INTF_ADDR;В асинхронном режиме по крайей мере память была видна правильно. Выкинул клок наружу, теперь ловлю описанные проблемы - память микроблейзу видна криво (какие то куски повторяются), теперь он пытается читать SREC но спотыкается. Клок выкинул 100МГц, такой же как в порт rdclk. В BSP либу включил, но смотрю код бутлоадера и не вижу, где она используется
Сообщение отредактировал ConstHw - Mar 28 2016, 15:34
|
|
|
|
|
Mar 29 2016, 09:41
|
Участник

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

|
Я все таки думаю дело в другом, потому что в асинхронном режиме чтения память работает корректно (бутлоадер вычитывает объемистый SREC без ошибок и стартует)
|
|
|
|
|
Mar 29 2016, 14:38
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Цитата(ConstHw @ Mar 29 2016, 12:41)  Я все таки думаю дело в другом, потому что в асинхронном режиме чтения память работает корректно (бутлоадер вычитывает объемистый SREC без ошибок и стартует) А я почему-то уверен, что проблема именно в отсутствии сдвига в шине адреса AXI EMC на 1 бит относительно шины памяти (см. выше). В примере Xilinx AXI_EMC_IP_STARTUPE3.zip он есть. У себя ещё раз перепроверил - без него не работает, с ним все ок (и bootloader правильно все читает), плата - аналог Вашей.
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|