Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Microblaze и его программа
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
Camelot
Приветсвую всех!
Разработал плату с третим спартаном, отдал один пин под юзерский клок для флешки чтоб читать с нее данные после конфигурации (вообщем как в 482 апликайшен нот). На борту имею 64Кх16 СРАМ. Создал систему подобную проекту xapp482, только со своей СРАМ и парой ледиков. Позаимствовал с того же апнота две проги SRAM_boot и RUN_FROM_SRAM. Изменил в проге которая стартует после догрузки код, чтоб маргало ледиками и изменил базовый адрес СРАМа в линкере и загрузочной программе. Вообщем получил файл прошивки и зашил. Запускаю, работает очень странно, ледики мои то моргают, то становятся в положение инициализации и прога виснет. При старте смотрел осцилом, данные вычитываются из ПРОМа, на пинах СРАМ почемуто при старте не всегда идет запис-чтение. Если делать проект в котором прога стартует с БРАМ, то все работает, СРАМ тоже в этом случае работает, его я ставил как стек и хип. Но вот если с подгрузкой из ПРОМа - не понимаю где рыть. Кто-нибудь сталкивался с подобными вещами? На что следует обратить внимание? Возможно это происки компилятора или опций? (хотя убрал оптимизацию) Спасибо за любой совет
3.14
Для начала, определите место, на котором все встает.
Выведите индикацию со старта загрузчика из BRAM и с начала main-а из вашей SRAM.
Camelot
Посмотрел как идет запись в СРАМ по мере вычитывания ПРОМ. Оказалось, что запись в СРАМ в
это время не выполняется, иногда проскальзывал WEN, но было раз от разу, на ПРОМ в это время по прежнему шли клоки и с него данные. Создал небольшой софтварный проект и поместил его в БРАМ (размер 0x7FF), где выполнялась в цикле запись константы в СРАМ. Посмотрел осцилом - ничего не пишет, вначале програмы добавил зажечь лед, с этим все было ОК. Т.е. прога стартует, но к СРАМу не имеет доступа.
Запись в СРАМ пробовал выполнять несколькими способами:

1) XIo_Out32(XPAR_SRAM_BASEADDR, 0xAAAAAAAA);
2)
Xuint32 *mem = (Xuint32*) (XPAR_SRAM_BASEADDR+0x1000);
mem[0]=0xAAAAAAAA;

Помучался, решил создать снова проект с нуля. Скопировал полностью с xapp482, не обновляя компоненты, только скрипты, убил модули уарта и дебага, изменил ихнюю память в параметрах на свою (непонятно почему, но в окне конфигурации параметров есть отличия от той срам, что предлагает ЕДК когда я создаю свой модуль), добавил ледики, поменял чип. Вообщем получил промовскую прошивку и все заработало blink.gif

И теперь не понятно, это что же я не могу с нуля создать проект, нужно использовать их старые корки?Может подскажите, где я не прав?

Спасибо
3.14
Насчет странного поведения при работе из BRAM - скорее всего компилятор заоптимизировал на смерть ваш цикл (еще не такое бывает smile.gif), подобные переменные/константы надо volatile объявлять.
Копайте дальше в направлении доступа к Вашей SRAM, уверен, найдете причину.
Camelot
Уважаемый 3.14, не могли бы Вы просвятить меня по СРАМ компоненту. В рабочей версии системы стоит компонент ЕМС с версией 1.10.б, в ЕДК 8.2 ЕМС для ОПБ версия 2.00 а. Старая версия
имеет два базовых адреса C_BASEADDR и С_MEM0_BASEADDR. В новой только один базовый адрес. Что значит C_BASEADDR?
Спасибо.
3.14
Сори, со SRAM коркой я имел дела тоько на стартере S3 пару лет назад ... так что утвердительно ничего не скажу.
C_BASEADDR - базовый адрес корки, в случае со SRAM должен быть и базовым адресом самой SRAM.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.