Перейти к содержанию
    

Добрый день.

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

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

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добрый день.

У меня система на 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 - там вам визард сгенерирует работающий пример. У нас в проекте до сих пор фрагменты кода из того примера встречаются :).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

если же идти от обратного - т.е. взять проект синтезированного примера и туда добавить 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 вписывайте свой код.

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

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

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

 

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

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

 

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

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

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

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

 

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

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

 

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

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

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

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

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

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

но это то и есть второй путь. вернее его первая часть. а вот дольше как действовать? нужно ведь добавить 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 вписывайте свой код.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Открываете 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 , а дальше должен провести через эти модули в микроблайз. ведь в этом случае есть только он и через него нужно вводить сигналы от внешнего устройства?.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Вы хотите ввести извне сигнал 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.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Поддерживаю. Мне такой вариант показался самым удобным, только код я писал в 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 слов раз в секунду или чаще?

Изменено пользователем aabmail

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...