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

Ну так mst_reg это и есть регистры.

 

Обычно mst_reg используются для конфигурирования мастера, и для пользователей не предназначены.

Если что-то единичное хотите передавать, используйте slv_reg( ). Они там случайно не сгенерились?

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


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

глобально компонент это

 

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.

 

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


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

Обычно mst_reg используются для конфигурирования мастера, и для пользователей не предназначены.

Если что-то единичное хотите передавать, используйте slv_reg( ). Они там случайно не сгенерились?

Там все очень условно. У них в примере - да, причем насколько я помню чтобы показать что можно иметь несколько address space в одном pcore.

Но как только вы начнете изменять мастер (не верю чтоб тот из примера - читаем/пишем FIFO - подошел один к одному) - придется изменять и предназначение регистров.

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


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

да ничего там не условно:).

 

В модуль входит шина АКСИ - сложная.

Есть компонент от ксалинкса который сложную акси переделывает в Bus2IP и IP2Bus.

 

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

 

 

 

 

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


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

глобально компонент это

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;

и через них получить доступ к регистрам?

 

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


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

помогите разобраться.

1.модуль ,такой как есть, может работать только по командам от процессора?

Если вы о том примере - да

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

Можно конечно, но зачем такое извращение?

Если вам нужно извне управлять - заведите свои сигналы управления модуль.

А что касается регистров - все это условно.

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

Но никто вам не мешает сделать свой мастер который через упомянутые сигналы будет писать/читать регистры.

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

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


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

Если вы о том примере - да

 

Можно конечно, но зачем такое извращение?

Если вам нужно извне управлять - заведите свои сигналы управления модуль.

А что касается регистров - все это условно.

Например 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

 

 

 

Но никто вам не мешает сделать свой мастер который через упомянутые сигналы будет писать/читать регистры.

т.е. именно те сигналы , которые я перечислил? с сигналом Bus2IP_BE не понятно ведь он завязан с Bus2IP_Data при записи в регистры. Не могли бы пояснить как?

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


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

т.е. именно те сигналы , которые я перечислил? с сигналом 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

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


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

чет я не понимаю.

вроде бы 2 задачи

1.

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

2.

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

 

 

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

 

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

 

 

 

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


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

...который примет внешние сигналы обработает их и перепихает в регистры. Вроде так...

Не так. Регистры служат исключительно для управления мастером, из них они читает что делать, сколько и куда. Данных там нет.

В примере - данные в ФИФО. Я у себя тоже так делал. Но не обязательно.

 

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


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

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

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

 

 

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


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

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' и ничего. ?

 

чет я не понимаю.

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

а вот с первой часть примера с набором регистров ничего не понятно. кстати получается что в моей версии эта часть не используется вообще.

 

 

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

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

я думаю что да

 

Не так. Регистры служат исключительно для управления мастером, из них они читает что делать, сколько и куда. Данных там нет.

В примере - данные в ФИФО. Я у себя тоже так делал. Но не обязательно.

если про регистры mst_reg , то да. а вот с slv_reg0 не понятно.

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


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

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

 

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

 

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

 

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

 

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

 

Вот в эту сторону я бы копал, это лучше чем делать своего мастера на шине руками

 

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


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

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

Зачем ДМА? Зачем 2 порта памяти? Насколько я понял речь идет о 1Gbps - это медленно.

Я сам собственноручно написал модуль принимающий пакеты по ethernet и складывающий в ДДР без участия microblaze. Все чудесно работает с однопортовой ДДР, при частоте шины 50MHz. Где-то тут я уже постил скриншот из XPS.

 

 

задача такая.

принять данные и передать их через 1Gb интернет.

IP/UDP надо по условию задачи? Скорость поступления данных?

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

 

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


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

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

 

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

 

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

 

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

 

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

 

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

 

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

 

 

Вот такое мое понимание задачи, хотя я признаю может я все и перепутал:)...

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


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

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

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

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

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

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

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

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

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

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