Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Ошибки в работе Leon3
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
SunRize
Есть проект: Leon3, AHBCTRL, AHBROM, APBCTRL, APBUART, GPIO. Проект компилируется, но есть 2 проблемы:
1) при возврате из функции (команда retl) происходит прерывание (0x07)
2) при выполнении команд вида st reg, [%fp - 0x0c] также происходит прерывание
3) и самое интересное, регистр o5 содержит значение 0х60000000, далее следует последовательность команд, в [] результат операции, выданный ModelSim'ом
or %o5, 0x20C, %o4 [0x6000020C]
st %g1, [%o4]
mov 0x00, %o4 [0x00000000]
or %o5, 0x200, %o4 [0x60000200]
st %g1, [%o4]
но на шину во втором случае выдается 0x6000020C

Никак не могу понять в чем проблема, для компиляции использую GR-LIDE (Bare C), если кто-то сталкивался с подобным или знает решение, просьба подсказать
yes
Цитата(SunRize @ Oct 14 2010, 21:05) *
Есть проект: Leon3, AHBCTRL, AHBROM, APBCTRL, APBUART, GPIO. Проект компилируется, но есть 2 проблемы:
1) при возврате из функции (команда retl) происходит прерывание (0x07)
2) при выполнении команд вида st reg, [%fp - 0x0c] также происходит прерывание
3) и самое интересное, регистр o5 содержит значение 0х60000000, далее следует последовательность команд, в [] результат операции, выданный ModelSim'ом
or %o5, 0x20C, %o4 [0x6000020C]
st %g1, [%o4]
mov 0x00, %o4 [0x00000000]
or %o5, 0x200, %o4 [0x60000200]
st %g1, [%o4]
но на шину во втором случае выдается 0x6000020C

Никак не могу понять в чем проблема, для компиляции использую GR-LIDE (Bare C), если кто-то сталкивался с подобным или знает решение, просьба подсказать


1) 0x7 это non-aligment смотреть надо sparcv8.pdf там все описано
2)
3) а точно два раза 0x6000020C? там write-buffer поэтому операция по шине не сразу проходит, может это с первого st?

компилятор ерунды не делает, но 0х7 из-за линкера или crt может быть - стек то на 8 выровнен?


SunRize
yes, по поводу прерывания, стек при работе с функциями не используется, адреса возврата передаются через регистры, в проекте нет озу, а по поводу 3-го пункта я ошибся в описании проблемы моделсим выдал or %o5, 0x200, %o4 [0x6000020C] во втором случае
yes
Цитата(SunRize @ Oct 15 2010, 19:01) *
стек при работе с функциями не используется

если используете компилятор - используется: см описание инструкций save/restore

-----------

возьмите стандартный проект Гейслера (лучше всего leon3mp) и посмотрите как оно должно работать, после собирайте свою систему
все там работает
SunRize
Решение проблем:
1) при возврате из функции (команда retl) происходит прерывание (0x07);
2) при выполнении команд вида st reg, [%fp - 0x0c] также происходит прерывание.
Решаются записью в %o6 (%sp) адреса RAM памяти

3-я проблема решилась установкой текущего регистрового окна в %psr
yes
начальную конфигурацию Гейслер делает не в crt.o, а с помощью специальной утилиты mkprom
поэтому стеки/окна/маски окон и т.п. надо либо самому ставить (написать ассемблерный файлик и прилинковать с [по-моему] ключами nostartup или как-то так), либо почитать инструкцию

---------------

а с проблемой завершения окон (window_overflow/window_underflow trap) уже столкнулись? имхо, самое прикольное место в архитектуре SPARC
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.