|
|
  |
RAM и PowerPC |
|
|
|
Sep 3 2013, 13:49
|
Участник

Группа: Участник
Сообщений: 28
Регистрация: 28-09-11
Пользователь №: 67 424

|
Всем доброго времени суток!!)) Работая с Ml-403 , столкнулся с проблемой. Для тестового проекта была создана Dual port RAM в ISE с помощью IP_core generator. Задача состояла в том, чтобы читать данные из памяти мог PowerPC. Для этого было создано в XPS IP ядро с памятью. Собственно вопрос в том как сделать так чтобы шина PLB задышала? То есть как назначить порты адреса для чтения из процессора и порты чтения памяти для Dual port RAM. Пытался вывести наружу сигналы IP2BUS_data , BUS2IP_addr, чтобы назначить их на соответствующие порты памяти. Подскажите пожалуйста это правильный подход или есть другой. Выбрал такой подход так как в предыдущем проекте смог писать и читать регистры из PowerPC, путем того ,что сделал внешние порты регистров из User_logica. Заранее благодарен.
|
|
|
|
|
Sep 3 2013, 16:41
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
не! не так!
Если память внешняя микросхема, то для нее есть спец контроллер, который сам создает констрайны верные для типа памяти, а из проца будет доступен просто по адресному пространству. Я этот контроллер вешал на кешированую шину данных, и обращался по адресу.
Если память внутренняя на внутренних блоках памяти, то для нее тоже есть IP ядро, из которого выходит шина. Эту шину надо подключить к проу через спец адаптор шины памяти. Это тоже IP ядро. Посмотрите как подключена память программ и данных проца, это как раз тот же самый РАМ на блоках памяти, и подключен к шине данных и программ... Адаптор памяти имеет свое адресное пространство, и обращение по этому пространству как раз и есть обращение к памяти.
Самому писать для памяти ничего не надо, можно, но замучаетесь...
|
|
|
|
|
Sep 4 2013, 06:51
|
Участник

Группа: Участник
Сообщений: 28
Регистрация: 28-09-11
Пользователь №: 67 424

|
Цитата(Golikov A. @ Sep 3 2013, 20:41)  не! не так!
Если память внешняя микросхема, то для нее есть спец контроллер, который сам создает констрайны верные для типа памяти, а из проца будет доступен просто по адресному пространству. Я этот контроллер вешал на кешированую шину данных, и обращался по адресу.
Если память внутренняя на внутренних блоках памяти, то для нее тоже есть IP ядро, из которого выходит шина. Эту шину надо подключить к проу через спец адаптор шины памяти. Это тоже IP ядро. Посмотрите как подключена память программ и данных проца, это как раз тот же самый РАМ на блоках памяти, и подключен к шине данных и программ... Адаптор памяти имеет свое адресное пространство, и обращение по этому пространству как раз и есть обращение к памяти.
Самому писать для памяти ничего не надо, можно, но замучаетесь... Спасибо Вам за ответ) Прошу прощения, что переспрашиваю( То есть подход, который вы описали подходит для случая, когда RAM организована на FPGA ? Заранее спасибо)
|
|
|
|
|
Sep 4 2013, 08:29
|
Группа: Новичок
Сообщений: 4
Регистрация: 18-07-13
Пользователь №: 77 589

|
Здравствуйте. То есть, мы создали в XPS два IP-ядра (BRAM Block и XPS BRAM Controller) по типу уже подключённых к процессору. У контроллера памяти имеется две шины - PLB и BRAM_(Clk, Reset, Addr, Dout, Din, En, WEN). Эти линии служат для записи самой памяти (правильно я думаю?). Ещё у нас есть IP-ядро, подключённое к PLB, как Slave. Мы хотим записать эту память из своего IP-ядра. Можно это сделать? Или наше IP-ядро должно быть мастером на PLB? В таком случае, мы организовываем в USER Logic модуле регистры для вывода в память и соединяем их с соответствующими линиями PLB Interface Module? Или я чрезмерно усложнил эту схему? Заранее спасибо (извините за ламерские вопросы).
|
|
|
|
|
Sep 11 2013, 08:31
|
Участник

Группа: Участник
Сообщений: 28
Регистрация: 28-09-11
Пользователь №: 67 424

|
прошу прощения, что задаю один и тот же вопрос второй раз, но к сожалению я не могу понять как подключить свою двухпортовую RAM (которую написал на veriloge и реализовал на bram)к процессору. Выше был предложен вариант добавления памяти и контроллера памяти, если я его правильно понял, то я должен был добавить два IPядра это соответственно bram_block и xps_bram_cntlr. контроллер я повесил на PLB ,а второй его порт повесил на блок БРАМ , далее сгенерировал адреса для добавленых IP ядер. Но я не могу понять, как этот BRAM_BLOCK вывести наружу чтобы подключить к своей памяти? Подскажите пожалуйста я правильно Вас понял или подскажите какую PDFину почитать. Уже неделю бьюсь над этим вопросом((( Заранее благодарен.
|
|
|
|
|
Sep 13 2013, 12:12
|
Участник

Группа: Участник
Сообщений: 28
Регистрация: 28-09-11
Пользователь №: 67 424

|
Всем доброго времени суток еще раз. Проблема решилась с помощью галочки, которую нужно было поставить в XPS(фильтр портов, необходимо было поставить галку над defaults). Прошу прощения за назойливость, но у меня появился еще один вопросик. А корректно сделать так: я вешаю контроллер памяти на шину , а вторую его сторону делаю внешними и цепляю их к памяти на сделанной в ISE на верилоге? Или можно только этот брам контроллер использовать вместе с брам блоком из XPS. Заранее спасибо.
|
|
|
|
|
Sep 13 2013, 19:34
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
если поддержите протокол контроллера в точности как брам блок, то почему нет? Собственно в фпга есть варианты когда брамы кончились собрать себе немного памяти из ЛУТов. Только вопрос зачем  ? Зачем делать свою память если есть готовая? если это у вас не память а некий модуль с доступом к управлению - данным как к памяти, то есть IP ядро преобразования шины процессора, в удобные сигналы: чипселект, чтение, запись, который добавляется к вашему модулю, и уже новый совместный модуль вешается на шину. в платформ студии есть визард позволяющий создать такой сдвоенный модуль, останется только дописать свою часть. Может я просто не очень понимаю задачу, что сделать то надо?
|
|
|
|
|
Sep 16 2013, 07:17
|
Участник

Группа: Участник
Сообщений: 28
Регистрация: 28-09-11
Пользователь №: 67 424

|
Цитата(Golikov A. @ Sep 13 2013, 23:34)  если поддержите протокол контроллера в точности как брам блок, то почему нет? Собственно в фпга есть варианты когда брамы кончились собрать себе немного памяти из ЛУТов. Только вопрос зачем  ? Зачем делать свою память если есть готовая? если это у вас не память а некий модуль с доступом к управлению - данным как к памяти, то есть IP ядро преобразования шины процессора, в удобные сигналы: чипселект, чтение, запись, который добавляется к вашему модулю, и уже новый совместный модуль вешается на шину. в платформ студии есть визард позволяющий создать такой сдвоенный модуль, останется только дописать свою часть. Может я просто не очень понимаю задачу, что сделать то надо? Спасибо Вам за ответ) Задача заключается в том , что мы будем принимать данные с АЦП обрабатывать их и складировать в память, чтобы оттуда их забирал PowerPC. Собственно этот проект приема и обработки данных с АЦП , у нас был реализован на обычной Altere без процессора. Там у нас было две памяти пока мы в одну писали из другой у нас читали . Собственно и тут мы хотели сделать что то похожее, но на идейном уровне застряли(((( Если я вас правильно понял то вы имели ввиду CReate or import peripheral Wizard , где можно создать регистры и память. Просто хотелось бы узнать как опытные разработчики поступают в такой ситуации. Я пробовал вариант через CIP wizard . там я создал регистры и две памяти(точнее как я понял там просто сигналы для двух памятей , BUS2IPCS, BUS2IPADDR, IP2BUSDATA) в этом IP ядре я их делал EXTERNAL портами и для POWERPC они были внешними . И эти сигнналы я заводил на память написанную на верилоге. Второй вариант это подключение к PLB шине контроллера BRAM и сам BRAM block . Выходы Bram block я делаю внешними и должен в них писать. Подскажите пожалуйста какой подход наиболее верен или есть другой подход. Заранее СПАСИБО ВАМ!)
|
|
|
|
|
Sep 16 2013, 08:17
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
Внимание вопрос. На плате есть внешняя память типа ДДР? Если такая есть, то к ней надо сделать стандартный контроллер памяти, в 99% случаев это будет специализированный блок плисины, потому делать его самому 100% не нужно, да и не получится. Надо брать готовый контроллер внешней памяти, и этот контроллер по определению вешается на шину процессора. Обмен данными память - процессор происходит естественным образом, чтение - запись по заданному адресному пространству. Теперь обмен АЦП - память. Поскольку все стандартное, то не вижу смысла придумывать велосипед, и для этого обмена надо использовать ДМА модуль (опять же готовый). Если хочется трудностей то можно сделать свой модуль с мастер доступом к шине. Теперь если внешней памяти нет. По методу задачи чайника, внутреннюю можно сделать либо из БРАМа либо на регистрах. Регистры - жрут ресурсы плис, БРАМы - спец блоки, которые кроме как для памяти больше и девать некуда. Потому я бы делал память на БРАМ блоках, потому что для этого надо просто сказать дайте память и все  ... И поскольку это стандартный компонент, то я бы подключал его тоже стандартным путем, то есть через контроллер на шину процессора. Обмен данными память - процессор происходит опять естественным образом. Обмен АЦП - память опять через ДМА или мастер модуль. А если подойти творчески, то можно сделать так: Модуль сбора данных с АЦП, после пост обработки кладет их в ФИФО. ФИФО - это стандартный элемент, который имеет выход либо в регистр либо в шину сразу. Дальше вешаете его на шину (напрямую или через переходник) и получаете интуитивный режим чтения данных со стороны процессора, и удобный способ записи со стороны АЦП. ФИФО создается на БРАМах.
|
|
|
|
|
Sep 16 2013, 10:06
|
Участник

Группа: Участник
Сообщений: 28
Регистрация: 28-09-11
Пользователь №: 67 424

|
Цитата(Golikov A. @ Sep 16 2013, 12:17)  Внимание вопрос. На плате есть внешняя память типа ДДР? Если такая есть, то к ней надо сделать стандартный контроллер памяти, в 99% случаев это будет специализированный блок плисины, потому делать его самому 100% не нужно, да и не получится. Надо брать готовый контроллер внешней памяти, и этот контроллер по определению вешается на шину процессора. Обмен данными память - процессор происходит естественным образом, чтение - запись по заданному адресному пространству. Теперь обмен АЦП - память. Поскольку все стандартное, то не вижу смысла придумывать велосипед, и для этого обмена надо использовать ДМА модуль (опять же готовый). Если хочется трудностей то можно сделать свой модуль с мастер доступом к шине. Теперь если внешней памяти нет. По методу задачи чайника, внутреннюю можно сделать либо из БРАМа либо на регистрах. Регистры - жрут ресурсы плис, БРАМы - спец блоки, которые кроме как для памяти больше и девать некуда. Потому я бы делал память на БРАМ блоках, потому что для этого надо просто сказать дайте память и все  ... И поскольку это стандартный компонент, то я бы подключал его тоже стандартным путем, то есть через контроллер на шину процессора. Обмен данными память - процессор происходит опять естественным образом. Обмен АЦП - память опять через ДМА или мастер модуль. А если подойти творчески, то можно сделать так: Модуль сбора данных с АЦП, после пост обработки кладет их в ФИФО. ФИФО - это стандартный элемент, который имеет выход либо в регистр либо в шину сразу. Дальше вешаете его на шину (напрямую или через переходник) и получаете интуитивный режим чтения данных со стороны процессора, и удобный способ записи со стороны АЦП. ФИФО создается на БРАМах. спасибо Вам за ответ) Внешней памяти у нас нет поэтому нам подходит путь два(контроллер памяти и память ). Поправьте меня если я не прав. Тогда последовательность действий будет следующая: в XPS я добавляю два IP ядра это брам контроллер и брам блок. Далее я делаю порт Б брам блока внешними (это порты clk, rst, en, wen, addr, din и dout). делаю топовый файл процессора в ISE и в нем я вижу все эти 7 портов. И к ним я уже должен подключаться? я правильно Вас понял? Или: Я делаю своё IP-ядро мастером на PLB шине и, зная адрес BRAM контроллера, читаю и пишу данные туда как из своего IP-ядра, так и из процессора. Но в таком случае я не смогу одновременно писать и читать данные из своего IP-ядра и из процессора?
|
|
|
|
|
Sep 16 2013, 10:21
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
второй путь правильнее: Цитата своё IP-ядро мастером на PLB шине причем Цитата Но в таком случае я не смогу одновременно писать и читать данные из своего IP-ядра и из процессора это будет в любом случае. Даже если вы сделаете порты внешними (как в первом случае), все равно надо следить за арбитражом шины. Иначе будет кууууча ошибок. Вроде бы я видел 2 портовые модули памяти, арбитраж будет внутри модуля, но надо правильно следить за всеми сигналами шины. Также с арбитражом поможет ДМА IP корка, вроде бы...) А почему вы не хотите фифо сделать или вам нужен случайный доступ к данным?
|
|
|
|
|
Sep 16 2013, 11:10
|
Участник

Группа: Участник
Сообщений: 28
Регистрация: 28-09-11
Пользователь №: 67 424

|
Цитата(Golikov A. @ Sep 16 2013, 14:21)  второй путь правильнее:
причем
это будет в любом случае. Даже если вы сделаете порты внешними (как в первом случае), все равно надо следить за арбитражом шины. Иначе будет кууууча ошибок. Вроде бы я видел 2 портовые модули памяти, арбитраж будет внутри модуля, но надо правильно следить за всеми сигналами шины.
Также с арбитражом поможет ДМА IP корка, вроде бы...)
А почему вы не хотите фифо сделать или вам нужен случайный доступ к данным? То есть, алгоритм следующий: 1. В XPS с помощью CIP wizard создаем IP ядро, поставив галочку "user logic master" (она, я так понимаю, генерирует шаблон мастера на PLB). 2. Добавляем IP ядра - bram block и xps bram controller. 3. С процессора доступ к bram стандартный (по адресному пространству) 4. Из нашего IP ядра доступ к bram будет, если мы правильно распорядимся предоставленными нам сигналами plb master (в частности, зная адрес xps bram controller, мы выставляем его на IP2Bus_Mst_Addr, а данные на IP2Bus_MstWr_d или Bus2IP_MstRd_d). 5. Такие сигналы как IP2Bus_MstRd_Req, IP2Bus_Mst_Lock, IP2Bus_Mst_BE, IP2Bus_Mst_Lock, IP2Bus_Mst_Reset мы должны выставлять в соответствии со спецификацией plb шины? Тогда наше IP ядро будет выступать как slave по отношению к процессору и как мастер по отношению к bram controller. Поправьте пожалуйста, если я где-то ошибся. Заранее благодарен. P.S. Вы правы. Фифо не делаем, потому что нужен случайный доступ к данным.
|
|
|
|
|
Sep 16 2013, 14:30
|
Участник

Группа: Участник
Сообщений: 28
Регистрация: 28-09-11
Пользователь №: 67 424

|
Цитата(Golikov A. @ Sep 16 2013, 17:06)  схематично выглядит верно... дело за малым реализовать. там надо еще как то вроде занимать шину. Вообщем надо почитать спецификацию, мастер - это всегда не просто ИМХО.... Спасибо большое Вам за ответ)Хоть какая то определенность наступила) Еще раз СПАСИБО ОГРОМНОЕ , что откликнулись)
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|