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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Тест памяти DDR проходит, но программа из DDR не исполняется, Xilinx ISE/EDK 14.7 Spartan-6
aabmail
сообщение Jul 3 2015, 09:08
Сообщение #16


Местный
***

Группа: Свой
Сообщений: 210
Регистрация: 4-06-08
Из: Москва
Пользователь №: 38 056



Все огромное спасибо за ответы.

Цитата(dmitry-tomsk @ Jul 2 2015, 18:05) *
В S6 ddr3 ввобще без проблем работает, когда создаёте проект визардом прямо в нём указываете ddr3, все настройки правильно визард делает. Потом можно поменять mcb блок на другой. Лучше всего проверить проект на ref плате типа SP605, если всё окей, то на своей. Разводка и пайка своей платы должна быть хорошей, тесты памяти только для младших адресов, они могут проходить, а программа не работать.


Сейчас к сожалению у меня нет борды SP6, поэтому проверить не могу. Данный проект - это фактически проект, сгенеренный BSB (заменил ноги в UCF, поменял тактовую частоту). На старой работе проекты, сгенернные визардом, на бордах точно работали.
Что Вы имеет в виду под "Потом можно поменять mcb блок на другой"?

Про то, что "тесты памяти только для младших адресов, они могут проходить, а программа не работать." Я подкорректировал тест памяти. Проводится полная проверка, а не только младшие адреса.
ИМХО важная деталь: Если программу теста памяти объединить с bit-файлом через data2mem, то тест всегда проходит. Если программу теста памяти запустить через XMD, то он всегда виснет после печати начальных сообщений. Наверное, что-то не то со структурой EDK-проекта. Сейчас буду прикладывать скриншоты.

Конденсаторы поменял на Low-ESR - не помогло.

Цитата(Golikov A. @ Jul 2 2015, 16:43) *
покажите картинку с шинами
как у вас шина инструкций и шина данных программ идут?




Цитата(Golikov A. @ Jul 2 2015, 16:43) *
по поводу ДДР - ОЧЕНЬ!!! важно чтобы их контроллер питался от PLL в их регионе, просто через клок визард назначить клоки нельзя. Я налетел на это и время от времени процессор вис.



Цитата(Golikov A. @ Jul 2 2015, 16:43) *
Про это есть приписка в реф дизайне для ДДР, надо добавлять специальный констраин чтобы использвался верный PLL блок. Посмотрите пример любой с ддр вы увидите это констраин.


Подскажите, где можно посмотреть приписку? Вот UCF из refдизайна.

Код
#
# pin constraints
#
NET CLK_N LOC = "K22"  |  DIFF_TERM = "TRUE"  |  IOSTANDARD = "LVDS_25";
NET CLK_P LOC = "K21"  |  DIFF_TERM = "TRUE"  |  IOSTANDARD = "LVDS_25";
NET RESET LOC = "H8"  |  IOSTANDARD = "LVCMOS15"  |  TIG;
NET RS232_Uart_1_sin LOC = "H17"  |  IOSTANDARD = "LVCMOS25";
NET RS232_Uart_1_sout LOC = "B21"  |  IOSTANDARD = "LVCMOS25";
#
# additional constraints
#

NET "CLK" TNM_NET = sys_clk_pin;
TIMESPEC TS_sys_clk_pin = PERIOD sys_clk_pin 200000 kHz;


Цитата(Golikov A. @ Jul 2 2015, 16:43) *
И еще если у вас в проце есть кеши, их надо инвалидейтнуть перед включением, лучше на первом этапе без них вообще. Это в свойствах проца настраивается.


Я правильно понял, что надо на вкладке Cashe у МicroBlaze снять галки Enable Cashe? Если так, то MCB вообще остается отключенным.

Цитата(Golikov A. @ Jul 2 2015, 16:43) *
Попробуйте запустить проц на отладку, если у вас сбои DDR вы это увидите, как только делаете шаг на след инструкцию и она не наступает, то значит память грохнулась, останавливаете брейком и видите что вы черти где и память черти какая... или видит ошибку от жетага.


Даже входа в отладку не происходит. Нельзя сделать даже первый шаг.


Цитата(Corvus @ Jul 2 2015, 15:58) *
Сделайте в XPS очистку проекта и повторный экспорт в SDK. Возможно адресация в проекте изменилась и не передалась в SDK.
Когда память тестировали, адреса точно правильные были указаны? Именно DDR, а не внутренней памяти?


Понимаю, о чем Вы говорите, - EDK/SDK иногда подглючивает. Проект очистил, адреса проверил. Тестируются все 128 МБайт памяти, но только при условии, что сам тест запускается не из XMD, а из BRAM-ов.

Цитата(serjj @ Jul 2 2015, 15:43) *
можно мониторить uo_done_cal и pll_locked, по ним уже можно что-то судить.


uo_done_cal вывели на светодиод. Он НЕ светится.
C чипскопом небольшая проблема. В EDK, кажется, нужно system.ngc как-то преобразовывать, а потом уже грузить в chipscope. ngcbuild как то надо дополнительно запускать. У меня этот батник в другом корпусе blush.gif .

pll_locked тоже не светится.
Т.е. все правильно, т.к. светодиоды на плате тянутся в VCC.

================================================================
А ВОТ СТОИТ ЗАПУСТИТЬ ТЕСТ ПАМЯТИ ИЗ-ПОД ОТЛАДЧИКА, И СИГНАЛ uo_done_cal ПАДАЕТ !!!
================================================================

Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
serjj
сообщение Jul 3 2015, 09:29
Сообщение #17


Знающий
****

Группа: Участник
Сообщений: 527
Регистрация: 4-06-14
Из: Санкт-Петербург
Пользователь №: 81 866



Цитата
А ВОТ СТОИТ ЗАПУСТИТЬ ТЕСТ ПАМЯТИ ИЗ-ПОД ОТЛАДЧИКА, И СИГНАЛ uo_done_cal ПАДАЕТ !!!

Смотрите, что у вас сбрасывает память. Возможно вы туда резет каким-то образом ставите софтверно.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jul 3 2015, 09:46
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



воот...

M_AXI_DC, M_AXI_IC - это шина данных и шина инструкций через кеш. Через нее можно получить данные только из кешируемой области.
1. Надо в настройках проца проверить что вся ваша DDR память входит в кешируемую область. Потому что иначе, если инструкция или данные для нее будут лежать в памяти не входящей в кешируемую область микроблайз полезет к ним через шины M_AXI_IP, M_AXI_DP а они у вас не подключены.
это в адванцед настройках микроблайза, в закладке кэш.
2. Если вы решите использовать кэш, то уже в SDK
надо вызывать его сброс перед включением, либо не включать на первых парах ваще
Код
Xil_DCacheInvalidate(); //сбрасываем кэш перед включением
Xil_DCacheEnable(); //включаем кэш данных,

Xil_ICacheInvalidate(); //сбрасываем кэш перед включением
Xil_ICacheEnable(); //включаем кэш инструкций


тесты памяти надо конечно без включенного кеша делать и программа должна запускаться из BRAM иначе она затрет саму себя когда будет память заполнять.






по клокам читайте UG388, это на контроллер памяти 2 раза тык тык, и внизу есть хелп к нему. ТАм есть 3 чаптер.

что-то я уже стал забывать точно где я прочел что нужен отдельный PLL, но где-то было. Без него под нагревом DDR начинало сбоить и плата начинала виснуть. Я добавлял всяких регистров на шины и прочее, это немного помогало, но радикально помогло завести клоки DDR от своего генератора, у меня в проекте их 2, один для проца и периферии, другой только для DDR. и вот такой констраин
INST "clock_generator_ddr/clock_generator_ddr/PLL0_INST/Using_PLL_ADV.PLL_ADV_inst" LOC = "PLL_ADV_X0Y1";
который зажимает на использование именно выбранный генератор.
Go to the top of the page
 
+Quote Post
aabmail
сообщение Jul 3 2015, 10:31
Сообщение #19


Местный
***

Группа: Свой
Сообщений: 210
Регистрация: 4-06-08
Из: Москва
Пользователь №: 38 056



Цитата(Golikov A. @ Jul 3 2015, 12:46) *
воот...

M_AXI_DC, M_AXI_IC - это шина данных и шина инструкций через кеш. Через нее можно получить данные только из кешируемой области.
1. Надо в настройках проца проверить что вся ваша DDR память входит в кешируемую область. Потому что иначе, если инструкция или данные для нее будут лежать в памяти не входящей в кешируемую область микроблайз полезет к ним через шины M_AXI_IP, M_AXI_DP а они у вас не подключены.
это в адванцед настройках микроблайза, в закладке кэш.


Прикладываю скриншот настроек кеширования в microBlaze. У меня 128 мегабайт оперативы. Как я понимаю, настройки кэшь этому соответствуют. Мне непонятно, как вообще через XMD можно обращаться в DDR, если они находятся на разных AXI? М.б. их нужно как-то соединить? Или они уже где-то соединены?


Цитата(Golikov A. @ Jul 3 2015, 12:46) *
воот...
е кэш.
2. Если вы решите использовать кэш, то уже в SDK
надо вызывать его сброс перед включением, либо не включать на первых парах ваще
Код
Xil_DCacheInvalidate(); //сбрасываем кэш перед включением
Xil_DCacheEnable(); //включаем кэш данных,

Xil_ICacheInvalidate(); //сбрасываем кэш перед включением
Xil_ICacheEnable(); //включаем кэш инструкций


тесты памяти надо конечно без включенного кеша делать и программа должна запускаться из BRAM иначе она затрет саму себя когда будет память заполнять.


Добавил эти строчки (в тест периферии, а не в тест памяти конечно). Похоже, программа вообще не запускается. Это видно из того, что когда запускаешь отладчик, то он пишет: No source available for "_start() "
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jul 3 2015, 10:54
Сообщение #20


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



да с кешем все ок.

Цитата
Мне непонятно, как вообще через XMD можно обращаться в DDR, если они находятся на разных AXI? М.б. их нужно как-то соединить? Или они уже где-то соединены?

XMD - это дебугер? А причем тут он?
к этим шинам имеет доступ процессор. Когда он обращается за следующей командой он смотрит ее адрес, если она в кешируемой области лезет в кеш, если в кеше команды нет, лезет в шину. С данными также, при чтении - записи.

Вы не забыли добавить дебуг информацию в настройках проекта в SDK?
как вы программу заливаете? точно по шагам напиши что делаете. Вот включили питание, дальше...?
Go to the top of the page
 
+Quote Post
aabmail
сообщение Jul 3 2015, 11:08
Сообщение #21


Местный
***

Группа: Свой
Сообщений: 210
Регистрация: 4-06-08
Из: Москва
Пользователь №: 38 056



Цитата(Golikov A. @ Jul 3 2015, 13:54) *
XMD - это дебугер? А причем тут он?
к этим шинам имеет доступ процессор. Когда он обращается за следующей командой он смотрит ее адрес, если она в кешируемой области лезет в кеш, если в кеше команды нет, лезет в шину. С данными также, при чтении - записи.

как вы программу заливаете? точно по шагам напиши что делаете. Вот включили питание, дальше...?


1. Включаем питание.
2. Нажимаем кнопку Program FPGA. Выбираем там elf-файл программы теста памяти. Нажимаем кнопку Program.
3. Наблюдаем в COM-порт тест памяти:
Код
--Starting Memory Test Application--
NOTE: This application runs with D-Cache disabled.As a result, cacheline requests will not be generated
Testing memory region: mcb_ddr3
    Memory Controller: axi_s6_ddrx
         Base Address: 0xa8000000
                 Size: 0x08000000 bytes
          32-bit test: PASSED!
          16-bit test: PASSED!
           8-bit test: PASSED!
--Memory Test Application Complete--


4. Кликаем правой кнопкой по программе теста памяти (или по любой другой, будет то же самое). Далее Run As -> Launch on Hardware (GDB). В этот момент, как я понимаю, сегменты ELF-файла копируются в адресное пространство по тем адресам, которые указаны в linker script. Копирование выполняет программа XMD, ибо данный процесс копирования мы наблюдаем в XMD-console.

5. Мы хотим увидеть в COM-порт тест памяти, но smile3046.gif


Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jul 3 2015, 11:48
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Ну тогда все правильно...
Проект из ДДР так не запустить, так можно запустить только проект из внутренних БРАМов.

ваша последовательность такая.
1. Включаем питание
2. нажимаем кнопку Programm FPGA и выбираем там elf файл который завется bootloop - это проект загрузчик
3. жмем кнопку Run, зеленый треугольник, в выпадющем меню ран конфиг, там задаем уже ваш боевой проект и его версию - это для запуска
3.1 жмем кнопку Debug жук рядом, все тоже самое для отладки.


Проект бутлуп придерживает фпга от работы на момент залитя прошивки в ДДР через ран. Без бутлупа, фпга несется по пустым брамам, и уходит в тупик, что вы и наблюдаете...
Go to the top of the page
 
+Quote Post
aabmail
сообщение Jul 3 2015, 12:28
Сообщение #23


Местный
***

Группа: Свой
Сообщений: 210
Регистрация: 4-06-08
Из: Москва
Пользователь №: 38 056



Цитата(Golikov A. @ Jul 3 2015, 14:48) *
Ну тогда все правильно...
Проект из ДДР так не запустить, так можно запустить только проект из внутренних БРАМов.

ваша последовательность такая.
1. Включаем питание
2. нажимаем кнопку Programm FPGA и выбираем там elf файл который завется bootloop - это проект загрузчик
3. жмем кнопку Run, зеленый треугольник, в выпадющем меню ран конфиг, там задаем уже ваш боевой проект и его версию - это для запуска
3.1 жмем кнопку Debug жук рядом, все тоже самое для отладки.


Проект бутлуп придерживает фпга от работы на момент залитя прошивки в ДДР через ран. Без бутлупа, фпга несется по пустым брамам, и уходит в тупик, что вы и наблюдаете...


Через бутлуп тоже не работает.

Цитата(serjj @ Jul 3 2015, 12:29) *
Смотрите, что у вас сбрасывает память. Возможно вы туда резет каким-то образом ставите софтверно.


Вы правы. Заработало !!!
Оказывается, надо было поставить "Reset processor only" in Run configuration. А там стояло Reset entire system.
Хотя все это очень странно, потому что я не помню, чтобы раньше (на другой плате) нужно было менять эту настройку. Все работало и так. Жалко, что нет платы отладки.

--
Всем признателен за ответы.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post

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

 


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


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