реклама на сайте
подробности

 
 
> Как записать данные в память из AXImaster?, ADC->AXI4->MCB3
_4afc_
сообщение Nov 14 2013, 08:37
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 262
Регистрация: 13-10-05
Из: Санкт-Петербург
Пользователь №: 9 565



Есть АЦП 8бит 25МГц подключенный к Spartan6 у которого есть Microblaze и LPDDR.
Microblaze прекрасно читает и пишет в LPDDR как мастер на шине AXI.
Хочется добавить своего максимально простого мастера который будет заполнять память данными из АЦП.

Думаю начать с мастера который просто заполняет память нулями - дальше всё вроде понятно.
Опыт написания AXIslave есть.

Вопрос 1:
Что производительнее/проще -
1 добавить второй порт к памяти и через отдельную шину AXI4 записывать данные своим мастером?
2 добавить второго мастера на существующую шину?

Вопрос 2:

Какова поледовательность посылки данных мастером?

Если создать AXImaster_burst в визарде, то он предлагает перебросить данные из своего FIFO за 5 манипуляций с регистрами IP:
1. write 0x02 to the control register to perform write operation.
2. write the target address to the address register
3. write valid byte lane value to the be register
4. write 0x0040 to the length register
5. write 0x0a to the go register, this will start the master write operation
но как заполнить его FIFO из IP и манипулировать этими регистрами непонятно.

Если создать axi_ext_master_conn, то получаем пустую болванку и что в неё писать - загадка.

Может есть у кого примерчик простенького AXI мастера?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
m_m
сообщение Nov 14 2013, 10:12
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 21
Регистрация: 17-02-09
Пользователь №: 44 975



Цитата(_4afc_ @ Nov 14 2013, 12:37) *
Вопрос 1:
Что производительнее/проще -
1 добавить второй порт к памяти и через отдельную шину AXI4 записывать данные своим мастером?
2 добавить второго мастера на существующую шину?


AXI4 подразумевает соединение точка-точка - это не шина. Инфраструктура строится с использованием axi switch'ей.

Если добавить в mig'е второй порт, будет быстрее и проще.

Реализация axi интерфейсов есть, например, в xapp1168. Vivado 2013.3 умеет генерировать шаблоны, такие же как в xapp1168.
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Nov 14 2013, 11:56
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643



Приветствую!

Цитата(m_m @ Nov 14 2013, 12:12) *
AXI4 подразумевает соединение точка-точка - это не шина. Инфраструктура строится с использованием axi switch'ей.

Если добавить в mig'е второй порт, будет быстрее и проще.
...


Все в кучу смешали - и MIGи и шины и кони sm.gif

Раз уже есть система с Microblaze и LPDDR то значить есть и axi_interconet - это и есть тот самый "switch"
MIG с в системах с AXI шиной имеет только один порт который как раз цепляется к axi_interconet.

В случае _4afc_ есть несколько вариантов -

"soft" - цепляете в EDK axi_dma к axi_interconet - данные ADC гоните по axi_stream через DMA;
требуется соответственно поддержка в софте (драйвер axi_dma уже готовые есть).

"hard" - делаете свой аналог axi_dma... ну а затем действия те же что и в варианте soft sm.gif (но еще и драйвер самому ваят)

"crazy" - делаете свой контроллер DDR с несколькими портами axi... ну а затем все как и в предыдущих вариантах 8-()

В принципе автомат пересылки данных по axi4 не сложен - тем более если не заморачивается с поддержкой всех режимов работы шины. Так что вариант "hard" вполне реализуем.
Так же EDK есть возможность создавать свою периферию с axi* шинами - при этом можно создать модуль адаптера axi_master который имеет боле простую шину со стороны user для обмена данными - громоздко но если по быстрому склепать что то на коленке - сойдет.

Успехов! Rob.
Go to the top of the page
 
+Quote Post
_4afc_
сообщение Nov 14 2013, 12:54
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 262
Регистрация: 13-10-05
Из: Санкт-Петербург
Пользователь №: 9 565



Цитата(RobFPGA @ Nov 14 2013, 14:56) *
Раз уже есть система с Microblaze и LPDDR то значить есть и axi_interconet - это и есть тот самый "switch"
MIG с в системах с AXI шиной имеет только один порт который как раз цепляется к axi_interconet.

Но я могу включить в MCB3 второй порт и соединиться с ним из своего ip по второму axi_interconet.
Есть ли в таком разделении смысл?

Цитата(RobFPGA @ Nov 14 2013, 14:56) *
"soft" - цепляете в EDK axi_dma к axi_interconet - данные ADC гоните по axi_stream через DMA;
требуется соответственно поддержка в софте (драйвер axi_dma уже готовые есть).

Где взять axi_dma в EDK? Или вы про AXImaster_burst или stream? Я пока не увидел лёгкости в том что генерит EDK.

Цитата(RobFPGA @ Nov 14 2013, 14:56) *
"hard" - делаете свой аналог axi_dma... ну а затем действия те же что и в варианте soft sm.gif (но еще и драйвер самому ваят)

Написать своё иногда легче, чем понять чужое. Вопрос - где-то описан порядок работы AXImaster в режиме dma?

Цитата(RobFPGA @ Nov 14 2013, 14:56) *
"crazy" - делаете свой контроллер DDR с несколькими портами axi... ну а затем все как и в предыдущих вариантах 8-()

Так визард EDK вроде позволяет контроллеру DDR иметь несколько axi, или потом это не синтезируется?

Цитата(RobFPGA @ Nov 14 2013, 14:56) *
В принципе автомат пересылки данных по axi4 не сложен - тем более если не заморачивается с поддержкой всех режимов работы шины. Так что вариант "hard" вполне реализуем.

А немогли бы вы на пальцах описать порядок действий мастера в этом режиме?

Цитата(RobFPGA @ Nov 14 2013, 14:56) *
Так же EDK есть возможность создавать свою периферию с axi* шинами - при этом можно создать модуль адаптера axi_master который имеет боле простую шину со стороны user для обмена данными - громоздко но если по быстрому склепать что то на коленке - сойдет.

Вот именно громоздкость полученного при этом результата - меня пугает. Кроме того в варианте "crazy" я могу FIFO иметь не в AXImaster, а в MCB3. В мастере иногда нужно поставить пару буферов.

Цитата(m_m @ Nov 14 2013, 13:12) *
AXI4 подразумевает соединение точка-точка - это не шина. Инфраструктура строится с использованием axi switch'ей.
Если добавить в mig'е второй порт, будет быстрее и проще.
Реализация axi интерфейсов есть, например, в xapp1168. Vivado 2013.3 умеет генерировать шаблоны, такие же как в xapp1168.


Спасибо, изучаю xapp1168.
Вы предлагаете сгенерить шаблон в Vivado 2013.3 и сделать по аналогии в EDK или Vivado научился со Spartan работать?
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Nov 14 2013, 14:25
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643



Приветствую!


Цитата(_4afc_ @ Nov 14 2013, 14:54) *
Но я могу включить в MCB3 второй порт и соединиться с ним из своего ip по второму axi_interconet.
Есть ли в таком разделении смысл?

Так визард EDK вроде позволяет контроллеру DDR иметь несколько axi, или потом это не синтезируется?


Упс голова чугунная - запамятовал что в Spartan hard контроллер DDR и уже имеет несколько портов - sorry.
Да - в этом случае конечно смысл есть - проще получится структура interconect.

Цитата(_4afc_ @ Nov 14 2013, 14:54) *
Где взять axi_dma в EDK? Или вы про AXImaster_burst или stream? Я пока не увидел лёгкости в том что генерит EDK.


В EDK 14.3 и выше есть
AXI DMA engine - это полный DMA (вариант "soft")
AXI datamover - это как видно из названия кусок DMA который непосредственно перегоняет данные (им нужно самому рулить но можно фантазировать от души)

Цитата(_4afc_ @ Nov 14 2013, 14:54) *
Написать своё иногда легче, чем понять чужое. Вопрос - где-то описан порядок работы AXImaster в режиме dma?
А немогли бы вы на пальцах описать порядок действий мастера в этом режиме?


В соответствии с протоколом axi любая транзакция по либой части шины проходит тогда когда *valid=1 *ready=1

Пишите данные ADC в FIFO, Поскольку у Вас ADC 8 бит то лучше на этом этапе упаковать их в 32-64 бита в соответствии с разрядностью шины.

Копите в этом FIFO число слов данных равное требуемому burst.

По шине aw* пишете запрос на запись:
awaddr адрес куда пишете очередной блок данных
awlen длинна burst

остальные поля - hardcod параметров в соответствии размерности шины
соответственно ставите awvalid=1, ждете awready=1

По шине данных wdata пересылаете нужное количество слов в соответствии длинной burst (соответственно ставите wvalid=1, ждете wready=1)

все - данные полетели на запись в темные недра DDR

Ждете подтверждения на шине bresp (соответственно ставите bready=1, ждете bvalid=1)

получив подтверждение - уменьшили счетчик слов - увеличили адрес буфера

если получили OK - то можете отправлять следующий запрос на запись
ну а если BAD - то "ШЕФ усе пропало! " sm.gif
для системы Microblaze скорее всего Вы выставили неправильный адрес - abort, exeptions ну и портянка лога на десяток экранов sad.gif

если счетчик==0 - все переслано "тютелько в тютельку" - надо бить в колокола - дергать прерывания - задавать новый адрес и размер буфера и начинать все по новой.

В принципе запрос на запись и пересылка данных могут идти в любом порядке да еще и не дожидаясь подтверждения окончания предыдущих. Главное чтобы всех "тварей" было по три wink.gif Это увеличивает скорость передачи но и усложняет реализацию. В Вашем случае скорость маленькая так что можно не заморачивается.

Ух аж вспотел - заодно и освежил в памяти что и как.

Успехов! Rob.
Go to the top of the page
 
+Quote Post
dmitry-tomsk
сообщение Nov 19 2013, 06:53
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 672
Регистрация: 18-02-05
Пользователь №: 2 741



Вариант axi stream master + data mover менее эффективен будет, чем axi full master?
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Nov 19 2013, 07:31
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643



Приветствую!

Цитата(dmitry-tomsk @ Nov 19 2013, 08:53) *
Вариант axi stream master + data mover менее эффективен будет, чем axi full master?

Немного не понял вопрос. Что Вы имели в виду под axi full master? И что является критерием эффективности?
data_mover это и есть full master контроллер на AXI шине.
Использование data_mover позволяет сделать свое "хитрое" (ну и понятно что более эффективное конкретно для Васsm.gif ) управление пересылками.
То есть например формировать дескрипторы не только софтом из CPU но и аппаратно - например с помощью FSM.
Или опять же например пересылать данные от нескольких источников по разным цепочкам дескрипторов.

Естественно чем хитрее будут Ваши фантазии в управлении тем сложнее (и ясен пень менее эффективно sad.gif ) их можно будет реализовывать.

Успехов. Rob.
Go to the top of the page
 
+Quote Post
dmitry-tomsk
сообщение Nov 19 2013, 08:24
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 672
Регистрация: 18-02-05
Пользователь №: 2 741



Цитата(RobFPGA @ Nov 19 2013, 10:31) *
Приветствую!


Немного не понял вопрос. Что Вы имели в виду под axi full master? И что является критерием эффективности?
data_mover это и есть full master контроллер на AXI шине.
Использование data_mover позволяет сделать свое "хитрое" (ну и понятно что более эффективное конкретно для Васsm.gif ) управление пересылками.
То есть например формировать дескрипторы не только софтом из CPU но и аппаратно - например с помощью FSM.
Или опять же например пересылать данные от нескольких источников по разным цепочкам дескрипторов.

Естественно чем хитрее будут Ваши фантазии в управлении тем сложнее (и ясен пень менее эффективно sad.gif ) их можно будет реализовывать.

Успехов. Rob.

Есть же axi_lite и axi_full варианты. По поводу АЦП. Не всегда же стоит задача только в память данные бросить, у нас, как правило, в параллель ЦОС обработка работает. Axi stream гораздо более удобен в этом плане. Вот я и спрашиваю по ресурсам и частоте какой вариант лучше?

Кроме того, ведь надо делать где-то переход с частоты АЦП на частоту порта MCB, пускай удвоенную к АЦП для простоты, и здесь размера FIFO, встроенного в MCB не хватает (проверено на не Axi проектах). Где лучше делать переход на другую частоту?
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th July 2025 - 03:09
Рейтинг@Mail.ru


Страница сгенерированна за 0.02062 секунд с 7
ELECTRONIX ©2004-2016