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

 
 
> Побайтовое обращение к памяти., NiosII
slog
сообщение Nov 29 2008, 19:44
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 961
Регистрация: 28-11-05
Пользователь №: 11 489



Долблю Nios + внешнее ОЗУ в 32 разряда. Хочу писать в память байты а читать слова по 4 байта за раз. Че то не получается. Перепробовал всё и вообще запутался.

Выполняю запись по байтам
for(i=0; i<8; i++)
{
IOWR_8DIRECT(SRAM_BASE, i, i);
}

Потом читаю IORD_32DIRECT(SRAM_BASE, i); получаю
0x00000000
0x00000100
0x00020000
0x03000000

Если читаю IORD(SRAM_BASE, i); получаю
0x00000000
0x00000004

А КАК ПРОЧИТАТЬ 0x03020100 ? Всяко пробовал, не получается. Может дело в Native Address Alignment или Dynamic Bus Sizing? Только не врублюсь в чем разница если я пишу по всем адресам подряд байты, а читаю их потом по 4 за раз. Они же физически должны лежать в памяти как адрес 0 = 0x03020100, адрес 1 = 0x07060504 и т.д.


--------------------
В действительности всё не так, как на самом деле.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
slog
сообщение Nov 30 2008, 08:10
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 961
Регистрация: 28-11-05
Пользователь №: 11 489



Плата готовая, рабочая, проект для FPGA мой, теоретически может быть косяк с назначением адресов или byte enable. Только никак не пойму где.

IORD_8DIRECT(BASE,i) возвращает правильный байт. Т.е. по адресу 0 =0, адрес 1 =1 и т.д.


Косяк с внешним ОЗУ точно есть, потому что с ONCHIP_MEM памятью все нормально.
IORD_32DIRECT возвращает
0x03020100
0x03020100
0x03020100
0x03020100
0x07060504

IORD
0x03020100
0x07060504

т.е. вроде так и должно быть.


--------------------
В действительности всё не так, как на самом деле.
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Nov 30 2008, 09:31
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



Цитата(slog @ Nov 30 2008, 14:10) *
Плата готовая, рабочая, проект для FPGA мой, теоретически может быть косяк с назначением адресов или byte enable. Только никак не пойму где.

IORD_8DIRECT(BASE,i) возвращает правильный байт. Т.е. по адресу 0 =0, адрес 1 =1 и т.д.
Косяк с внешним ОЗУ точно есть, потому что с ONCHIP_MEM памятью все нормально.
IORD_32DIRECT возвращает
0x03020100
0x03020100
0x03020100
0x03020100
0x07060504

IORD
0x03020100
0x07060504

т.е. вроде так и должно быть.

тоже про byte enable подумал. стоит посмотреть SignalTap-ом.
попробуйте еще так:
int* x __attribute__ ((aligned (1)));
int y;
x=(BASE+i);
y=*x;
по идее, это чтение 4 байт начиная с произвольного адреса.
Go to the top of the page
 
+Quote Post



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

 


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


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