Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблема с блочным чтением и записью по шине PLB
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
powerc
Никак не могу найти драйвер для XPS Multi-CHannel External Memory Controller (XPS MCH EMC).

Открываю папкe microblaze_0\libsrc\emc_v3_01_a\src , а там пустота...

В EDK-шном каталоге все заголовники пустые. sad.gif

То есть драйвер для этого контроллера не сгенерился. Что мне делать? Мне нужно организовать чтение и запись во внешнюю Micron SDRAM в режиме burst mode.

Колупаюсь уже 2 недели, никак не пойму что делать.

Помогите, люди добрые!
Koluchiy
Мне всегда казалось, что EMC - это не для SDRAM...
А для SDRAM - MPMC.
powerc
Цитата(Koluchiy @ Jan 20 2011, 13:02) *
Мне всегда казалось, что EMC - это не для SDRAM...
А для SDRAM - MPMC.


Ну EMC подходит и для флешки для для сдрама.


Из даташита на контроллер.

provides the
control interface for external synchronous,
asynchronous SRAM and Flash memory devices
through the MCH.

Просто EDK Base System Builder мне через него подключил SDRAM-ку.
Bad0512
Цитата(powerc @ Jan 20 2011, 16:27) *
Ну EMC подходит и для флешки для для сдрама.


Из даташита на контроллер.

provides the
control interface for external synchronous,
asynchronous SRAM and Flash memory devices
through the MCH.

Просто EDK Base System Builder мне через него подключил SDRAM-ку.

Ключевое слово здесь SRAM - почувствуйте разницу между SRAM и SDRAM. sm.gif
Это совершенно разные интерфейсы и технологии.
powerc
Цитата(Bad0512 @ Jan 20 2011, 14:40) *
Ключевое слово здесь SRAM - почувствуйте разницу между SRAM и SDRAM. sm.gif
Это совершенно разные интерфейсы и технологии.



Точно! Память там не SDRAM, а SRAM с вот такой выкладкой в general description

Micron® CellularRAM™ is a high-speed, CMOS pseudo-static random access memory
developed for low-power, portable applications. The MT45W8MW16BGX device has a
128Mb DRAM core, organized as 8 Meg x 16 bits. These devices include an industrystandard
burst mode Flash interface that dramatically increases read/write bandwidth
compared with other low-power SRAM or pseudo-SRAM offerings.

Контроллер для нее EMC.

Так вот как же объяснить на языке Си микроблэйзу то, что я хочу почитать/пописать из этой памяти в burst-режиме?

Повторюсь, драйвера для этого контроллера я так и не нашел.
mdmitry
Цитата(powerc @ Jan 20 2011, 16:20) *
Контроллер для нее EMC.

Так вот как же объяснить на языке Си микроблэйзу то, что я хочу почитать/пописать из этой памяти в burst-режиме?

Повторюсь, драйвера для этого контроллера я так и не нашел.

У меня была ситуация , когда даже не генерировались драйвера для GPIO. Связано это было с заданием своих значений параметров при создании GPIO. Видимо, не понравилась комбинация значений. Попробуйте взять за основу параметры по умолчанию, генерируйте BSP и берите за основу.
powerc
Цитата(mdmitry @ Jan 20 2011, 19:54) *
У меня была ситуация , когда даже не генерировались драйвера для GPIO. Связано это было с заданием своих значений параметров при создании GPIO. Видимо, не понравилась комбинация значений. Попробуйте взять за основу параметры по умолчанию, генерируйте BSP и берите за основу.



Огромное спасибо за ответ! Завтра на работе с утра попробую и отпишусь сразу же sm.gif
Правда когда я генерил проект для Nexys'а, я ничего не выставлял необычного, кроме кэша процессора(ведь без него низзя бурст организовать, насколько я понимаю?), и установки кэшлинков для этой самой микроновской памяти.

С кэшлинками этими так и не разобрался правда, совсем еще новичок в этом деле. Это просто кеширование памяти получается, вот эти IXCL и DXCL? Для чего это кеширование по линии инструкций и данных, не пойму.

Еще раз большое спасибо за ответ!
powerc
Нет. Все-таки ничего так и не вышло. Сгенерил в Base System Buildere систему с полностью дефолтными параметрами (жал только кнопку next). Та драйверов для EMC я и не увидел... Может быть подцепить вышеуказанную память к какому-нибудь другому контроллеру?

Как быть? Как получить дрова для EMC-контроллера? Или может быть есть альтернативные методы решения данной проблемы?

Пока не знаю что делать, попробую использовать flash память, которая также установлена на моем ките (nexys2). Может быть для нее сгенерятся дровки.

Об изменениях буду писать в топик.

Вобщем-то мне по-прежнему нужно записать и почитать из внешней памяти в режиме burst mode.

Если у кого появятся какие-то мысли и желание ими поделиться, буду очень благодарен.

Спасибо.
powerc
С флэшкой тоже ничего не получилось. Видимо ксайлинксовцы просто и не писали драйверы на этот контроллер sad.gif

Соответственно и в API на драйвер написано следующее:

This driver exists only to allow the EDK tools to create a memory test application and to populate xparameters.h with memory range constants. There is no source code.

Только вот в xparameters.h по поводу этого контроллера написано

/* Definitions for peripheral MICRON_RAM */
#define XPAR_MICRON_RAM_NUM_BANKS_MEM 1


/******************************************************************/

/* Definitions for peripheral MICRON_RAM */
#define XPAR_MICRON_RAM_MEM0_BASEADDR 0x80000000
#define XPAR_MICRON_RAM_MEM0_HIGHADDR 0x80FFFFFF

/******************************************************************/

/* Canonical definitions for peripheral MICRON_RAM */
#define XPAR_EMC_0_NUM_BANKS_MEM 1
#define XPAR_EMC_0_MEM0_BASEADDR 0x80000000
#define XPAR_EMC_0_MEM0_HIGHADDR 0x80FFFFFF

#define XPAR_XPS_MCH_EMC



Как мне на основе этих данных сконфигурить контроллер для блочной передачи и написать простенький цикл блочной записи/чтения?

Помогите пожалуйста ламеру, я в программировании чайник чугунный, а задачку надо разрубить sad.gif
Alex77
Цитата(powerc @ Jan 21 2011, 12:12) *
Как мне на основе этих данных сконфигурить контроллер для блочной передачи и написать простенький цикл блочной записи/чтения?

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

Вам надо разобраться что есть такое "блочная запись/чтение".
От этого у Вас и все проблемы.
В данном случае блочные пересылки осуществляются полностью АППАРАТНО и ПРОГРАММНОГО управления этим процессом не существует.
powerc
Alex77, то есть программку для того, чтобы мне в burst режиме записать по заданному диапазону адресов допустим 0XFFFFFFFF мне написать никак не получится?
sad.gif
Дмитрий Мазунин
У Вас не получится работать с памятью через этот контроллер как-то иначе, чем предусмотрено его разработчиками.
Alex77 совершенно прав.
И никакого драйвера для этого устройства не существует.
Если Вам нужно задействовать какие-то механизмы, которые поддерживает Ваша память, но не поддерживает контроллер EMC, у Вас только 1 выход - написать свой контроллер...
powerc
Дмитрий Мазунин, большое спасибо за ответ!

К сожалению на написание своего контроллера у меня совсем нет времени sad.gif

Тогда выходит такое дело, что мне необходим прямой доступ к памяти DMA.
Насколько я понял по даташитам на PowerPC440GP и Microblaze, в из ядрах нету контролеера прямого доступа к памяти, таким образом мне нужно будет, по видимому, посадить на шину PLB контроллер DMA, с помощью которого я смогу считывать из памяти с высокой скоростью.

Или все-таки microblaze может сам осуществить доступ DMA, без периферийного контроллера DMA?

Чтобы была ясна моя задача, она такова: мне нужно максимально быстро выкачать из памяти данные. В идеале, понятное дело, с чатотой шины(то есть как в режиме burst).

Правильно ли я предполагаю, что если контроллер EMC не даст мне возможности для этого, то я могу воспользоваться DMA?

Простите мне мое ламерство пожалуйста.
Mad_max
Цитата(powerc @ Jan 21 2011, 19:34) *
Тогда выходит такое дело, что мне необходим прямой доступ к памяти DMA.
Насколько я понял по даташитам на PowerPC440GP и Microblaze, в из ядрах нету контролеера прямого доступа к памяти, таким образом мне нужно будет, по видимому, посадить на шину PLB контроллер DMA, с помощью которого я смогу считывать из памяти с высокой скоростью.


С помощью EMC или MPMC Вы можете отобразить внешнюю память как адресуемое пространство для процессора, использовать как оперативную память.
Но, как Вам правильно сказали, поднять скорость общение процессора с памятью выше, чем это заложено разработчиками контроллера, невозможно.
Вы можете лишь, снять с процессора задачи по перекидки данных, чем повысите быстродействие и поднимите в целом производительность.
Сделать это можно с помощью DMA контроллера. Сажать его как отдельный абонент на шине, не рекомендую (opb_central_dma) капризная вещь.

Цитата
Или все-таки microblaze может сам осуществить доступ DMA, без периферийного контроллера DMA?

DMA вещь аппаратная по определению!!!
Цитата
Правильно ли я предполагаю, что если контроллер EMC не даст мне возможности для этого, то я могу воспользоваться DMA?

Да правильно, только рекомендую изначально создавать периферийный модуль со своим собственным DMA. Plb_ipif это позволяет.

powerc
Спасибо!

>>DMA вещь аппаратная по определению!!!

Да, я это понимаю, только вот в ядре процессора ее нет. Посему я и предположил использование central_dma.


А в каких контроллерах это можно использовать? В EMC его можно подключить? Просто я, к сожалению, пока что не нашел как это сделать.

Просто мой девкит предполагает использование EMC, и как я понимаю альтернативного контроллера для данного чипа памяти нету среди готовых IPядер.


>>С помощью EMC или MPMC Вы можете отобразить внешнюю память как адресуемое пространство для процессора, использовать как оперативную память.

Спасибо за эту информацию! Теперь для меня стал больше понятен тот проект, который сгенерился в Base System Buildere.


PS Я использую шину PLB.
Mad_max
Почитайте и попытайтесь разобраться xapp967,
будет полезно для понимания принципа построения подобных процессорных систем.
powerc
>> Почитайте и попытайтесь разобраться xapp967,

Да я читал подобную доку, даже успешно добавил в user_logic.vhd одно наше IP-ядро.

Да и нету смысла мне свое IP-ядро памяти или контроллера добавлять к заготовке из Create and inport peripheral.

Просто нужно быстро скачать информацию и, сделав рассчет, быстро записать ее в другую память sm.gif
VladimirB
Цитата(powerc @ Jan 23 2011, 13:12) *
>> Почитайте и попытайтесь разобраться xapp967,
Просто нужно быстро скачать информацию и, сделав рассчет, быстро записать ее в другую память sm.gif


Для этого в Микробе есть FSL. Команда чтения или записи в FSL выполняется за 1 такт, а интерфейс снаружи как у обычного фифо.
Вешаете туда своё IP в виде контроллера SRAM и получаете сверхскоростной блочный доступ.

IP ядра легко создаются с помощью встроенного визарда.
powerc
>> Вешаете туда своё IP в виде контроллера SRAM и получаете сверхскоростной блочный доступ.

Хмм... Запутался. Контроллер SRAM с интерфейсом FSL уже есть готовый?

Или мне надо создать FSL-болванку в create and import peripheral, а потом добавить к нему как-то ядро контроллера SRAM?
mdmitry
Надо FSL туннель между microblaze и Вашей частью в FPGA. Можно использовать FIFO FSL для обмена. FSL в какой-то степени можно считать аналогом link port TigerShark.
powerc
>>Надо FSL туннель между microblaze и Вашей частью в FPGA.

Не до конца понятно sad.gif Ну да ладно, завтра на работе буду все смотреть, заодно и FSL попробую, если что отпишусь, ну и о результатах соот-но отпишу, если они будут sm.gif

Спасибо большое всем отписавшимся, вы мне многое прояснили!

powerc
Вопсчем попробовал CDMA на шине PLB. 12 тактов на передачу слова получается. Не шустро. Видимо придется рарзрубать FSL.
У кого-то может были показатели с CDMA лучше? Если таковые имеются, прошу пожалуйста кратенько отписать (при желании и возможности, естественно).

Спасибо.
powerc
mdmitry
Цитата
Надо FSL туннель между microblaze и Вашей частью в FPGA. Можно использовать FIFO FSL для обмена. FSL в какой-то степени можно считать аналогом link port TigerShark.


А можно пожалуйста поподробнее пояснить про FSL-туннель пояснить? Для меня сейчас эта информация на вес золота. Был бы очень благодарен. Спасибо.
mdmitry
Цитата(powerc @ Feb 15 2011, 18:05) *
А можно пожалуйста поподробнее пояснить про FSL-туннель пояснить? Для меня сейчас эта информация на вес золота. Был бы очень благодарен. Спасибо.

Этот туннель написан коллегой на vhdl, подробности не знаю. Он вдохновлялся какой-то информацией из сети. Для microblaze используются два FSL: мастер и слейв. Программно получается как один двунаправленный канал обмена. Насколько я понял, в туннеле описан обмен по шине FSL в соответствие с документацией от Xilinx, описаны, кажется, все сигналы, а сколько используется из них не знаю. В сети видел проекты западных университетов, где несколько ядер microblaze обменивались данными по FSL.
powerc
Цитата
Этот туннель написан коллегой на vhdl, подробности не знаю. Он вдохновлялся какой-то информацией из сети. Для microblaze используются два FSL: мастер и слейв. Программно получается как один двунаправленный канал обмена. Насколько я понял, в туннеле описан обмен по шине FSL в соответствие с документацией от Xilinx, описаны, кажется, все сигналы, а сколько используется из них не знаю. В сети видел проекты западных университетов, где несколько ядер microblaze обменивались данными по FSL.


Большое спасибо за ответ!
А как быть с контроллерами памяти? Я так понимаю, что внутреннюю память ПЛИС можно использовать при формировании в create and import peripheral оболочки с интерфейсом FSL и последующим добавлением (на определенном шаге тулзы) памяти в эту оболочку.
А как же быть с внешней памятью? Придется, видимо, писать свой контроллер?..

Я тут подитожил свои мысли, и понял такую вещь. Если хочется использовать внешнюю память, то можно использовать шину PLB с доработкой контроллера, чтобы повысить скорость работы с памятью(burst режим). Либо использовать шину FSL, контроллеров для которой нет среди IP-ядер, и писать свой контроллер для памяти. Насколько я прав?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.