|
использование DDR2 в XPS, xmpmc библиотеки |
|
|
|
 |
Ответов
(1 - 14)
|
Jul 22 2008, 07:47
|
Частый гость
 
Группа: Свой
Сообщений: 199
Регистрация: 2-03-05
Из: МОСКВА
Пользователь №: 3 016

|
Цитата(zherdiy @ Jul 21 2008, 09:31)  Что-то не понял, как в моем случае может пригодится файл xutil_memtest.c. Мне же нужно целенаправленно писать и читать из памяти, а не непонятным образом тестировать ее. Да и есть подозрение, что прямое обращение к памяти будет работать, только в случае установки DDR2 как основной памяти плис на локальную шину dlmb и ilmb.
Еще примеры есть? 1. В файлеxparameters.h у Вас будет базовый адрес. Далее обращаетесь к памяти напрямую через этот адрес. Xuint32 *pMem = (*Xuint32)BASE_ADDR_CORE; *pMem = 123456; 2. В LinkerScripte надо настроить определенный регион на размещение его в Вашей внешней памяти (я ставил .BSS Uninitialized data section) и глобальные переменные будут располагаться в этой памяти. Xuint32 a; но не Xuint32 a = 0;
|
|
|
|
|
Jul 22 2008, 10:35
|

Частый гость
 
Группа: Свой
Сообщений: 172
Регистрация: 17-03-05
Пользователь №: 3 422

|
Цитата Что-то не понял, как в моем случае может пригодится файл xutil_memtest.c. Мне же нужно целенаправленно писать и читать из памяти, а не непонятным образом тестировать ее. А что не понятного ? там же есть пример обращения к памяти (запись и чтение, как вы и хотели)... Цитата Да и есть подозрение, что прямое обращение к памяти будет работать, только в случае установки DDR2 как основной памяти плис на локальную шину dlmb и ilmb. Ваше подозрение ошибочно... Вам же уже писали: Цитата MPMC прозрачен, просто обращаетесь в память.
|
|
|
|
|
Sep 10 2008, 08:33
|
Частый гость
 
Группа: Участник
Сообщений: 93
Регистрация: 8-01-08
Из: Запорожье
Пользователь №: 33 895

|
Цитата(tolik1 @ Jul 22 2008, 10:47)  1. В файлеxparameters.h у Вас будет базовый адрес. Далее обращаетесь к памяти напрямую через этот адрес.
Xuint32 *pMem = (*Xuint32)BASE_ADDR_CORE;
*pMem = 123456;
2. В LinkerScripte надо настроить определенный регион на размещение его в Вашей внешней памяти (я ставил .BSS Uninitialized data section) и глобальные переменные будут располагаться в этой памяти. Xuint32 a; но не Xuint32 a = 0; 1. Ну, предположим запишу я значение 123456 в память так, как написано, а как мне его назад прочитать? Я ведь не знаю по какому адресу оно записалось. Как прочитать? 2. Вот про этот случай можно поподробнее? Уж больно заманчивая возможность просто хранить глобальные переменные во внешней DDR2 памяти. Я запустил генерацию Linker Script и в окошке Section View нашел секцию .bss с неизменяемым параметром size: 0x00000024 байт (=36 - почему не 32 или 16?) и memory: ilmb_cmtlr_dlmb_cmtlr. Второй параметр могу моменять на свою память DDR2_SDRAM_C_MPMC_BASEADDR. Это так имелось в виду или я ошибаюсь? Просто я не понял ваше ".BSS Uninitialized data section". Да, и если я буду хранить глобальные переменные в DDR2, то я же не смогу мгновенно записать, а затем сразу же прочитать? Ведь контроллер памяти должен будет провести длительную процедуру записи, затем чтения данных из памяти - следовательно нужно ставить задержки?
Сообщение отредактировал zherdiy - Sep 10 2008, 08:37
|
|
|
|
|
Oct 6 2008, 12:06
|
Частый гость
 
Группа: Участник
Сообщений: 93
Регистрация: 8-01-08
Из: Запорожье
Пользователь №: 33 895

|
Цитата(tolik1 @ Jul 22 2008, 10:47)  1. В файлеxparameters.h у Вас будет базовый адрес. Далее обращаетесь к памяти напрямую через этот адрес.
Xuint32 *pMem = (*Xuint32)BASE_ADDR_CORE;
*pMem = 123456;
2. В LinkerScripte надо настроить определенный регион на размещение его в Вашей внешней памяти (я ставил .BSS Uninitialized data section) и глобальные переменные будут располагаться в этой памяти. Xuint32 a; но не Xuint32 a = 0; п.1 и п.2 - это два варианта или п.2 есть дополнение к п.1?
|
|
|
|
|
Oct 6 2008, 13:57
|
Частый гость
 
Группа: Участник
Сообщений: 93
Регистрация: 8-01-08
Из: Запорожье
Пользователь №: 33 895

|
Цитата(zherdiy @ Oct 6 2008, 15:06)  п.1 и п.2 - это два варианта или п.2 есть дополнение к п.1? Если п1 и п2 - это независимые варианты использования ddr, то могу ли я написать следующее: Xuint32 *pMem[2] = (*Xuint32)BASE_ADDR_CORE; *pMem[0] = 1; *pMem[1] = 2; *pMem[2] = 3; read = *pMem[1]; - будут ли значения 1,2 и 3 писаться на различные адреса в ддр?
|
|
|
|
|
Oct 6 2008, 14:09
|
Местный
  
Группа: Свой
Сообщений: 381
Регистрация: 27-07-08
Из: теплые края
Пользователь №: 39 233

|
Цитата п.1 и п.2 - это два варианта или п.2 есть дополнение к п.1? Это два разных варианта. Цитата(zherdiy @ Oct 6 2008, 16:57)  Если п1 и п2 - это независимые варианты использования ddr, то могу ли я написать следующее: Xuint32 *pMem[2] = (*Xuint32)BASE_ADDR_CORE; *pMem[0] = 1; *pMem[1] = 2; *pMem[2] = 3; read = *pMem[1]; - будут ли значения 1,2 и 3 писаться на различные адреса в ддр? Нет, не можете. Потому что это, простите, бред. То, что Вы хотите, выглядит так: Код Xuint32 *pMem = (Xuint32*)BASE_ADDR_CORE; pMem[0] = 1; pMem[1] = 2; pMem[2] = 3; read = pMem[1];
|
|
|
|
|
Oct 23 2008, 07:56
|
Частый гость
 
Группа: Участник
Сообщений: 93
Регистрация: 8-01-08
Из: Запорожье
Пользователь №: 33 895

|
Цитата(vik0 @ Oct 6 2008, 17:09)  То, что Вы хотите, выглядит так: Код Xuint32 *pMem = (Xuint32*)BASE_ADDR_CORE; pMem[0] = 1; pMem[1] = 2; pMem[2] = 3; read = pMem[1]; Сделал так - начало писать и читать, но как-то странно. После извлечения данных (32бита) из памяти (16-ти разрядной) я получаю правильными только старший (4-ый) байт. 1-ый и 2-ой байты - непонятные значения, чуть изменяемые в зависимости от поступивших в ddr2 данных, а 3-ий байт по чтению - такое впечатление, что туда ставится первый по записи. Не пойму - это память глючная или что-то у меня в настройках Microblaze не так? Пробовал писать данные, описываемые как Xuint16 - не помогло.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|