aabmail 0 17 июня, 2013 Опубликовано 17 июня, 2013 · Жалоба Ну так mst_reg это и есть регистры. Обычно mst_reg используются для конфигурирования мастера, и для пользователей не предназначены. Если что-то единичное хотите передавать, используйте slv_reg( ). Они там случайно не сгенерились? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
serg_k1 0 17 июня, 2013 Опубликовано 17 июня, 2013 · Жалоба глобально компонент это 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
akorud 0 17 июня, 2013 Опубликовано 17 июня, 2013 · Жалоба Обычно mst_reg используются для конфигурирования мастера, и для пользователей не предназначены. Если что-то единичное хотите передавать, используйте slv_reg( ). Они там случайно не сгенерились? Там все очень условно. У них в примере - да, причем насколько я помню чтобы показать что можно иметь несколько address space в одном pcore. Но как только вы начнете изменять мастер (не верю чтоб тот из примера - читаем/пишем FIFO - подошел один к одному) - придется изменять и предназначение регистров. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 17 июня, 2013 Опубликовано 17 июня, 2013 · Жалоба да ничего там не условно:). В модуль входит шина АКСИ - сложная. Есть компонент от ксалинкса который сложную акси переделывает в Bus2IP и IP2Bus. Один от шины в компонент, другой от компонента в шину. Зачем их делать 2 направленными то? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
serg_k1 0 19 июня, 2013 Опубликовано 19 июня, 2013 · Жалоба глобально компонент это 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; и через них получить доступ к регистрам? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
akorud 0 19 июня, 2013 Опубликовано 19 июня, 2013 (изменено) · Жалоба помогите разобраться. 1.модуль ,такой как есть, может работать только по командам от процессора? Если вы о том примере - да 2.если да и я хочу чтобы он работал полностью извне, то нужно вот этими сигналами управлять работой. Можно конечно, но зачем такое извращение? Если вам нужно извне управлять - заведите свои сигналы управления модуль. А что касается регистров - все это условно. Например FSM bus master - ему откуда-то надо знать что можно начинать работу, откуда и сколько писать или читать. В случае если командует процессор - регистры очевидное решение. Но у вас же своя задача и свои сигналы.... У меня например адрес и размер были вообще зафиксированы, команда "старт" приходила от таймера и регистр я оставил один - для подсчета байтов. Но никто вам не мешает сделать свой мастер который через упомянутые сигналы будет писать/читать регистры. Изменено 19 июня, 2013 пользователем akorud Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
serg_k1 0 19 июня, 2013 Опубликовано 19 июня, 2013 · Жалоба Если вы о том примере - да Можно конечно, но зачем такое извращение? Если вам нужно извне управлять - заведите свои сигналы управления модуль. А что касается регистров - все это условно. Например 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 при записи в регистры. Не могли бы пояснить как? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
akorud 0 19 июня, 2013 Опубликовано 19 июня, 2013 (изменено) · Жалоба т.е. именно те сигналы , которые я перечислил? с сигналом Bus2IP_BE не понятно ведь он завязан с Bus2IP_Data при записи в регистры. Не могли бы пояснить как? BE - Byte Enable. Т.е. если Bus2IP_Data шире 8 бит, то BE указывает какие из байтов несут данные (если ширина данных < ширины Bus2IP_Data). Типичные сценарии: - запись 8-битного значения на 32-битной шине; - при burst передаче если размер burst в байтах не кратный 4 (на 32-битной шине) - то при передаче последнего 32-битного слова не все биты Bus2IP_BE будут 1. Если у вас все данные размерности шины можно записать туда все 1 и не париться. Изменено 19 июня, 2013 пользователем akorud Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 20 июня, 2013 Опубликовано 20 июня, 2013 · Жалоба чет я не понимаю. вроде бы 2 задачи 1. У вас модуль висит на АКСе шине и через нее вы хотите писать в ДДР. Для этой части вы делаете регистровый кусок - мастер шины акси, при помощи которого сможете общатся с память. 2. Сбор внешних данных которые как раз в память и пишутся. Для этой части вам надо сделать свой кусок который примет внешние сигналы обработает их и перепихает в регистры. Вроде так... 1 часть вроде должен был сделать визард компонента. 2 часть пишется руками, все сигналы заводятся какие надо из вне. Я бы сделал визардом первую часть и научился бы писать - читать память. Получить доступ к шине тоже не тривиальная, может в этом случае ДМА готовое было бы проще... Только не ляпайте заплаток, если сегодня модуль пишет только 32 битными словами, кто вам сказал что завтра не понадобиться 8 битных? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
akorud 0 20 июня, 2013 Опубликовано 20 июня, 2013 · Жалоба ...который примет внешние сигналы обработает их и перепихает в регистры. Вроде так... Не так. Регистры служат исключительно для управления мастером, из них они читает что делать, сколько и куда. Данных там нет. В примере - данные в ФИФО. Я у себя тоже так делал. Но не обязательно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 20 июня, 2013 Опубликовано 20 июня, 2013 · Жалоба каким мастером? как можно управлять мастером? я так понял этот блок сам должен быть мастером? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
serg_k1 0 20 июня, 2013 Опубликовано 20 июня, 2013 · Жалоба 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 не понятно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 20 июня, 2013 Опубликовано 20 июня, 2013 · Жалоба вообщем это делается так. Есть микроблайз с ДДР, который как я понимаю данные будет в езернет пихать Есть ваш компонент внутри с ФИФО, в которое будут данные собираться и есть ДМА контроллер, уже готовый ксалинксом написанный, который соединит выход вашего фифо и ДДР если совсем извратиться можно даже так настроить чтобы ДМА данные клало в выходной буфер ЛвИП, Вот в эту сторону я бы копал, это лучше чем делать своего мастера на шине руками Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
akorud 0 20 июня, 2013 Опубликовано 20 июня, 2013 · Жалоба Не соглашусь, ну на то тут и форум чтобы можно было различные мнения публиковать. Зачем ДМА? Зачем 2 порта памяти? Насколько я понял речь идет о 1Gbps - это медленно. Я сам собственноручно написал модуль принимающий пакеты по ethernet и складывающий в ДДР без участия microblaze. Все чудесно работает с однопортовой ДДР, при частоте шины 50MHz. Где-то тут я уже постил скриншот из XPS. задача такая. принять данные и передать их через 1Gb интернет. IP/UDP надо по условию задачи? Скорость поступления данных? Если данные поступают медленнее чем их высылает сеть, то такая задача решается за полдня, делал недавно и думаю вполне смогу поделится кодом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 20 июня, 2013 Опубликовано 20 июня, 2013 · Жалоба Да я что-то уже путаюсь. Мне кажется что топикстартер где то еще что-то подобное уже обсуждал, а может это кто-то другой. То есть задача раскинута по нескольким топикам, или я ошибаюсь... Если есть данные которые надо просто передать по езернету, и скорость входа их меньше, то естественно тут даже микроблайз по хорошему не нужен. Но что-то мне подсказывает что когда говорят езернет, то имеют ввиду чтобы в компьютер включить и в виндусе получить. А это уже значит IP, а то и ТСР, UDP - край. Но даже по UDP задача решаема, есть модули которые напрямую формируют пакеты UDP с контрольной суммой и так далее.... Но я так понимаю речь идет о полной системе, которая нормально видится в сети, и с нее можно забрать какие то намеренные показания, отсюда и строю свое понимание, а именно что надо взять микроблайз с DDR и LwIP, сделать нормальный серверочек данных с протоколом, а то и что-то стандартное выше уровнем типа ФТП, ХТТП... а к этой системе уже прикрутить модуль сбора, первичной обработки данных, который их уложит аккуратными стопочками в память. Я бы конечно бы их из модуля в память перекладывал бы Микроблайзом, но ТС хочет его освободить от этого как я понял, и потому фактически старается написать свой модуль ДМА, а я предлагаю взять готовый... Вот такое мое понимание задачи, хотя я признаю может я все и перепутал:)... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться