|
AXI DataMover (S2MM) сразу после сброса готов принять 4 слова данных из стрима, хотя никакой команды на это ещё не было, как я понимаю, он сразу после сброса не должен держать Ready в 1 |
|
|
|
Dec 3 2014, 04:58
|

Гуру
     
Группа: Свой
Сообщений: 2 002
Регистрация: 17-01-06
Из: Томск, Россия
Пользователь №: 13 271

|
Здравствуйте. Такая вот проблема. AXI DataMover (S2MM) сразу после сброса готов принять 4 слова данных из стрима, хотя никакой команды на это ещё не было, как я понимаю, он сразу после сброса не должен держать Ready в 1, пока не поступит команда. Вот осциллограммы из ChipScope Analyzer:
Так выглядит описание в файле *.mhs: CODE BEGIN axi_datamover PARAMETER INSTANCE = axi_datamover_y PARAMETER HW_VER = 4.02.a PARAMETER C_INCLUDE_MM2S = 0 PARAMETER C_INCLUDE_S2MM = 1 PARAMETER C_INCLUDE_S2MM_DRE = 0 PARAMETER C_S2MM_BTT_USED = 23 PARAMETER C_S2MM_INCLUDE_SF = 0 PARAMETER C_S2MM_BURST_SIZE = 256 PARAMETER C_INCLUDE_S2MM_STSFIFO = 1 PARAMETER C_S2MM_STSCMD_FIFO_DEPTH = 1 PARAMETER C_S2MM_STSCMD_IS_ASYNC = 1 PARAMETER C_M_AXI_S2MM_ID_WIDTH = 3 PARAMETER C_S2MM_ADDR_PIPE_DEPTH = 4 BUS_INTERFACE M_AXI_S2MM = axi4_0 BUS_INTERFACE S_AXIS_S2MM_CMD = axi_dma_ctrl_y_M_AXIS_CMD BUS_INTERFACE M_AXIS_S2MM_STS = axi_datamover_y_M_AXIS_S2MM_STS BUS_INTERFACE S_AXIS_S2MM = axi_stream_fft_core_0_Y_AXIS PORT m_axi_s2mm_aclk = clk_75_0000MHzPLL0 PORT m_axis_s2mm_cmdsts_aresetn = DIP_Switches_4Bits_TRI_I[0] PORT m_axi_s2mm_aresetn = DIP_Switches_4Bits_TRI_I[0] PORT m_axis_s2mm_cmdsts_awclk = axi_dma_ctrl_y_axis_aclk_0
END Я использовал плату SP-605 со SPARTAN-6. Софт - ISE 14.7 (Planahead + XPS). Чтобы нагляднее продемонстрировать проблему я специально перевёл датамувер в режим асинхронных команд, чтобы был дополнительный сброс (на всякий случай). Все сбросы датамувера я подключил к DIP-Switch на отладочной плате, и захватил осциллограммы сразу после снятия сброса. Хотя проблема проявляется и без всего перечисленного, но не так наглядно. Кто-нибудь с таким сталкивался? Как лечить? Пока я делаю программный обход этой проблемы, добавляя в стрим избыточные данные (те самые 4 слова), которые будут потеряны при первой пересылке. При дальнейших пересылках всё работает как положено по датащиту.
--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
|
|
|
|
|
Dec 5 2014, 13:44
|

Гуру
     
Группа: Свой
Сообщений: 2 002
Регистрация: 17-01-06
Из: Томск, Россия
Пользователь №: 13 271

|
Цитата(Corvus @ Dec 5 2014, 18:21)  На форуме xilinx натыкался на описание этой проблемы, но решения там так и не нашли. Покажите плиз Цитата(farbius @ Dec 5 2014, 14:55)  Скажите вы данные сразу в порты DM кидаете? Я имею ввиду S2MM (tkeep, tvalid, tready ...) и cmd регистр? Извините, не понял вопроса. Данные на мастере стрима уже готовы, ждут, пока им дадут реди. Реди даёт датамувер. Но датамуверу ещё не дали команду, он находился в сбросе. Затем сброс убрали, а он уже сразу же скушал 4 слова, при том без какой-либо команды. Т.е. реади 4 такта держал.
--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
|
|
|
|
|
Dec 10 2014, 04:36
|

Гуру
     
Группа: Свой
Сообщений: 2 002
Регистрация: 17-01-06
Из: Томск, Россия
Пользователь №: 13 271

|
Цитата(Corvus @ Dec 8 2014, 14:47)  Но если не трудно, напишите в тех.поддержку Xilinx Готово: http://forums.xilinx.com/t5/Embedded-Proce...ter/td-p/550684Цитата(Corvus @ Dec 8 2014, 14:47)  баг же реально присутствует. Как выяснилось, это не баг, а недокументированная фича ))) Т.е. с этим жить можно, просто надо знать, как обходить.
--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
|
|
|
|
|
Dec 11 2014, 03:56
|

Гуру
     
Группа: Свой
Сообщений: 2 002
Регистрация: 17-01-06
Из: Томск, Россия
Пользователь №: 13 271

|
А, нет, потом дописали, мол, глаза разуйте, всё документировано. Правда не в той версии датамувера. Но всё же это говорит о том, что им видимо уже на это жаловались, и они включили описание такого поведения для следующих версий датамувера. Но у меня то предыдущая версия. И это версия датамувера, а не версия документа. Поэтому я не могу просто взять и читать документацию на самую свежую версию датамувера, т.к. в общем случае поведение разных версий датамуверов может быть разное, и то, что документировано в последней версии, может чисто физически не иметь место в предыдущих версиях... Индусы не понимают что ли, что эту фичу нужно документировать не только для последней версии датамувера, а и для всех ранних, где это наблюдается? )))
--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
|
|
|
|
|
Dec 17 2014, 08:19
|
Местный
  
Группа: Свой
Сообщений: 236
Регистрация: 28-06-13
Из: Минск, Беларусь
Пользователь №: 77 312

|
Цитата(Krys @ Dec 5 2014, 16:44)  Извините, не понял вопроса. Данные на мастере стрима уже готовы, ждут, пока им дадут реди. Реди даёт датамувер. Но датамуверу ещё не дали команду, он находился в сбросе. Затем сброс убрали, а он уже сразу же скушал 4 слова, при том без какой-либо команды. Т.е. реади 4 такта держал. подскажите пожалуйста как организовали стрим в датамувер и из него в MM? Использую датамувер для заполнения ДДР . Включил его в режиме FULL для S2MM с асинхронным command регистром. Сделал мастером на шине, слейв соответственно ДДР. Из датамувера наружу вывел ноги cmd, sts регистров, и s2mm_ tvalid, s2mm_tdata, tready, tlast, tkeep датамувера. На эти ноги буду вешать фифо. Далее как только фифо full и датамувер ready данные посылаю в ДДР по адресу указанному в cmd регистре. пока проблемы с запуском датамувера. Просто делаю сброс по всем ресетам, должен по идее наблюдать сигнал ready от датамувера. Сигнал появляется на пару тактов и пропадает. Идеологию понимаю так: есть реади из датамувера, даю ему валид, он вычитывает burst.
|
|
|
|
|
Dec 17 2014, 09:16
|

Гуру
     
Группа: Свой
Сообщений: 2 002
Регистрация: 17-01-06
Из: Томск, Россия
Пользователь №: 13 271

|
Цитата(farbius @ Dec 17 2014, 14:19)  подскажите пожалуйста как организовали стрим в датамувер и из него в MM? Ну лучше бы Вам конкретизировать вопрос )) Моя корка на выходе имеет фифошку по идеологии стрима (по желанию можно взять готовую AXI-Stream FIFO из CoreGen'а, но у меня обычная, т.к. необходимо конвертировать разрядность, а та не умеет. Главное любая из них должна быть в режиме FWFT). Цитата(farbius @ Dec 17 2014, 14:19)  Использую датамувер для заполнения ДДР . Включил его в режиме FULL для S2MM с асинхронным command регистром. Сделал мастером на шине, слейв соответственно ДДР. Из датамувера наружу вывел ноги cmd, sts регистров, и s2mm_ tvalid, s2mm_tdata, tready, tlast, tkeep датамувера. На эти ноги буду вешать фифо. Ну у меня тоже DDR, всё точно так же. Единственное: tkeep это для чего сигнал? Я его чото не использовал. Ещё смущает последовательность описанных действий: Цитата(farbius @ Dec 17 2014, 14:19)  как только фифо full и датамувер ready данные посылаю в ДДР по адресу указанному в cmd регистре. Если я правильно понял. Вы хотите дождаться ready от датамувера, а затем посылать ему команду на пересылку? Это неправильно, он без команды не даст реади. Исключение - по сбросу 4 такта. Цитата(farbius @ Dec 17 2014, 14:19)  пока проблемы с запуском датамувера. Просто делаю сброс по всем ресетам, должен по идее наблюдать сигнал ready от датамувера. Сигнал появляется на пару тактов и пропадает. Точно на пару? Должно на 4 судя по эпюрам в моём первом посте. И это не "должно" (как Вы пишете), а "так получилось" (недокументированная фича), т.е. это противоречит логике дальнейшей работы. Поэтому если "должно" соответствует Вашей логике, то она неправильная. Попробуйте разобраться повторно. Если что - спрашивайте конкретные вопросы - постараюсь ответить. Цитата(farbius @ Dec 17 2014, 14:19)  Идеологию понимаю так: есть реади из датамувера, даю ему валид, он вычитывает burst. Это утверждение верно. Но у меня судя по наблюдениям не всегда полный бёрст вычитывает, иногда меньше почему-то. Может я хочу сильно много. Поставил максимально возможный для установки - 256 слов.
--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
|
|
|
|
|
Dec 17 2014, 10:41
|
Местный
  
Группа: Свой
Сообщений: 236
Регистрация: 28-06-13
Из: Минск, Беларусь
Пользователь №: 77 312

|
Цитата(Krys @ Dec 17 2014, 12:16)  Ну лучше бы Вам конкретизировать вопрос )) Моя корка на выходе имеет фифошку по идеологии стрима (по желанию можно взять готовую AXI-Stream FIFO из CoreGen'а, но у меня обычная, т.к. необходимо конвертировать разрядность, а та не умеет. Главное любая из них должна быть в режиме FWFT). Вопрос такой: есть поток данных по 32 разряда, частота например 10 МГц, необходимо этот поток последовательно записать в ДДР (64 Мб). как можно сделать? мой вариант такой: Для проекта собираю в xps ддр слейв, и мастер датамувер. Для перехода с клокового домена потока в клоковый домен системы (ддр + дм), как я понимаю необходимо фифо. Фифо имеет вход "наружу", т.е. на запись потока, и выход в датамувер. Я пока вывел наружу ноги дата мувера: валид, реади, дата и др. Сам фифо буду делать вне XPS. Если я вас правильно понял?, варианты с фифо могут быть: -- coregen ядро (выход прикручивать к дата муверу с "наружи") -- в ise создавать самому (выход прикручивать к дата муверу с "наружи") -- должно быть готовое фифо в xps (поглядываю в сторону этого варианта, ноги ядра в stream дата мувера "внутри", и ноги наружу). Цитата(Krys @ Dec 17 2014, 12:16)  Точно на пару? Должно на 4 судя по эпюрам в моём первом посте. И это не "должно" (как Вы пишете), а "так получилось" (недокументированная фича), т.е. это противоречит логике дальнейшей работы. Поэтому если "должно" соответствует Вашей логике, то она неправильная. Попробуйте разобраться повторно. Если что - спрашивайте конкретные вопросы - постараюсь ответить. все верно: на 4 такта как в начале темы.
|
|
|
|
|
Dec 18 2014, 04:36
|

Гуру
     
Группа: Свой
Сообщений: 2 002
Регистрация: 17-01-06
Из: Томск, Россия
Пользователь №: 13 271

|
Цитата(farbius @ Dec 17 2014, 16:41)  Вопрос такой: есть поток данных по 32 разряда, частота например 10 МГц, необходимо этот поток последовательно записать в ДДР (64 Мб). как можно сделать? мой вариант такой: Для проекта собираю в xps ддр слейв, и мастер датамувер. Для перехода с клокового домена потока в клоковый домен системы (ддр + дм), как я понимаю необходимо фифо. Фифо имеет вход "наружу", т.е. на запись потока, и выход в датамувер. Я пока вывел наружу ноги дата мувера: валид, реади, дата и др. Сам фифо буду делать вне XPS. Если я вас правильно понял?, варианты с фифо могут быть: -- coregen ядро (выход прикручивать к дата муверу с "наружи") -- в ise создавать самому (выход прикручивать к дата муверу с "наружи") -- должно быть готовое фифо в xps (поглядываю в сторону этого варианта, ноги ядра в stream дата мувера "внутри", и ноги наружу). Данные утверждения все верные. Небольшие комментарии: Цитата(farbius @ Dec 17 2014, 16:41)  -- в ise создавать самому (выход прикручивать к дата муверу с "наружи") Думаю асинхронное фифо городить самому - неблагодарное занятие. Синхронные - ещё куда ни шло... Лучше взять готовую корку из коргена, кучу времени сэкономите. Цитата(farbius @ Dec 17 2014, 16:41)  -- должно быть готовое фифо в xps (поглядываю в сторону этого варианта, ноги ядра в stream дата мувера "внутри", и ноги наружу). Я такую не находил, взял AXI FIFO из коргена и обернул как User IP Core для XPS. Сейчас ещё раз прошёлся поиском по слову FIFO по компонентам в стандартном репозитории - ничего подходящего не предложило. С логикой реади из датамувера удалось разобраться после моих разъяснений?
--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|