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

 
 
5 страниц V  < 1 2 3 4 5 >  
Reply to this topicStart new topic
> MicroBlaze + DDR3 + my_IP на AXI, подключение к AXI
aabmail
сообщение Jun 17 2013, 10:09
Сообщение #31


Местный
***

Группа: Свой
Сообщений: 210
Регистрация: 4-06-08
Из: Москва
Пользователь №: 38 056



Цитата(akorud @ Jun 17 2013, 00:54) *
Ну так mst_reg это и есть регистры.


Обычно mst_reg используются для конфигурирования мастера, и для пользователей не предназначены.
Если что-то единичное хотите передавать, используйте slv_reg( ). Они там случайно не сгенерились?
Go to the top of the page
 
+Quote Post
serg_k1
сообщение Jun 17 2013, 13:25
Сообщение #32


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 21-03-07
Пользователь №: 26 368



Цитата(Golikov A. @ Jun 14 2013, 17:59) *
глобально компонент это

1. Модуль обертка - который вешается на шину внутри содержит:
1.1 вспомогательный модуль который работает с шиной и преобразует ее сложные сигналы в понятный набор сигналов
Bus2IP - бас ту айпи, от шины к вам и
IP2Bus - обратно
клоки чипселекты, и прочие вспомогательные сигналы.
1.2 Пользовательский модуль, куда заведены эти понятные сигналы

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

Дальше вы в него пихаете компоненты, написанные вами прочие модули, и все все все что вам надо. И делаете управление всем этим через регистры. И выдачу данных обратно через регистры. и все.

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

Также в модуль обертки можно добавить еще пользовательский модуль если это надо...

Только надо понимать что это все для взаимодействия вашего модуля с микроблайзом, а если микроблайза нет, то и с шиной париться не надо, и можно писать обычный плисовый не процессорный модуль, что иногда бывает проще... без регистров, оберток и прочеее

все-таки не понятно.
1. регистры -приемники и задаются через Bus2IP_Data, Bus2IP_BE,Bus2IP_WrCE. а это входы user_logic.
получается что , если делать свою часть в user_logic, то нужно на внешние входы подавать сигналы из самого же блока. значит либо делать их inout(что вроде как запрещено) либо организовать цепочку выход вход.
2.Bus2IP_Data, Bus2IP_BE,Bus2IP_WrCE- эти сигналы формируются в драйвере. значит их нужно отключить оттуда? да и с содержанием Bus2IP_BE не очень понятно.
3.в user_logic есть как бы две части.slave model и master model?
4. для реализации алгоритма записи с помощью этого компонента (только не одиночной как в примере ,а Burst Write Transaction , как Figure 10: Example Burst Write Transaction Timing DS844) нужно пользоваться master model? здесь есть и адрес и длина записи. но тоже непонятно, как всем этим воспользоваться без сигналов Bus2IP_Data, Bus2IP_BE,Bus2IP_WrCE.
Go to the top of the page
 
+Quote Post
akorud
сообщение Jun 17 2013, 13:26
Сообщение #33


Местный
***

Группа: Свой
Сообщений: 203
Регистрация: 12-11-10
Из: Poland
Пользователь №: 60 842



Цитата(aabmail @ Jun 17 2013, 12:09) *
Обычно mst_reg используются для конфигурирования мастера, и для пользователей не предназначены.
Если что-то единичное хотите передавать, используйте slv_reg( ). Они там случайно не сгенерились?

Там все очень условно. У них в примере - да, причем насколько я помню чтобы показать что можно иметь несколько address space в одном pcore.
Но как только вы начнете изменять мастер (не верю чтоб тот из примера - читаем/пишем FIFO - подошел один к одному) - придется изменять и предназначение регистров.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jun 17 2013, 19:47
Сообщение #34


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



да ничего там не условноsm.gif.

В модуль входит шина АКСИ - сложная.
Есть компонент от ксалинкса который сложную акси переделывает в Bus2IP и IP2Bus.

Один от шины в компонент, другой от компонента в шину. Зачем их делать 2 направленными то?



Go to the top of the page
 
+Quote Post
serg_k1
сообщение Jun 19 2013, 12:21
Сообщение #35


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 21-03-07
Пользователь №: 26 368



Цитата(Golikov A. @ Jun 14 2013, 17:59) *
глобально компонент это
1. Модуль обертка - который вешается на шину внутри содержит:
1.1 вспомогательный модуль который работает с шиной и преобразует ее сложные сигналы в понятный набор сигналов
Bus2IP - бас ту айпи, от шины к вам и
IP2Bus - обратно
клоки чипселекты, и прочие вспомогательные сигналы.
1.2 Пользовательский модуль, куда заведены эти понятные сигналы

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

Только надо понимать что это все для взаимодействия вашего модуля с микроблайзом, а если микроблайза нет, то и с шиной париться не надо, и можно писать обычный плисовый не процессорный модуль, что иногда бывает проще... без регистров, оберток и прочеее

помогите разобраться.
1.модуль ,такой как есть, может работать только по командам от процессора?
2.если да и я хочу чтобы он работал полностью извне, то нужно вот этими сигналами управлять работой.
Bus2IP_Clk : in std_logic;
Bus2IP_Resetn : in std_logic;
Bus2IP_Data : in std_logic_vector(C_SLV_DWIDTH-1 downto 0);
Bus2IP_BE : in std_logic_vector(C_SLV_DWIDTH/8-1 downto 0);
Bus2IP_RdCE : in std_logic_vector(C_NUM_REG-1 downto 0);
Bus2IP_WrCE : in std_logic_vector(C_NUM_REG-1 downto 0);
IP2Bus_Data : out std_logic_vector(C_SLV_DWIDTH-1 downto 0);
IP2Bus_RdAck : out std_logic;
IP2Bus_WrAck : out std_logic;
IP2Bus_Error : out std_logic;
и через них получить доступ к регистрам?
Go to the top of the page
 
+Quote Post
akorud
сообщение Jun 19 2013, 13:25
Сообщение #36


Местный
***

Группа: Свой
Сообщений: 203
Регистрация: 12-11-10
Из: Poland
Пользователь №: 60 842



Цитата(serg_k1 @ Jun 19 2013, 14:21) *
помогите разобраться.
1.модуль ,такой как есть, может работать только по командам от процессора?

Если вы о том примере - да
Цитата(serg_k1 @ Jun 19 2013, 14:21) *
2.если да и я хочу чтобы он работал полностью извне, то нужно вот этими сигналами управлять работой.

Можно конечно, но зачем такое извращение?
Если вам нужно извне управлять - заведите свои сигналы управления модуль.
А что касается регистров - все это условно.
Например FSM bus master - ему откуда-то надо знать что можно начинать работу, откуда и сколько писать или читать. В случае если командует процессор - регистры очевидное решение. Но у вас же своя задача и свои сигналы.... У меня например адрес и размер были вообще зафиксированы, команда "старт" приходила от таймера и регистр я оставил один - для подсчета байтов.
Но никто вам не мешает сделать свой мастер который через упомянутые сигналы будет писать/читать регистры.

Сообщение отредактировал akorud - Jun 19 2013, 13:26
Go to the top of the page
 
+Quote Post
serg_k1
сообщение Jun 19 2013, 14:05
Сообщение #37


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 21-03-07
Пользователь №: 26 368



Цитата(akorud @ Jun 19 2013, 17:25) *
Если вы о том примере - да

Можно конечно, но зачем такое извращение?
Если вам нужно извне управлять - заведите свои сигналы управления модуль.
А что касается регистров - все это условно.
Например FSM bus master - ему откуда-то надо знать что можно начинать работу, откуда и сколько писать или читать. В случае если командует процессор - регистры очевидное решение. Но у вас же своя задача и свои сигналы.... У меня например адрес и размер были вообще зафиксированы, команда "старт" приходила от таймера и регистр я оставил один - для подсчета байтов.
Но никто вам не мешает сделать свой мастер который через упомянутые сигналы будет писать/читать регистры.

я записываю в фифо данные. они не считываются пока нет команды на запуск. и что можно прямо так
mst_reg(0) <= x"0a"; -- Control Register 0x02= single data beat 0x0a=Burst Assertion Control+Write Request Control
mst_reg(1) <= x"01"; -- Status Register
mst_reg(4) <= x"80"; -- Target Address
mst_reg(5) <= x"00";
mst_reg(6) <= x"00";
mst_reg(7) <= x"00";
mst_reg(8) <= x"00"; -- Master BE
mst_reg(9) <= x"00";
mst_reg(12) <= x"04"; -- Length Register -- bit 0-3 - Reserved
mst_reg(13) <= x"00"; -- bit 4-15 - Transfer Length
mst_reg(14) <= x"00";
mst_reg(15) <= x"0a"; -- Go Register



Цитата(akorud @ Jun 19 2013, 17:25) *
Но никто вам не мешает сделать свой мастер который через упомянутые сигналы будет писать/читать регистры.

т.е. именно те сигналы , которые я перечислил? с сигналом Bus2IP_BE не понятно ведь он завязан с Bus2IP_Data при записи в регистры. Не могли бы пояснить как?
Go to the top of the page
 
+Quote Post
akorud
сообщение Jun 19 2013, 14:27
Сообщение #38


Местный
***

Группа: Свой
Сообщений: 203
Регистрация: 12-11-10
Из: Poland
Пользователь №: 60 842



Цитата(serg_k1 @ Jun 19 2013, 16:05) *
т.е. именно те сигналы , которые я перечислил? с сигналом Bus2IP_BE не понятно ведь он завязан с Bus2IP_Data при записи в регистры. Не могли бы пояснить как?

BE - Byte Enable. Т.е. если Bus2IP_Data шире 8 бит, то BE указывает какие из байтов несут данные (если ширина данных < ширины Bus2IP_Data).
Типичные сценарии:
- запись 8-битного значения на 32-битной шине;
- при burst передаче если размер burst в байтах не кратный 4 (на 32-битной шине) - то при передаче последнего 32-битного слова не все биты Bus2IP_BE будут 1.
Если у вас все данные размерности шины можно записать туда все 1 и не париться.

Сообщение отредактировал akorud - Jun 19 2013, 14:29
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jun 20 2013, 05:01
Сообщение #39


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



чет я не понимаю.
вроде бы 2 задачи
1.
У вас модуль висит на АКСе шине и через нее вы хотите писать в ДДР. Для этой части вы делаете регистровый кусок - мастер шины акси, при помощи которого сможете общатся с память.
2.
Сбор внешних данных которые как раз в память и пишутся. Для этой части вам надо сделать свой кусок который примет внешние сигналы обработает их и перепихает в регистры. Вроде так...


1 часть вроде должен был сделать визард компонента. 2 часть пишется руками, все сигналы заводятся какие надо из вне. Я бы сделал визардом первую часть и научился бы писать - читать память. Получить доступ к шине тоже не тривиальная, может в этом случае ДМА готовое было бы проще...

Только не ляпайте заплаток, если сегодня модуль пишет только 32 битными словами, кто вам сказал что завтра не понадобиться 8 битных?


Go to the top of the page
 
+Quote Post
akorud
сообщение Jun 20 2013, 08:18
Сообщение #40


Местный
***

Группа: Свой
Сообщений: 203
Регистрация: 12-11-10
Из: Poland
Пользователь №: 60 842



Цитата(Golikov A. @ Jun 20 2013, 07:01) *
...который примет внешние сигналы обработает их и перепихает в регистры. Вроде так...

Не так. Регистры служат исключительно для управления мастером, из них они читает что делать, сколько и куда. Данных там нет.
В примере - данные в ФИФО. Я у себя тоже так делал. Но не обязательно.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jun 20 2013, 10:13
Сообщение #41


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



каким мастером? как можно управлять мастером?
я так понял этот блок сам должен быть мастером?

Go to the top of the page
 
+Quote Post
serg_k1
сообщение Jun 20 2013, 13:53
Сообщение #42


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 21-03-07
Пользователь №: 26 368



Цитата(akorud @ Jun 19 2013, 18:27) *
BE - Byte Enable. Т.е. если Bus2IP_Data шире 8 бит, то BE указывает какие из байтов несут данные (если ширина данных < ширины Bus2IP_Data).
Типичные сценарии:
- запись 8-битного значения на 32-битной шине;
- при burst передаче если размер burst в байтах не кратный 4 (на 32-битной шине) - то при передаче последнего 32-битного слова не все биты Bus2IP_BE будут 1.
Если у вас все данные размерности шины можно записать туда все 1 и не париться.

спасибо, у меня 32р. сделал Bus2IP_BE все единицы. в mst_reg все записал, правда кроме 15. и как раз проблемы с mst_go. mst_go в 1 не могу сделать. делаю Bus2IP_Data в старшем байте = X"0A" при mst_byte_we(GO_BYTE_LANE) = '1' и ничего. ?

Цитата(Golikov A. @ Jun 20 2013, 09:01) *
чет я не понимаю.
вроде бы 2 задачи
1.
У вас модуль висит на АКСе шине и через нее вы хотите писать в ДДР. Для этой части вы делаете регистровый кусок - мастер шины акси, при помощи которого сможете общатся с память.
2.
Сбор внешних данных которые как раз в память и пишутся. Для этой части вам надо сделать свой кусок который примет внешние сигналы обработает их и перепихает в регистры. Вроде так...


1 часть вроде должен был сделать визард компонента. 2 часть пишется руками, все сигналы заводятся какие надо из вне. Я бы сделал визардом первую часть и научился бы писать - читать память. Получить доступ к шине тоже не тривиальная, может в этом случае ДМА готовое было бы проще...

Только не ляпайте заплаток, если сегодня модуль пишет только 32 битными словами, кто вам сказал что завтра не понадобиться 8 битных?

задача такая.
принять данные и передать их через 1Gb интернет.
есть микроблэйз связанный с DDR3 через AXI4 через порт P0 MCB_DDR3. он берет оттуда данные . хочется ввести данные в те же области откуда берет микроблэйз. ввести через AXI4 в порт P1 MCB_DDR3. и задавая адрес в DDR. без участия микроблэйза. поэтому и нужно, чтобы все управление было с внешней стороны.
я думал что самый простой путь - это добавить AXI_External_Master_Connector. у него есть m_axi c одной стороны , а с другой внешний порт. но не получилось. не выставляется сигнал разрешения доступа aw_ready.
тогда начал с этим компонентом. допустим что данные есть. их нужно подключить на вход фифо. и запустить мастер в user_logic. в нем задать адрес , количество и запустить чтение из фифо. но только не по программе микроблэйза, чтобы он не терял время.
и вот если с Example code to demonstrate user logic master model functionality мне вроде как понятно. нужно задать самому из самого компонента в mst_reg режим в Control Register, Addrress Register -адрес. Length Register - количество, Status Register , Byte Enable Register и Go Register пока не ясно и запустить чтение. и смотреть чтобы не было переполнения. по окончании новый адрес и новый цикл. и таким образом заполнять те же области, откуда микроблэйз их будет забирать.
а вот с первой часть примера с набором регистров ничего не понятно. кстати получается что в моей версии эта часть не используется вообще.


Цитата(Golikov A. @ Jun 20 2013, 14:13) *
каким мастером? как можно управлять мастером?
я так понял этот блок сам должен быть мастером?

я думаю что да

Цитата(akorud @ Jun 20 2013, 12:18) *
Не так. Регистры служат исключительно для управления мастером, из них они читает что делать, сколько и куда. Данных там нет.
В примере - данные в ФИФО. Я у себя тоже так делал. Но не обязательно.

если про регистры mst_reg , то да. а вот с slv_reg0 не понятно.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jun 20 2013, 15:02
Сообщение #43


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



вообщем это делается так.

Есть микроблайз с ДДР, который как я понимаю данные будет в езернет пихать

Есть ваш компонент внутри с ФИФО, в которое будут данные собираться

и есть ДМА контроллер, уже готовый ксалинксом написанный, который соединит выход вашего фифо и ДДР

если совсем извратиться можно даже так настроить чтобы ДМА данные клало в выходной буфер ЛвИП,

Вот в эту сторону я бы копал, это лучше чем делать своего мастера на шине руками
Go to the top of the page
 
+Quote Post
akorud
сообщение Jun 20 2013, 15:51
Сообщение #44


Местный
***

Группа: Свой
Сообщений: 203
Регистрация: 12-11-10
Из: Poland
Пользователь №: 60 842



Не соглашусь, ну на то тут и форум чтобы можно было различные мнения публиковать.
Зачем ДМА? Зачем 2 порта памяти? Насколько я понял речь идет о 1Gbps - это медленно.
Я сам собственноручно написал модуль принимающий пакеты по ethernet и складывающий в ДДР без участия microblaze. Все чудесно работает с однопортовой ДДР, при частоте шины 50MHz. Где-то тут я уже постил скриншот из XPS.


Цитата(serg_k1 @ Jun 20 2013, 15:53) *
задача такая.
принять данные и передать их через 1Gb интернет.

IP/UDP надо по условию задачи? Скорость поступления данных?
Если данные поступают медленнее чем их высылает сеть, то такая задача решается за полдня, делал недавно и думаю вполне смогу поделится кодом.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jun 20 2013, 18:41
Сообщение #45


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Да я что-то уже путаюсь. Мне кажется что топикстартер где то еще что-то подобное уже обсуждал, а может это кто-то другой. То есть задача раскинута по нескольким топикам, или я ошибаюсь...

Если есть данные которые надо просто передать по езернету, и скорость входа их меньше, то естественно тут даже микроблайз по хорошему не нужен. Но что-то мне подсказывает что когда говорят езернет, то имеют ввиду чтобы в компьютер включить и в виндусе получить. А это уже значит IP, а то и ТСР, UDP - край.

Но даже по UDP задача решаема, есть модули которые напрямую формируют пакеты UDP с контрольной суммой и так далее....

Но я так понимаю речь идет о полной системе, которая нормально видится в сети, и с нее можно забрать какие то намеренные показания, отсюда и строю свое понимание, а именно

что надо взять микроблайз с DDR и LwIP, сделать нормальный серверочек данных с протоколом, а то и что-то стандартное выше уровнем типа ФТП, ХТТП...

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

Я бы конечно бы их из модуля в память перекладывал бы Микроблайзом, но ТС хочет его освободить от этого как я понял, и потому фактически старается написать свой модуль ДМА, а я предлагаю взять готовый...


Вот такое мое понимание задачи, хотя я признаю может я все и перепуталsm.gif...
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 07:54
Рейтинг@Mail.ru


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