Jump to content

    
Sign in to follow this  
zuuuuk

MicroBlaze + DDR3 + my_IP на AXI

Recommended Posts

Добрый день.

У меня система на SPARTAN6 Mbz + MCB_DDR3 на шине AXI.

Я хочу подключить свой IP блок ко второму порту MCB и получить доступ к DDR3.

т.е. мой IP блок должен быть мастером. Для чтения данных из DDR3.

 

Подскажите,пожалуйста, какой-нибудь пример подключения своего IP к шине AXI.

Share this post


Link to post
Share on other sites
Добрый день.

У меня система на SPARTAN6 Mbz + MCB_DDR3 на шине AXI.

Я хочу подключить свой IP блок ко второму порту MCB и получить доступ к DDR3.

т.е. мой IP блок должен быть мастером. Для чтения данных из DDR3.

 

Подскажите,пожалуйста, какой-нибудь пример подключения своего IP к шине AXI.

Лучше делать через "переходник" от Xilinx - http://www.xilinx.com/support/documentatio...aster_burst.pdf т.к. AXI достаточно сложная шина. Не скажу, что IP простой и очевидный - но все таки удалось его понять и все работает как часы.

Да, в Platform Studio меню Hardware->Create or import periferal - там вам визард сгенерирует работающий пример. У нас в проекте до сих пор фрагменты кода из того примера встречаются :).

Share this post


Link to post
Share on other sites
Лучше делать через "переходник" от Xilinx - http://www.xilinx.com/support/documentatio...aster_burst.pdf т.к. AXI достаточно сложная шина. Не скажу, что IP простой и очевидный - но все таки удалось его понять и все работает как часы.

Да, в Platform Studio меню Hardware->Create or import periferal - там вам визард сгенерирует работающий пример. У нас в проекте до сих пор фрагменты кода из того примера встречаются :).

как тут действовать?

собрал схему на стр. 14 указанного pdf с синтезированным ip. но как добраться до входов ( Bus2IP_***)? Я так понимаю , что на них нужно подавать сигналы от внешнего устройства?

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

может кто подскажет путь?

Share this post


Link to post
Share on other sites
если же идти от обратного - т.е. взять проект синтезированного примера и туда добавить microblaze , то тоже непонятно как их состыковать?

может кто подскажет путь?

 

Я бы не советовал так делать.

 

Рекомендую вот такой путь (EDK 14.2).

Create or import peripheral -> выбрать To an XPS Projects -> core name -> AXI4 Burst-> галки User Logic Master, User logic SW registers -> число регистров побольше, например 32 -> ... -> галки generate ISE and XST, generate driver -> finish

 

Затем заходите в папку pcores/core name/devl/projnav/

открываете ISE, в нем открываете файл core name.xise

Там будет уже 2 готовых VHD-файла.

core name.vhd - это и есть "адаптер"

в user_logic вписывайте свой код.

 

Могу расписать более подробно.

Share this post


Link to post
Share on other sites
Могу расписать более подробно.

было бы очень полезно.

но это то и есть второй путь. вернее его первая часть. а вот дольше как действовать? нужно ведь добавить microblaze. и что в нем должно быть. ведь нужно собрать цепочку до DDR3 и при этом оставить существующую связь к DDR3. я ее собирал . но на axi external Master Connector(в Isim не заработало). а как здесь?

Share this post


Link to post
Share on other sites

А что если так.

 

Делаете микроблайз

в нем включаете контроллер ДДР (кто-то его должен так или иначе рефрешить), контроллер делаете вешаете на шину АКСИ

добавляете в микроблайз АКСИ конектор, соединяете микроблайз и ДДР

 

Дальше через крейт-импорт хардваре делаете модуль с интерфейсом акси, указываете что перефирия мастер.

И ее вешаете на тот же АКСИ конектор.

 

Я правда не знаю если делать 2 портовый контроллер ДДР, как это выглядит. У него появляется 2 подключения на акси или что? Но с 1 портовым у меня сейчас к нему подключен ДМА и Микроблайз, оба мастера, так что дружатся как то...

 

 

 

Share this post


Link to post
Share on other sites
А что если так.

 

Делаете микроблайз

в нем включаете контроллер ДДР (кто-то его должен так или иначе рефрешить), контроллер делаете вешаете на шину АКСИ

добавляете в микроблайз АКСИ конектор, соединяете микроблайз и ДДР

 

Дальше через крейт-импорт хардваре делаете модуль с интерфейсом акси, указываете что перефирия мастер.

И ее вешаете на тот же АКСИ конектор.

 

Я правда не знаю если делать 2 портовый контроллер ДДР, как это выглядит. У него появляется 2 подключения на акси или что? Но с 1 портовым у меня сейчас к нему подключен ДМА и Микроблайз, оба мастера, так что дружатся как то...

такой путь уже был другая тема. там уперся в то, что нет разрешения на обмен. даже после reset из переходит z-> 0, а разрешение -1.правда я ничего в тестбенче кроме частоты, reset и управления на запись на microblaze не подавал. но по reset должно появиться разрешение.

 

Share this post


Link to post
Share on other sites

так вы что хотите написать свой акси конектор что ли? Мне кажется это потенциальный источник ошибок в будущем. Лучше к своему модулю приделать интерфейс ДМА.

 

чего в память то писать-читать надо?

Share this post


Link to post
Share on other sites
так вы что хотите написать свой акси конектор что ли? Мне кажется это потенциальный источник ошибок в будущем. Лучше к своему модулю приделать интерфейс ДМА.

 

чего в память то писать-читать надо?

получается что да. известные - перечень сигналов(12вх+4вых), временная. ip в микроблайзе - ext_master_conn, который и выводит эти сигналы наружу.

хотелось через burst. но очень много вопросов. я начинающий.

ну вот собрал я в XPS microblaze систему с burst через крейт-импорт хардвар модуль с интерфейсом акси. и добавил его в мб. теперь нужно в модуле user logic(из pcore) добавить свою систему, которая принимает инф. извне и формирует запись. вот как конкретно это сделать? выйти из xps?.но в ise есть только микроблайз .

а так нужно принять данные видео преобразованные и передать их через интернет 1Gb. данные аппаратно в память, чтобы не загружать программу. а далее программно.

 

Share this post


Link to post
Share on other sites
было бы очень полезно.

но это то и есть второй путь. вернее его первая часть. а вот дольше как действовать? нужно ведь добавить microblaze. и что в нем должно быть. ведь нужно собрать цепочку до DDR3 и при этом оставить существующую связь к DDR3. я ее собирал . но на axi external Master Connector(в Isim не заработало). а как здесь?

 

Открываете EDK.

Create a new project using Base system builder

Выбрать Axi system. Выбрать директорию для проекта. Название лучше оставить "system"

Далее укажите тип своей борды, а если у вас custom-плата, то указываете тип кристалла и частоту задающего генератора. Остальное по умочланию.

В следующем диалоге добавляете периферию, в т.ч. DDR3 SDRAM, Soft TEMAC Ethernet, UART16550 и др.

Finish.

 

Т.о. будет создан проект EDK, в котором будет уже готовый набор стандартных ядер. Вам теперь нужно создать свою user-ядро. Для этого:

 

Create or import peripheral -> выбрать To an XPS Projects -> core name -> AXI4 Burst-> галки User Logic Master, User logic SW registers -> число регистров побольше, например 32 -> ... -> галки generate ISE and XST, generate driver -> finish

 

Затем заходите в папку pcores/core name/devl/projnav/

открываете ISE, в нем открываете файл core name.xise

Там будет уже 2 готовых VHD-файла.

core name.vhd - это и есть "адаптер"

в user_logic вписывайте свой код.

Share this post


Link to post
Share on other sites
Открываете EDK.

Create a new project using Base system builder

Выбрать Axi system. Выбрать директорию для проекта. Название лучше оставить "system"

Далее укажите тип своей борды, а если у вас custom-плата, то указываете тип кристалла и частоту задающего генератора. Остальное по умочланию.

В следующем диалоге добавляете периферию, в т.ч. DDR3 SDRAM, Soft TEMAC Ethernet, UART16550 и др.

Finish.

 

Т.о. будет создан проект EDK, в котором будет уже готовый набор стандартных ядер. Вам теперь нужно создать свою user-ядро. Для этого:

 

Create or import peripheral -> выбрать To an XPS Projects -> core name -> AXI4 Burst-> галки User Logic Master, User logic SW registers -> число регистров побольше, например 32 -> ... -> галки generate ISE and XST, generate driver -> finish

 

Затем заходите в папку pcores/core name/devl/projnav/

открываете ISE, в нем открываете файл core name.xise

Там будет уже 2 готовых VHD-файла.

core name.vhd - это и есть "адаптер"

в user_logic вписывайте свой код.

все это я и раньше проделал.

1. теперь мой проект core name.xise. но там же нет микроблайза. нужно его добавить?

я добавил. делаю его головным.а при подключении "адаптера" в подчиненном выдает ошибку , что неизвестный "адаптер". если наоборот "адаптер" головной микроблайз подчиненный все проходит. но там слишком со многими сигналами микроблайза нужно разбираться.

и еще . к чему подключается "адаптер" в микроблайзе.

2.или проект остается в XPS. а ISE только для написания кода в адаптере? но тогда как мне сделать свой вход в "адаптере" от внешнего пина. в адаптере я так понял есть 4 модуля. 1-user , 2-axi_master_burst,3-axi_lite_ipif,4-головной(пусть mmm). и только ммм связан с микоблайзом. input my_clk мой входной сигнал. я его добавил в user , а дальше должен провести через эти модули в микроблайз. ведь в этом случае есть только он и через него нужно вводить сигналы от внешнего устройства?.

Share this post


Link to post
Share on other sites
все это я и раньше проделал.

1. теперь мой проект core name.xise. но там же нет микроблайза. нужно его добавить?

я добавил. делаю его головным.а при подключении "адаптера" в подчиненном выдает ошибку , что неизвестный "адаптер". если наоборот "адаптер" головной микроблайз подчиненный все проходит. но там слишком со многими сигналами микроблайза нужно разбираться.

и еще . к чему подключается "адаптер" в микроблайзе.

2.или проект остается в XPS. а ISE только для написания кода в адаптере? но тогда как мне сделать свой вход в "адаптере" от внешнего пина. в адаптере я так понял есть 4 модуля. 1-user , 2-axi_master_burst,3-axi_lite_ipif,4-головной(пусть mmm). и только ммм связан с микоблайзом. input my_clk мой входной сигнал. я его добавил в user , а дальше должен провести через эти модули в микроблайз. ведь в этом случае есть только он и через него нужно вводить сигналы от внешнего устройства?.

 

Ваш второй вариант ближе к мной предложенному пути.

ISE фактически служит для написания кода (Кстати, что вы понимаете под словом "Адаптер"?). Еще через ISE удобно вызывать симуляцию.

В user-core есть не 4, а 2 модуля - по порядку: головной, типа axi_mmm_core.vhd и user_logic.vhd. Все остальное - это инклюды.

 

Вы хотите ввести извне сигнал my_clk? Это случайно не system_clock для всего проекта?

Если это "обычный просто сигнал", то его нужно прописать в следующие файлы: system.ucf, system.mhs, axi_mmm_core.mpd, axi_mmm_core.vhd, user_logic.vhd.

Таким образом вы вводите сигнал в свой user_core.

Подключить его напрямую к блэйзу нельзя. Это можно сделать только через AXI. Если вы это делаете впервые, попробуйте его для начала присоединить к сигналу USER_LOGIC/SLV_REG0(0).

 

Для проверки правильности написания имеет смысл делать синтез в ISE, и потом смотреть лог, исправлять ошибки.

Потом нажимаете Generate bitstream в EDK.

Share this post


Link to post
Share on other sites
Ваш второй вариант ближе к мной предложенному пути.

Поддерживаю. Мне такой вариант показался самым удобным, только код я писал в sublime text. ISE так ни разу и не запустил.

 

Share this post


Link to post
Share on other sites
Ваш второй вариант ближе к мной предложенному пути.

спасибо , сейчас как-то мне попонятнее.

я просто не понял какой путь предложен. теперь понял -второй.

Вы хотите ввести извне сигнал my_clk? Это случайно не system_clock для всего проекта?

это просто для примера. нужно данные байт и строб.

Если это "обычный просто сигнал", то его нужно прописать в следующие файлы: system.ucf, system.mhs, axi_mmm_core.mpd, axi_mmm_core.vhd, user_logic.vhd.

Таким образом вы вводите сигнал в свой user_core.

в головном m.vhd

port (my_clk :in std_logic;)

 

component user_logic

port

(my_clk_user : in std_logic;)

port map

( my_clk_user => my_clk,)

 

в user logic(он в verilog)

module user_logic

( my_clk_user, )

input my_clk_user;

 

что здесь?

m.mpd

PORT my_clk = ???, DIR = I, BUS = ???

 

system.ucf

 

PORT my_clk = my_clk, DIR = I

и нужно ли здесь

BEGIN m

PARAMETER INSTANCE = m_0

PARAMETER HW_VER = 1.00.a

PARAMETER C_BASEADDR = 0xa0000000

PARAMETER C_HIGHADDR = 0xa000ffff

BUS_INTERFACE M_AXI = axi4_0

BUS_INTERFACE S_AXI = axi4lite_0

PORT S_AXI_ACLK = clk_50_0000MHzPLL0

PORT m_axi_aclk = clk_100_0000MHzPLL0

END

 

system.ucf

NET my_clk LOC = "N19" | IOSTANDARD = "LVCMOS25"; N19 заменю на нужный контакт

 

 

если можно, то еще может подскажете как быстро подключиться в user_logic. нужна запись 32р слов, количество ~ 500.

 

Share this post


Link to post
Share on other sites
Поддерживаю. Мне такой вариант показался самым удобным, только код я писал в sublime text. ISE так ни разу и не запустил.

 

 

ISE все-таки удобно тем, что там можно генерить test_bench для ModelSim. А редактор в ISE конечно плохой, и даже иногда виснет на пустом месте.

 

 

component user_logic

port

(my_clk_user : in std_logic;)

port map

( my_clk_user => my_clk,)

 

честно говоря мне до сих пор непонятно, когда следует применять ключевое слово component. Делаю обычно так:

LABEL: entity work.user_logic

port map

(

Bus2IP_Clk => clk,

...

);

 

что здесь?

m.mpd

PORT my_clk = ???, DIR = I, BUS = ???

 

PORT my_clk = "", DIR = I

 

MHS лучше поначалу руками не править. Пользуйтесь графической средой.

Когда заполните MPD, перезагрузите EDK.

Найдите в EDK окно System Assembly View и в нем вкладку Ports. Найдите там свое ядро, свой сигнал и выберите Make external. Посмотрите, как изменится MHS.

 

system.ucf

NET my_clk LOC = "N19" | IOSTANDARD = "LVCMOS25"; N19 заменю на нужный контакт

Как то так.

 

если можно, то еще может подскажете как быстро подключиться в user_logic. нужна запись 32р слов, количество ~ 500.

500 слов раз в секунду или чаще?

Edited by aabmail

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this