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

 
 
> Как сделать параллельную шину в NIOS?
juvf
сообщение Sep 6 2011, 11:32
Сообщение #1


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

Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045



Нужно из NIOS читать писать обычное статическое ОЗУ, по параллельной шине. Т.е. нужно в ниосе шина адреса, шина данных и управление - rd, wr и cs. Как собрать такой контроллер параллельной шины в Qsys? В SOPC-Builder собрал через Avalon Memory Mapped Tristate Slave и Avalon Tristate Bridge. Пытаюсь также в Qsys сделать - не получается. Почему-то в итоге сигнал wr из процессора выходит как inout, т.е. двунаправленный.

Цитата(Kuzmi4 @ Aug 30 2011, 17:28) *
2 juvf
не пробовали AVALON компонент использовать вместо мостов?
В приложении моё чЮдо, использую правда в SOPC, но проблем не было laughing.gif
[attachment=60026:sram_top.7z]
Это я вообще не понял, что к чему.

Как сделать простую, обычную, параллельную шину в NIOS с помощью Qsys?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
juvf
сообщение Oct 7 2011, 10:50
Сообщение #2


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

Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045



нашел в чем была проблема. вроде шина заработала. но осталась одна проблема. сделал свой модуль, с которым ниос общается через параллельную шину.
команда IOWR_16DIRECT(0x10013202, 0, 0x4); работает нормально. в нужное место прописывается 4. пробую так *((alt_u16*)0x10013202) = 4; - не работает. шагаю в дебаге по сишным строчкам... прохожу строчку *((alt_u16*)0x10013202) = 4;, все работает. снимаю точки останова запускаю программу - обращение через указатель не работает. посмотрел дизассемблер нашел разницу

вот как компилятор скомпилировал код IOWR_16DIRECT(0x10013202, 0, 0x4);
Код
//IOWR_16DIRECT(0x10013202, 0, 0x4);
800bb70:    00c40074     movhi    r3,4097
800bb74:    18cc8084     addi    r3,r3,12802
800bb78:    00800104     movi    r2,4
800bb7c:    1880002d     sthio    r2,0(r3)


а вот как скомпилировал *((alt_u16*)0x10013202) = 4;
Код
//*((alt_u16*)0x10013202) = 4;
800b634:    00c40074     movhi    r3,4097
800b638:    18cc8084     addi    r3,r3,12802
800b63c:    00800104     movi    r2,4
800b640:    1880000d     sth    r2,0(r3)


разница в последней команде. с sthio - работает, а с sth. посмотрел в чем разница этих команд:
Цитата
sthio These operations load/store byte and half-word data from/to peripherals without caching or buffering.


как сделать чтоб обращение через указатель к нужным областям памяти не кешировались и не буферезировались, т.е. чтоб компилятор при обращении через указатель использовал команду sthio?
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 4th August 2025 - 07:27
Рейтинг@Mail.ru


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