Jump to content

    
Sign in to follow this  
zuuuuk

MicroBlaze + DDR3 + my_IP на AXI

Recommended Posts

1. По монстрам Bus2IP и IP2Bus я Вам уже не помогу - последний раз работал в ними года 3 назад и уже все забыл.

 

2. Vivado -> Tools -> "Create and package IP" -> и Next, Next, Next... :-)

 

3. Вам известно, а нам нет. Вы кажется даже не писали, что он к GPIO подключен.

 

Далее, на приложенной картинке в видимом времени транзакции на шине AXI нет от слова вообще.

Да и зачем вам 2 шины? Куда проще своим мастером писать в память видимую Microblaze и смотреть записалось ли.

 

 

1) Но вы уже помогли. Спасибо вам большое. Конечно, самому разбираться необходимо, но ваша помощь, учитывая, что для вас это забытая информация, не оценима:-)

 

2) Хорошо, с вивадо попробую посмотреть что это такое. А это случаем не то же самое что Core Generator IP в ISE, попробую в нём сначала?

 

3) Эм... :05: извините, упустил этот момент.

 

Хм. Как нет...

А у меня зажегся светодиод, кстати :laughing: , оказывается я забыл выставить регистр byte enable (BE) в единицы (и после этого по кнопке всё он загорелся). А вообще да, меня тоже частично смущает то, что я вижу на Chipscope'e.

(А вообще светодиод зажегся после того, как я выставил wr_ack (подтверждение записи), BE, mst_go, addr, length (нужно ли её выставлять еще не уверен, но проверю сегодня). А также два регистра выходных это IP2Bus_MstWr_d и IP2Bus_Data. Но мне кажется, что последний не нужно писать, т.к. это шина может выдавать на выход различные регистры из mst_reg, который в свою очередь представляет собой массив из 16 8-ми разрядных регистров ( в нем регистры статуса, контроля, адреса, BE, mst_go).

 

(Забыл сказать, на скрине последние строки в чипскопе data_out_d и data_out_addr это то, что явыставляю на шину адреса и IP2Bus_MstWr_d, IP2Bus_Data. А вообще меня напрягает, что нет ответа от слейва в виде сигнала M_AXI_BRESP, которое оповещает о нормальной транзакции)

 

Да на самом деле не нужны 2 шины. Одна просто для моргания одним светодиодом. По этой же шине я хотел управлять своим светодиодом с кнопкой. Я разделил их на две разные шины, чтобы убедиться, что по кнопке загорится светодиод. Я сегодня проверю будет ли работать это на одной шине, но я не учитываю то, что нужен арбитр для 2х мастеров на шине, поэтому пока не уверен, что это сработает, а как арбитра настроить, я не знаю :-(

 

В память видимую microblaze'oм? Ого! А подскажите как это сделать? Это было бы гораздо удобнее, чем проверять это через светодиод и чипскоп (особенно учитывая ту проблему, что у меня не работают одновременно chipscope и xmd)

Edited by TimeToSleep

Share this post


Link to post
Share on other sites
Да на самом деле не нужны 2 шины. Одна просто для моргания одним светодиодом. По этой же шине я хотел управлять своим светодиодом с кнопкой. Я разделил их на две разные шины, чтобы убедиться, что по кнопке загорится светодиод. Я сегодня проверю будет ли работать это на одной шине, но я не учитываю то, что нужен арбитр для 2х мастеров на шине, поэтому пока не уверен, что это сработает, а как арбитра настроить, я не знаю :-(

 

В память видимую microblaze'oм? Ого! А подскажите как это сделать? Это было бы гораздо удобнее, чем проверять это через светодиод и чипскоп (особенно учитывая ту проблему, что у меня не работают одновременно chipscope и xmd)

 

Если Вы подключите 2 мастера к одной "колонке" AXI арбитр будет сгенерирован автоматически. Далее просто из своего мастера пишите в любую память на AXI (согласно адресации на шине). Только я смотрю у Вас ее нет - создайте что-то вроде AXI BRAM если не хочется с DDR возиться.

Share this post


Link to post
Share on other sites
Если Вы подключите 2 мастера к одной "колонке" AXI арбитр будет сгенерирован автоматически. Далее просто из своего мастера пишите в любую память на AXI (согласно адресации на шине). Только я смотрю у Вас ее нет - создайте что-то вроде AXI BRAM если не хочется с DDR возиться.

 

Да, действительно. Арбитр автоматически формируется.

Сделал сегодня на одной шине и microblaze и свой gpio (led), который по кнопке зажигается. И, кстати, length не нужно выставлять для нормальной транзакции. IP2Bus_Data тоже не нужен для передачи. Но на нём видимо будет ответ, когда я буду пытаться читать по адресу, это следующая задача.

 

С DDR вроде не так всё просто, поэтому наверно начну с BRAM. Это ведь оно то, что на картинке?

 

BRAM.jpg

Edited by TimeToSleep

Share this post


Link to post
Share on other sites
Далее просто из своего мастера пишите в любую память на AXI (согласно адресации на шине).

 

А можете подсказать как смотреть память, записалось ли туда какое либо значение? По XMD? Он разве не сбросит программу (точнее остановит и сбросит вроде как) на плате?

Или читать посредством своего же мастера?

Еще вопрос по поводу burst передачи. Можно тоже небольшую консультацию. У меня "окно" примерно на 40 тактов 100МГц сигнала на передачу single beat (единичная передача), при меньшем окне передача удачно не заканчивается, что-то подвисает и светодиод больше не реагирует на кнопку, но это вероятно связано с тем, как я строю "свой" протокол (сделанный вручную проще говоря и подгоняемый под стандартный). Насколько я понимаю при burst передаче всё должно происходить значительно быстрее? Или я не прав?

Хочу попытаться реализовать что-то представленное на скрине (думаю, что всё прозрачно понятно на нём)

 


 

 

Что-то BRAM далеко не такой простой. Как писать по шине AWID (которое характеризует ID компонента, как я понял) и WSTRB (это ведь строб? зачем он нужен?) ?

Edited by TimeToSleep

Share this post


Link to post
Share on other sites
А можете подсказать как смотреть память, записалось ли туда какое либо значение? По XMD? Он разве не сбросит программу (точнее остановит и сбросит вроде как) на плате?

Ну написать простую программку на microblaze - UART консоль с командами (например команда "mr" прочитает память и напишет содержимое на консоли).

Что-то BRAM далеко не такой простой. Как писать по шине AWID (которое характеризует ID компонента, как я понял) и WSTRB (это ведь строб? зачем он нужен?) ?

Что-то Вы как-то путаете. Если используете Bus2IP то насколько я помню к AXI напрямую писать ничего не надо. Если непосредственно AXI - вся документация свободно доступна на сайте ARM - читайте и делайте по стандарту - увы, нет другого выхода. Если мешаете все в кучу - как мне кажется ничем хорошим не кончится.

 

Что касается количества тактов - AXI ориентирована на пакетную передачу и накладные расходы на передачу одного байта весьма высоки, вполне может быть 40 тактов. В стандарте хорошо описано (и даже нарисовано :-) что и как происходит.

Share this post


Link to post
Share on other sites
Что-то Вы как-то путаете. Если используете Bus2IP то насколько я помню к AXI напрямую писать ничего не надо. Если непосредственно AXI - вся документация свободно доступна на сайте ARM - читайте и делайте по стандарту - увы, нет другого выхода. Если мешаете все в кучу - как мне кажется ничем хорошим не кончится.

 

 

Здравствуйте.

Да, я вас понял, спасибо.

Я сначала пробовал через Bus2IP, но не получилось, поэтому начал лазить в "потрохах", через которые у меня получилось мигать светодиодом. Дальше, я решил писать через Bus2IP, и у меня выставляется адрес, биты разрешения, длина пакета на выходе мастера, но данных на выходе нет, а при моделировании данные на выходе есть. Никак не могу понять с чем это связано. Необходимо ли управлять еще такими сигналами, как:

 

-- bus2ip_mstrd_rem -- Bus to Ip master read data rem

-- bus2ip_mstrd_sof_n -- Bus to Ip master read start of frame

-- bus2ip_mstrd_eof_n -- Bus to Ip master read end of frame

-- bus2ip_mstrd_src_rdy_n -- Bus to Ip master read source ready

-- bus2ip_mstrd_src_dsc_n -- Bus to Ip master read source dsc

 

-- bus2ip_mstwr_dst_rdy_n -- Bus to Ip master write dest. ready

-- bus2ip_mstwr_dst_dsc_n -- Bus to Ip master write dest. ready

 

При моделировании я использовал такие сигналы, как

Bus2IP_MstRd_src_rdy_n

Bus2IP_MstWr_dst_rdy_n и выставлял их в 0 (т.е. активное).

Но их игнорирование, как и всех сигналов, что перечислил, всё равно позволяет выставить данные на шине ip2bus_mstwr_d

 

Прикладываю скрины моделирования и chipscope'а после загрузки программы на плату. (ip2bus_mstwr_d на скринах выделен)

aaxi_chipscope.jpg

 

aaxi_sim.jpg

 

Share this post


Link to post
Share on other sites
Что-то Вы как-то путаете. Если используете Bus2IP то насколько я помню к AXI напрямую писать ничего не надо. Если непосредственно AXI - вся документация свободно доступна на сайте ARM - читайте и делайте по стандарту - увы, нет другого выхода. Если мешаете все в кучу - как мне кажется ничем хорошим не кончится.

 

Всё работает корректно, кроме srl_fifo_f. При моделировани отдельно от user_logic этот буфер выдаёт данные. Но при моделировании системы он также выдаёт их ,но не в случае загрузки кода на плату.

Подскажите, пожалуйста, может стоит заменить fifo на собственную? Или же лучше подразобраться в этой?

Share this post


Link to post
Share on other sites

Подскажите, пожалуйста, сталкивался ли кто-то с тем, что при симуляции программы всё работает идеально, а при загрузке на плату работа совершенно отличается, сигналы, которые должны быть в активном уровне, находятся в "0", хотя сигналы, управляемые ими, изменяются? Абсолютно не понимаю почему так происходит :05:

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this