|
MicroBlaze + DDR3 + my_IP на AXI, подключение к AXI |
|
|
|
 |
Ответов
|
May 5 2013, 18:47
|
Местный
  
Группа: Свой
Сообщений: 203
Регистрация: 12-11-10
Из: Poland
Пользователь №: 60 842

|
Цитата(zuuuuk @ May 5 2013, 17:44)  Добрый день. У меня система на 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 - там вам визард сгенерирует работающий пример. У нас в проекте до сих пор фрагменты кода из того примера встречаются  .
|
|
|
|
|
Jun 7 2013, 10:11
|
Частый гость
 
Группа: Участник
Сообщений: 115
Регистрация: 21-03-07
Пользователь №: 26 368

|
Цитата(akorud @ May 5 2013, 22:47)  Лучше делать через "переходник" от Xilinx - http://www.xilinx.com/support/documentatio...aster_burst.pdf т.к. AXI достаточно сложная шина. Не скажу, что IP простой и очевидный - но все таки удалось его понять и все работает как часы. Да, в Platform Studio меню Hardware->Create or import periferal - там вам визард сгенерирует работающий пример. У нас в проекте до сих пор фрагменты кода из того примера встречаются  . как тут действовать? собрал схему на стр. 14 указанного pdf с синтезированным ip. но как добраться до входов ( Bus2IP_***)? Я так понимаю , что на них нужно подавать сигналы от внешнего устройства? если же идти от обратного - т.е. взять проект синтезированного примера и туда добавить microblaze , то тоже непонятно как их состыковать? может кто подскажет путь?
|
|
|
|
|
Jun 7 2013, 12:19
|
Местный
  
Группа: Свой
Сообщений: 210
Регистрация: 4-06-08
Из: Москва
Пользователь №: 38 056

|
Цитата(serg_k1 @ Jun 7 2013, 14:11)  если же идти от обратного - т.е. взять проект синтезированного примера и туда добавить 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 вписывайте свой код. Могу расписать более подробно.
|
|
|
|
|
Jun 10 2013, 06:33
|
Частый гость
 
Группа: Участник
Сообщений: 115
Регистрация: 21-03-07
Пользователь №: 26 368

|
Цитата(aabmail @ Jun 7 2013, 16:19)  Могу расписать более подробно. было бы очень полезно. но это то и есть второй путь. вернее его первая часть. а вот дольше как действовать? нужно ведь добавить microblaze. и что в нем должно быть. ведь нужно собрать цепочку до DDR3 и при этом оставить существующую связь к DDR3. я ее собирал . но на axi external Master Connector(в Isim не заработало). а как здесь?
|
|
|
|
|
Jun 11 2013, 08:01
|
Местный
  
Группа: Свой
Сообщений: 210
Регистрация: 4-06-08
Из: Москва
Пользователь №: 38 056

|
Цитата(serg_k1 @ Jun 10 2013, 10:33)  было бы очень полезно. но это то и есть второй путь. вернее его первая часть. а вот дольше как действовать? нужно ведь добавить 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 вписывайте свой код.
|
|
|
|
|
Jun 11 2013, 09:35
|
Частый гость
 
Группа: Участник
Сообщений: 115
Регистрация: 21-03-07
Пользователь №: 26 368

|
Цитата(aabmail @ Jun 11 2013, 12:01)  Открываете 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 , а дальше должен провести через эти модули в микроблайз. ведь в этом случае есть только он и через него нужно вводить сигналы от внешнего устройства?.
|
|
|
|
|
Jun 11 2013, 09:54
|
Местный
  
Группа: Свой
Сообщений: 210
Регистрация: 4-06-08
Из: Москва
Пользователь №: 38 056

|
Цитата(serg_k1 @ Jun 11 2013, 13:35)  все это я и раньше проделал. 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.
|
|
|
|
|
Jun 11 2013, 10:52
|
Местный
  
Группа: Свой
Сообщений: 203
Регистрация: 12-11-10
Из: Poland
Пользователь №: 60 842

|
Цитата(aabmail @ Jun 11 2013, 11:54)  Ваш второй вариант ближе к мной предложенному пути. Поддерживаю. Мне такой вариант показался самым удобным, только код я писал в sublime text. ISE так ни разу и не запустил.
|
|
|
|
|
Jun 11 2013, 16:42
|
Местный
  
Группа: Свой
Сообщений: 210
Регистрация: 4-06-08
Из: Москва
Пользователь №: 38 056

|
Цитата(akorud @ Jun 11 2013, 14:52)  Поддерживаю. Мне такой вариант показался самым удобным, только код я писал в 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 - Jun 11 2013, 16:02
|
|
|
|
|
Jun 13 2013, 05:36
|
Частый гость
 
Группа: Участник
Сообщений: 115
Регистрация: 21-03-07
Пользователь №: 26 368

|
Цитата 500 слов раз в секунду или чаще? 32р 400 слов ~16MГц , это как бы строка. затем новый адрес и повтор
|
|
|
|
|
Jun 13 2013, 09:56
|
Местный
  
Группа: Свой
Сообщений: 210
Регистрация: 4-06-08
Из: Москва
Пользователь №: 38 056

|
Цитата(serg_k1 @ Jun 13 2013, 09:36)  32р 400 слов ~16MГц , это как бы строка. затем новый адрес и повтор Разъясните, что означает ~16MГц? Вы хотите передавать 16 000 000 раз в секунду 400 32-разрядных слов? или 16 000 000 одно 32 разрядного слова, или 16 мегабайт в сек или 16 мегабит/сек?
|
|
|
|
|
Jun 13 2013, 11:52
|
Частый гость
 
Группа: Участник
Сообщений: 115
Регистрация: 21-03-07
Пользователь №: 26 368

|
Цитата(aabmail @ Jun 13 2013, 13:56)  Разъясните, что означает ~16MГц?
Вы хотите передавать 16 000 000 раз в секунду 400 32-разрядных слов? или 16 000 000 одно 32 разрядного слова, или 16 мегабайт в сек или 16 мегабит/сек? 32р слово записывается с частотой 16МГц. таких слов 400. это записывается по одному начальному адресу. 9 разрядов. пусть с адреса 8000_0000 по 8000_01FF(если 512) . потом наращивается адрес для следующей строки еще 10разрядов с 10 по 19,. всего 19разрядов. это вся информация. может быть еще один или два разряда, чтобы следующую писать в другую область памяти. всего от 19 до 22разрядов адреса.
|
|
|
|
|
Jun 13 2013, 15:34
|
Местный
  
Группа: Свой
Сообщений: 210
Регистрация: 4-06-08
Из: Москва
Пользователь №: 38 056

|
Цитата(serg_k1 @ Jun 13 2013, 15:52)  32р слово записывается с частотой 16МГц. таких слов 400. это записывается по одному начальному адресу. 9 разрядов. пусть с адреса 8000_0000 по 8000_01FF(если 512) . потом наращивается адрес для следующей строки еще 10разрядов с 10 по 19,. всего 19разрядов. это вся информация. может быть еще один или два разряда, чтобы следующую писать в другую область памяти. всего от 19 до 22разрядов адреса. Вы хотите сказать, что данные в Вашу плату вводятся по последовательному интерфейсу на частоте 16 МГц пакетами по 400 32битных слов? Если так, и если исходить из того, что пакеты поступают друг за другом встык, то поток данных получается 2 Мбайта в сек. Для нашего верианта построения проекта это максимально возможный поток. Мы недавно купили плату отладки AVNET, скачали с их сайта готовый проект, включающий тест пропускной способности. Там примерно так и получалось (несмотря на то, что там гигабитный Ethernet) . Это к тому, что возможно, система не будет успевать переработать ваши данные, и часть будет пропадать. Чтобы переправить данные в DDR, записывать их в FIFO. 1. нужно найти в user_logic.vhd DATA_CAPTURE_FIFO_I. Там в качестве примера уже инстанциирован FIFO. Идея примера в том, что блэйз кладет данные в fifo и сам же их оттуда считывает. Нужно адаптировать пример под себя. в DATA_CAPTURE_FIFO_I: 2. C_DEPTH заменяете на 400 3. к порту Data_In вместо того, что там написано, подключаете свои данные (32 bit) 4. управляете записью сигналом FIFO_Write. 5. Проверяйте состояние fifo сигналами FIFO_empty, FIFO_full и addr. Не допускайте переполнения. В программе MicroBlaze: 6. Когда вы создавали ядро через визард, у вас в проекте должна была появиться папка drivers, в которой должны лежать примеры считывания из ядра. Должно быть что-то вроде AXI_mmm_core_MasterSendBytes (в зависимости от того, как вы назвали свое ядро). Как-то так.
|
|
|
|
Сообщений в этой теме
zuuuuk MicroBlaze + DDR3 + my_IP на AXI May 5 2013, 15:44             serg_k1 Цитата(aabmail @ Jun 13 2013, 19:34) 3. к... Jun 14 2013, 06:42       serg_k1 Цитата(aabmail @ Jun 11 2013, 13:54) Ваш ... Jun 11 2013, 12:11 Golikov A. А что если так.
Делаете микроблайз
в нем включае... Jun 10 2013, 10:44 serg_k1 Цитата(Golikov A. @ Jun 10 2013, 14:44) А... Jun 10 2013, 12:24 Golikov A. так вы что хотите написать свой акси конектор что ... Jun 10 2013, 14:07 serg_k1 Цитата(Golikov A. @ Jun 10 2013, 18:07) т... Jun 11 2013, 06:43 Golikov A. я делаю визардом из XPS компонент, обычно с верило... Jun 12 2013, 07:42 Golikov A. на гигабитном езернете, в крайне не оптимальном ре... Jun 13 2013, 17:19 Golikov A. такс...
ФИФО
это компонент с входом и выходом пар... Jun 14 2013, 07:00 serg_k1 Цитата(Golikov A. @ Jun 14 2013, 11:00) Д... Jun 14 2013, 07:54  akorud Цитата(serg_k1 @ Jun 14 2013, 09:54) созд... Jun 16 2013, 20:54   aabmail Цитата(akorud @ Jun 17 2013, 00:54) Ну та... Jun 17 2013, 10:09    akorud Цитата(aabmail @ Jun 17 2013, 12:09) Обыч... Jun 17 2013, 13:26 aabmail ЦитатаКогда на входе строба записи появляется един... Jun 14 2013, 08:04 Golikov A. то данные из data_in на этом же цикле записываются... Jun 14 2013, 10:36 serg_k1 Цитата(Golikov A. @ Jun 14 2013, 14:36) я... Jun 14 2013, 12:53 Golikov A. сдается мне у кого-то полная путаница в голове..
... Jun 14 2013, 13:59 serg_k1 Цитата(Golikov A. @ Jun 14 2013, 17:59)
... Jun 14 2013, 14:11 serg_k1 Цитата(Golikov A. @ Jun 14 2013, 17:59) г... Jun 17 2013, 13:25 serg_k1 Цитата(Golikov A. @ Jun 14 2013, 17:59) г... Jun 19 2013, 12:21  akorud Цитата(serg_k1 @ Jun 19 2013, 14:21) помо... Jun 19 2013, 13:25   serg_k1 Цитата(akorud @ Jun 19 2013, 17:25) Если ... Jun 19 2013, 14:05    akorud Цитата(serg_k1 @ Jun 19 2013, 16:05) т.е.... Jun 19 2013, 14:27     serg_k1 Цитата(akorud @ Jun 19 2013, 18:27) BE - ... Jun 20 2013, 13:53      akorud Не соглашусь, ну на то тут и форум чтобы можно был... Jun 20 2013, 15:51       TimeToSleep Цитата(akorud @ Jun 20 2013, 16:51) Зачем... Feb 12 2016, 07:16        akorud Цитата(TimeToSleep @ Feb 12 2016, 08:16) ... Feb 13 2016, 15:45         TimeToSleep Цитата(akorud @ Feb 13 2016, 16:45) Если ... Feb 17 2016, 14:34         TimeToSleep Цитата(akorud @ Jun 19 2013, 15:27) BE - ... Feb 18 2016, 07:40          akorud Цитата(TimeToSleep @ Feb 18 2016, 08:40) ... Feb 22 2016, 10:43           TimeToSleep Цитата(akorud @ Feb 22 2016, 11:43) 1. По... Feb 25 2016, 07:00            akorud Цитата(TimeToSleep @ Feb 25 2016, 08:00) ... Feb 25 2016, 09:48             TimeToSleep Цитата(akorud @ Feb 25 2016, 10:48) Если ... Feb 25 2016, 12:40              akorud Да, оно. Feb 25 2016, 18:58             TimeToSleep Цитата(akorud @ Feb 25 2016, 12:48) Далее... Feb 26 2016, 07:11              akorud Цитата(TimeToSleep @ Feb 26 2016, 08:11) ... Feb 26 2016, 10:17               TimeToSleep Цитата(akorud @ Feb 26 2016, 13:17) Что-т... Mar 9 2016, 06:04               TimeToSleep Цитата(akorud @ Feb 26 2016, 13:17) Что-т... Mar 11 2016, 06:13      akorud Цитата(serg_k1 @ Jun 20 2013, 15:53) спас... Jun 21 2013, 06:58 Golikov A. да ничего там не условно.
В модуль входит шина АК... Jun 17 2013, 19:47 Golikov A. чет я не понимаю.
вроде бы 2 задачи
1.
У вас модул... Jun 20 2013, 05:01 akorud Цитата(Golikov A. @ Jun 20 2013, 07:01) .... Jun 20 2013, 08:18 Golikov A. каким мастером? как можно управлять мастером?
я т... Jun 20 2013, 10:13 Golikov A. вообщем это делается так.
Есть микроблайз с ДДР, ... Jun 20 2013, 15:02 Golikov A. Да я что-то уже путаюсь. Мне кажется что топикстар... Jun 20 2013, 18:41 serg_k1 Цитата(Golikov A. @ Jun 20 2013, 22:41) Д... Jun 24 2013, 05:43  akorud Как то все очень запутано - кажется ТС пробует ... Jun 24 2013, 10:03   serg_k1 Цитата(akorud @ Jun 24 2013, 14:03) Как т... Jun 24 2013, 14:03    akorud Цитата(serg_k1 @ Jun 24 2013, 16:03) я на... Jun 24 2013, 14:38     serg_k1 Цитата(akorud @ Jun 24 2013, 18:38) Да, о... Jun 25 2013, 11:14      serg_k1 Цитата(serg_k1 @ Jun 25 2013, 15:14) или ... Jun 25 2013, 12:29      akorud Цитата(serg_k1 @ Jun 25 2013, 13:14) .tx_... Jun 25 2013, 13:28   TimeToSleep Цитата(akorud @ Jun 24 2013, 11:03) Я бы ... Feb 19 2016, 12:55 TimeToSleep Здравствуйте, akorud .
Тема достаточно забытая, н... Feb 11 2016, 14:20 TimeToSleep Подскажите, пожалуйста, сталкивался ли кто-то с те... Mar 18 2016, 06:03
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|