|
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 слова), которые будут потеряны при первой пересылке. При дальнейших пересылках всё работает как положено по датащиту.
--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
|
|
|
|
3 страниц
1 2 3 >
|
 |
Ответов
(1 - 36)
|
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 по компонентам в стандартном репозитории - ничего подходящего не предложило. С логикой реади из датамувера удалось разобраться после моих разъяснений?
--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
|
|
|
|
|
Dec 18 2014, 05:53
|
Местный
  
Группа: Свой
Сообщений: 236
Регистрация: 28-06-13
Из: Минск, Беларусь
Пользователь №: 77 312

|
Цитата(Krys @ Dec 18 2014, 07:36)  С логикой реади из датамувера удалось разобраться после моих разъяснений? Благодарю за ответы. Большое спасибо с логикой разобрался. Если все верно, то алгоритм буду пробывать такой: наполняю фифо, по сигналу записи последнего слова в фифо запускаю cmd_valid, и вычитываю burst датамувером. Пока вопросов больше нет. Думаю позже появятся Большое спасибо за помощь!
|
|
|
|
|
Dec 18 2014, 13:03
|
Местный
  
Группа: Свой
Сообщений: 236
Регистрация: 28-06-13
Из: Минск, Беларусь
Пользователь №: 77 312

|
Цитата(Krys @ Dec 18 2014, 09:29)  Пожалуйста ) Обращайтесь ) Описанный алгоритм вроде должен работать. не могу запустить сам датамувер. Он гад сигнал реди на 4 такта выдает, а потом мертвым сном... При этом просто сброс, он опять 4 такта и спать.. Достаточным условием для его запуска по мануалу: дата_валид и запись в регистр cmd (ready + valid). Может что то еще?
Сообщение отредактировал farbius - Dec 18 2014, 16:28
|
|
|
|
|
Dec 19 2014, 03:42
|

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

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

|
Цитата(Krys @ Dec 19 2014, 06:42)  Советую снять чипскопом осциллограммы на его ногах, примерно как у меня в первом посте. Тогда будет понятнее. Ну и сюда киньте, вместе подумаем ) Командный интерфейс посмотреть, статусный. Та ли команда. Какой статус. Может память не готова принять, её сигналы тоже надо глянуть.
Как Вы его не можете запустить? Т.е. что вы контролируете, чтобы констатировать, что он запущен?
Описанные Вами условия запуска вроде верны, ничего больше припомнить не могу. Прошу прощения за проверку экстрасенсорных способностей))) итак, в схемантике проект имеет вид
модули фифо из коргена, data_logic создает поток на частоте 10 МГц, который пишу в фифо, cmd, my_soc модуль xps проекта, и reset для управления латентностью ресетов в соответствии с датащитом на датамувер. в xps проект имеет вид
то есть только датамувер и ддр. Порты датамувера
мастер кидаю на шину с интерфейсом axi4, а слейвы s2mm и cmd (в асинхронном режиме) выкинул наружу. Осцилограммы как у вас я получил (с преславутыми 4-мя тактами). Однако, если сигнал s2mm valid ноль, а потом перекинуть на один, то картина следующая:
реди датамувера падает в ноль, и даже cmd_valid не исправляет ситуацию. Почему при наличии сигнала данных на входе датамувера, он сообщает что "не реди"? Вот это и не понятно. Что ему еще не хватает?  бьюсь уже третий день...
|
|
|
|
|
Dec 22 2014, 03:41
|

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

|
Пытаюсь разобраться по мере возможностей. Дайте пожалуйста *.mhs файл. Или кусок с датамувером, но лучше весь, чтобы не было лишних вопросов. А что за "схемаНтик" Вы упоминаете и используете? Не могу не начать холивар ))) Очень тяжело по этой схеме смотреть, что куда. Я понимаю, что схемы улучшают наглядность, но тогда надо хоть провода между блоками прокинуть, а то без проводов это ещё хуже текстового файла в плане наглядности. По текстовику хоть поиском пробежаться можно и подсветка одинаковых слов есть. А тут чото смотрю в книгу - вижу фигу ))) Ладно, это всё офтопик, не собираюсь Вас учить, как выполнять и оформлять проекты, просто личное мнение. Но, может, тогда выложите текстовый исходник на HDL, который получается в результате разбора схемы средой? Было бы легче анализировать. Разрешение картинки к стати маловато, сложно догадываться, что за сигналы подписаны и размыты, особенно постороннему человеку. Непонятно это: Цитата(farbius @ Dec 19 2014, 12:22)  Однако, если сигнал s2mm valid ноль, Назовите пожалуйста полное имя сигнала, а то их там одинаковых куча - запутаешься. И это непонятно: Цитата(farbius @ Dec 19 2014, 12:22)  а потом перекинуть на один, то картина следующая: Что значит перекинуть на 1. И что за сигналы tkeep (я просто не знаю что это, не работал никогда с ними, у меня без них)? Вам они зачем? Может их не использовать? И я смотрю у интерфейс статуса никуда не подключен? В этом запросто может быть причина. Он должен быть подключен к фифо, при том фифо должно быть действующее, т.е. дающее реади когда надо. Это необязательно в том случае, если фифо есть внутри датамувера, но без *.mhs я не знаю, поставили ли Вы его туда. Короче нужна информация. Пока буду ждать, дальше уже не знаю, чо рыть.
--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
|
|
|
|
|
Dec 22 2014, 17:51
|
Местный
  
Группа: Свой
Сообщений: 236
Регистрация: 28-06-13
Из: Минск, Беларусь
Пользователь №: 77 312

|
Цитата(Krys @ Dec 22 2014, 06:41)  Пытаюсь разобраться по мере возможностей. Дайте пожалуйста *.mhs файл. Или кусок с датамувером, но лучше весь, чтобы не было лишних вопросов. А что за "схемаНтик" Вы упоминаете и используете? Не могу не начать холивар ))) Очень тяжело по этой схеме смотреть, что куда. Приветствую. Большое спасибо за внимание. Продолжаю бороться с ентим датамувером. Пересобрал свой проект. В XPS проект имеет вид
добавил стрим ядро, которое данные берет из фифо и по команде выдает датамуверу для трансфера вот мой .mhs Код # ############################################################################## # Created by Base System Builder Wizard for Xilinx EDK 14.3 Build EDK_P.40xd # Mon Dec 22 18:24:46 2014 # Target Board: xilinx.com ml605 Rev D # Family: virtex6 # Device: xc6vlx240t # Package: ff1156 # Speed Grade: -1 # ############################################################################## PARAMETER VERSION = 2.1.0
PORT ddr_memory_we_n = ddr_memory_we_n, DIR = O PORT ddr_memory_ras_n = ddr_memory_ras_n, DIR = O PORT ddr_memory_odt = ddr_memory_odt, DIR = O PORT ddr_memory_dqs_n = ddr_memory_dqs_n, DIR = IO, VEC = [0:0] PORT ddr_memory_dqs = ddr_memory_dqs, DIR = IO, VEC = [0:0] PORT ddr_memory_dq = ddr_memory_dq, DIR = IO, VEC = [7:0] PORT ddr_memory_dm = ddr_memory_dm, DIR = O, VEC = [0:0] PORT ddr_memory_ddr3_rst = ddr_memory_ddr3_rst, DIR = O PORT ddr_memory_cs_n = ddr_memory_cs_n, DIR = O PORT ddr_memory_clk_n = ddr_memory_clk_n, DIR = O, SIGIS = CLK PORT ddr_memory_clk = ddr_memory_clk, DIR = O, SIGIS = CLK PORT ddr_memory_cke = ddr_memory_cke, DIR = O PORT ddr_memory_cas_n = ddr_memory_cas_n, DIR = O PORT ddr_memory_ba = ddr_memory_ba, DIR = O, VEC = [2:0] PORT ddr_memory_addr = ddr_memory_addr, DIR = O, VEC = [12:0] PORT RESET = RESET, DIR = I, SIGIS = RST, RST_POLARITY = 1 PORT CLK_P = CLK, DIR = I, DIFFERENTIAL_POLARITY = P, SIGIS = CLK, CLK_FREQ = 200000000 PORT CLK_N = CLK, DIR = I, DIFFERENTIAL_POLARITY = N, SIGIS = CLK, CLK_FREQ = 200000000 PORT clk10MHz = clock_generator_0_CLKOUT4, DIR = O, SIGIS = CLK, CLK_FREQ = 10000000 PORT ARESETN = master_strm_0_M_AXIS_ARESETN, DIR = I PORT TREADY = master_strm_0_S_AXIS_TREADY, DIR = O PORT TDATA = master_strm_0_S_AXIS_TDATA, DIR = I, VEC = [31:0] PORT TLAST = master_strm_0_S_AXIS_TLAST, DIR = I PORT TVALID = master_strm_0_S_AXIS_TVALID, DIR = I PORT cmdsts_awclk = axi_datamover_0_m_axis_s2mm_cmdsts_awclk, DIR = I, SIGIS = CLK PORT cmdsts_aresetn = axi_datamover_0_m_axis_s2mm_cmdsts_aresetn, DIR = I, SIGIS = RST PORT cmd_tvalid = axi_datamover_0_s_axis_s2mm_cmd_tvalid, DIR = I PORT cmd_tready = axi_datamover_0_s_axis_s2mm_cmd_tready, DIR = O PORT cmd_tdata = axi_datamover_0_s_axis_s2mm_cmd_tdata, DIR = I, VEC = [71:0] PORT sts_tvalid = axi_datamover_0_m_axis_s2mm_sts_tvalid, DIR = O PORT sts_tready = axi_datamover_0_m_axis_s2mm_sts_tready, DIR = I PORT sts_tdata = axi_datamover_0_m_axis_s2mm_sts_tdata, DIR = O, VEC = [7:0] PORT sts_tkeep = axi_datamover_0_m_axis_s2mm_sts_tkeep, DIR = O PORT sts_tlast = axi_datamover_0_m_axis_s2mm_sts_tlast, DIR = O PORT mm2s_aresetn = axi4_0_S_m_axi_mm2s_aresetn, DIR = I, SIGIS = RST PORT s2mm_aresetn = axi4_0_S_m_axi_s2mm_aresetn, DIR = I, SIGIS = RST PORT clk100MHz = clk_100_0000MHzMMCM0, DIR = O, SIGIS = CLK, CLK_FREQ = 100000000
BEGIN proc_sys_reset PARAMETER INSTANCE = proc_sys_reset_0 PARAMETER HW_VER = 3.00.a PARAMETER C_EXT_RESET_HIGH = 1 PORT Dcm_locked = proc_sys_reset_0_Dcm_locked PORT Slowest_sync_clk = clk_100_0000MHzMMCM0 PORT Interconnect_aresetn = proc_sys_reset_0_Interconnect_aresetn PORT Ext_Reset_In = RESET END
BEGIN clock_generator PARAMETER INSTANCE = clock_generator_0 PARAMETER HW_VER = 4.03.a PARAMETER C_CLKIN_FREQ = 200000000 PARAMETER C_CLKOUT0_FREQ = 100000000 PARAMETER C_CLKOUT0_GROUP = MMCM0 PARAMETER C_CLKOUT1_FREQ = 200000000 PARAMETER C_CLKOUT1_GROUP = MMCM0 PARAMETER C_CLKOUT2_FREQ = 400000000 PARAMETER C_CLKOUT2_GROUP = MMCM0 PARAMETER C_CLKOUT3_FREQ = 400000000 PARAMETER C_CLKOUT3_GROUP = MMCM0 PARAMETER C_CLKOUT3_BUF = FALSE PARAMETER C_CLKOUT3_VARIABLE_PHASE = TRUE PARAMETER C_CLKOUT4_FREQ = 10000000 PORT LOCKED = proc_sys_reset_0_Dcm_locked PORT CLKOUT0 = clk_100_0000MHzMMCM0 PORT RST = RESET PORT CLKOUT3 = clk_400_0000MHzMMCM0_nobuf_varphase PORT CLKOUT2 = clk_400_0000MHzMMCM0 PORT CLKOUT1 = clk_200_0000MHzMMCM0 PORT CLKIN = CLK PORT PSCLK = clk_200_0000MHzMMCM0 PORT PSEN = psen PORT PSINCDEC = psincdec PORT PSDONE = psdone PORT CLKOUT4 = clock_generator_0_CLKOUT4 END
BEGIN axi_interconnect PARAMETER INSTANCE = axi4_0 PARAMETER HW_VER = 1.06.a PORT interconnect_aclk = clk_100_0000MHzMMCM0 PORT INTERCONNECT_ARESETN = proc_sys_reset_0_Interconnect_aresetn END
BEGIN axi_v6_ddrx PARAMETER INSTANCE = DDR3_SDRAM PARAMETER HW_VER = 1.06.a PARAMETER C_MEM_PARTNO = MT41J64M16XX-15E PARAMETER C_DM_WIDTH = 1 PARAMETER C_DQS_WIDTH = 1 PARAMETER C_DQ_WIDTH = 8 PARAMETER C_MMCM_EXT_LOC = MMCM_ADV_X0Y8 PARAMETER C_NDQS_COL0 = 1 PARAMETER C_NDQS_COL1 = 0 PARAMETER C_S_AXI_BASEADDR = 0xa4000000 PARAMETER C_S_AXI_HIGHADDR = 0xa7ffffff PARAMETER C_INTERCONNECT_S_AXI_MASTERS = axi_datamover_0.M_AXI_S2MM BUS_INTERFACE S_AXI = axi4_0 PORT ddr_we_n = ddr_memory_we_n PORT ddr_ras_n = ddr_memory_ras_n PORT ddr_odt = ddr_memory_odt PORT ddr_dqs_n = ddr_memory_dqs_n PORT ddr_dqs_p = ddr_memory_dqs PORT ddr_dq = ddr_memory_dq PORT ddr_dm = ddr_memory_dm PORT ddr_reset_n = ddr_memory_ddr3_rst PORT ddr_cs_n = ddr_memory_cs_n PORT ddr_ck_n = ddr_memory_clk_n PORT ddr_ck_p = ddr_memory_clk PORT ddr_cke = ddr_memory_cke PORT ddr_cas_n = ddr_memory_cas_n PORT ddr_ba = ddr_memory_ba PORT ddr_addr = ddr_memory_addr PORT clk_rd_base = clk_400_0000MHzMMCM0_nobuf_varphase PORT clk_mem = clk_400_0000MHzMMCM0 PORT clk = clk_200_0000MHzMMCM0 PORT clk_ref = clk_200_0000MHzMMCM0 PORT PD_PSEN = psen PORT PD_PSINCDEC = psincdec PORT PD_PSDONE = psdone END
BEGIN axi_datamover PARAMETER INSTANCE = axi_datamover_0 PARAMETER HW_VER = 3.00.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_S2MM_STSCMD_IS_ASYNC = 1 PARAMETER C_S2MM_STSCMD_FIFO_DEPTH = 4 BUS_INTERFACE M_AXI_S2MM = axi4_0 BUS_INTERFACE S_AXIS_S2MM = master_strm_0_M_AXIS PORT m_axi_s2mm_aclk = clk_100_0000MHzMMCM0 PORT m_axis_s2mm_cmdsts_awclk = axi_datamover_0_m_axis_s2mm_cmdsts_awclk PORT m_axis_s2mm_cmdsts_aresetn = axi_datamover_0_m_axis_s2mm_cmdsts_aresetn PORT s_axis_s2mm_cmd_tvalid = axi_datamover_0_s_axis_s2mm_cmd_tvalid PORT s_axis_s2mm_cmd_tready = axi_datamover_0_s_axis_s2mm_cmd_tready PORT s_axis_s2mm_cmd_tdata = axi_datamover_0_s_axis_s2mm_cmd_tdata PORT m_axis_s2mm_sts_tvalid = axi_datamover_0_m_axis_s2mm_sts_tvalid PORT m_axis_s2mm_sts_tready = axi_datamover_0_m_axis_s2mm_sts_tready PORT m_axis_s2mm_sts_tdata = axi_datamover_0_m_axis_s2mm_sts_tdata PORT m_axis_s2mm_sts_tkeep = axi_datamover_0_m_axis_s2mm_sts_tkeep PORT m_axis_s2mm_sts_tlast = axi_datamover_0_m_axis_s2mm_sts_tlast END
BEGIN master_strm PARAMETER INSTANCE = master_strm_0 PARAMETER HW_VER = 1.00.a BUS_INTERFACE M_AXIS = master_strm_0_M_AXIS PORT ACLK = clk_100_0000MHzMMCM0 PORT S_AXIS_TREADY = master_strm_0_S_AXIS_TREADY PORT S_AXIS_TDATA = master_strm_0_S_AXIS_TDATA PORT S_AXIS_TLAST = master_strm_0_S_AXIS_TLAST PORT S_AXIS_TVALID = master_strm_0_S_AXIS_TVALID END результаты функционального моделирования в modelsim на рисунке виден реади на 4 такта
далее после наполнения фифо считываю данные датамувером
почему сигнал реади (s_axi_s2mm_tready) при появлении сигнала данных (s_axi_s2mm_tvalid) принимает нулевое значение???? То есть при наличии данных и изменении содержимого cmd регистра датамувер пишет после нескольких тактов s_axi_s2mm_tvalid что не готов их принять??? вот картина если я отключаю проверку s_axi_s2mm_tready
стрим пакеты идут, но естественно не далее датамувера, т.к. s_axi_s2mm_tready не проверяется....
|
|
|
|
|
Dec 22 2014, 19:01
|
Местный
  
Группа: Свой
Сообщений: 236
Регистрация: 28-06-13
Из: Минск, Беларусь
Пользователь №: 77 312

|
просмотрел форум xilinx, ваш пост и сопутствующие посты. Обнаружил следующее Цитата The product guide (PG022) for axi_datamover_v4_02_a incorrectly defines bit 23 in Table 3-2 and Table 3-5 as Type and describes as RSVD. The correct description of the bit is as follows:
Bit 23, when set to 1, enables incremental AXI4 transactions. When it is set to 0, it allows Keyhole (FIXED address AXI4) transactions.
The behavior of this bit has changed from v3.00a to v4.02a..This issue will be fixed in 2013.1 documentation. у меня этот бит всегда ноль. В этом случае инкрементации не происходит, может поэтому после записи одного 32 разрядного слова датамувер переключает реади в ноль? завтра обязательно проверю
|
|
|
|
|
Dec 23 2014, 05:05
|

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

|
Цитата(farbius @ Dec 23 2014, 01:01)  у меня этот бит всегда ноль. В этом случае инкрементации не происходит, может поэтому после записи одного 32 разрядного слова датамувер переключает реади в ноль? завтра обязательно проверю Да, я держал в голове эту проблему, но у Вас не она. Это когда большой объём пересылки в несколько burst, то все бёрсты летят в те же адреса, что и первый бёрст, затирая прерыдущие бёрсты ))) Но у вас то даже один бёрст не хочет передаваться )) Совет: длинные исходники нужно прятать под теги codebox (хотя их и нет в стандартном наборе инструментов), модераторы мне обращали на это внимание. Посмотрел этот файл *.mhs, там у Вашего датамувера фифо команд 4 слова. Теоретически статус интерфейс наверное может в таком случае быть не подключенным. Сейчас посмотрел свой файл, у меня фифо команд 1 слово, т.е. его фактически нет. Попробуйте так. Может, доходить команды будут до датамувера, а не застаиваться в фифо. Только интерфейс статуса надо обязательно подключить, дать реади ему. Цитата(farbius @ Dec 22 2014, 23:51)  результаты функционального моделирования в modelsim на рисунке виден реади на 4 такта Да, тут ничего необычного, всё в рамках уже полученных объяснений от Xilinx. Единственное, что на первой осциллограмме у Вас обе тактовых имеют одинаковую частоту, а на следующей уже разную. Это говорит о том, что Вы проводили эксперименты при разных условиях, а это неправильно (хотя в данном случае вряд ли в этом причина). Цитата(farbius @ Dec 22 2014, 23:51)  почему сигнал реади (s_axi_s2mm_tready) при появлении сигнала данных (s_axi_s2mm_tvalid) принимает нулевое значение???? То есть при наличии данных и изменении содержимого cmd регистра датамувер пишет после нескольких тактов s_axi_s2mm_tvalid что не готов их принять??? Ну а что тут такого? Вы похоже, так и не поняли логику этой недокументированной фичи, которая является главным топиком в этой ветке ))) Попробуйте ещё раз перечитать или задавайте вопросы конкретно. Реади принимает нулевое значение не сразу, а только спустя 4 такта, т.е. успевает скушать 4 слова - всё как надо, всё как описано в первом сообщении. И по осциллограммам видно, что Вы не даёте данные в стрим датамувера, пока не пошлёте ему команду. Предлагаю попробовать естественным образом сделать (это может и не излечит проблему, но хотя бы придаст наглядности). Естественным для фифо я считаю, что Ваше фифо (которое даёт стрим датамуверу) уже заранее выставляет valid, ещё до всяких команд датамуверу, т.е. как в нём есть, что выдавать наружу, так и валид выставляется. А вот команду Вы даёте в датамувер только тогда, когда посчитаете, что фифо заполнен до достаточного уровня, для чего надо мониторить шину заполненности фифо. Кроме того предлагаю для наглядности оба сброса датамувера подсоединить к одному источнику, чтобы не было желания предполагать, что разница моментов сброса как-то влияет. Да и на одну тактовую можно для начала перейти в домене датамувера. Т.е. Вы можете оставить командный интерфейс асинхронным, но подать тактовую ту же самую, что и на интерфейс данных. А вообще может даже лучше для простоты пока отказаться от асинхронного интерфейса. Чтобы не ломать голову лишними причинами. И ещё у Вас используется сигнал tlast я смотрю. Предлагаю для начала его не использовать, и пересылать такие команды, чтобы датамувер на ласт не обращал внимания. У меня в начале в этом была загвоздка. А потом я понял, что ласт мне вообще не нужен, только лишняя логика. Цитата(farbius @ Dec 22 2014, 23:51)  почему сигнал реади (s_axi_s2mm_tready) ... при появлении сигнала данных (s_axi_s2mm_tvalid) ... ... после нескольких тактов s_axi_s2mm_tvalid ... вот картина если я отключаю проверку s_axi_s2mm_tready ... s_axi_s2mm_tready не проверяется.... Вот Вы пишете s_axi_s2mm, а на самом деле наверняка должно быть s_axi s_s2mm. Я потому и просил приводить полное имя сигнала, т.к. это разные вещи. _axi_ - это полная шина, которая идёт от датамувера к интерконнекту и далее в память. А _axis_ - это сигналы стрима. Их важно отличать. И ещё Вы ничего не рассказали про сигнал tkeep, зачем он Вам и вообще что он делает.
--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
|
|
|
|
|
Dec 24 2014, 03:11
|
Местный
  
Группа: Свой
Сообщений: 236
Регистрация: 28-06-13
Из: Минск, Беларусь
Пользователь №: 77 312

|
Цитата(Krys @ Dec 23 2014, 08:05)  Вот Вы пишете s_axi_s2mm, а на самом деле наверняка должно быть s_axis_s2mm. Я потому и просил приводить полное имя сигнала, т.к. это разные вещи. _axi_ - это полная шина, которая идёт от датамувера к интерконнекту и далее в память. А _axis_ - это сигналы стрима. Их важно отличать. безусловно речь идет s_axis_s2mm Цитата(Krys @ Dec 23 2014, 08:05)  Ну а что тут такого? Вы похоже, так и не поняли логику этой недокументированной фичи, которая является главным топиком в этой ветке ))) Попробуйте ещё раз перечитать или задавайте вопросы конкретно. Реади принимает нулевое значение не сразу, а только спустя 4 такта, т.е. успевает скушать 4 слова - всё как надо, всё как описано в первом сообщении. попробовал сначала передать 4 слова и далее поток. Ситуация не изменилась. Цитата(Krys @ Dec 23 2014, 08:05)  И по осциллограммам видно, что Вы не даёте данные в стрим датамувера, пока не пошлёте ему команду. Предлагаю попробовать естественным образом сделать (это может и не излечит проблему, но хотя бы придаст наглядности). Естественным для фифо я считаю, что Ваше фифо (которое даёт стрим датамуверу) уже заранее выставляет valid, ещё до всяких команд датамуверу, т.е. как в нём есть, что выдавать наружу, так и валид выставляется. А вот команду Вы даёте в датамувер только тогда, когда посчитаете, что фифо заполнен до достаточного уровня, для чего надо мониторить шину заполненности фифо. не совсем ясно. Логика проекта следующая: стрим ядро (мастер стрим для s2mm датамувера) получает валид от фифо как только началось наполнение, но реади в фифо для стрима не передает. Ждет пока фифо наполнится(запись в фифо происходит на меньшей частоте чем считывание). Это позволяет перейти от медленного клока потока к клоку для записи в ДДР, те буферизация. При считывании мастер стрим дает фифо сигнал реади, и стрим пошел в s2mm датамувера. Если так не делать, то поток будет на медленной частоте подаваться в датамувер. Тогда в составе датамувера должно быть фифо для накопления burst для трансфера. Очень может быть загвоздка в этом моменте. Как только внутреннее фифо датамувера наполняется, происходит трансфер. Размер фифо выставляется в настройках датамувера (burst size). Задумывался об этом... Цитата(Krys @ Dec 23 2014, 08:05)  И ещё у Вас используется сигнал tlast я смотрю. Предлагаю для начала его не использовать, и пересылать такие команды, чтобы датамувер на ласт не обращал внимания. У меня в начале в этом была загвоздка. А потом я понял, что ласт мне вообще не нужен, только лишняя логика. вы имеете в виду состав команды в cmd регистре, при которой датамувер не обращает внимание на ласт сигнал? не совсем ясно... Цитата(Krys @ Dec 23 2014, 08:05)  И ещё Вы ничего не рассказали про сигнал tkeep, зачем он Вам и вообще что он делает. tkeep я сейчас не использую. Но вообще сигнал выставляет стробы побайтной записи/считывания на AXI4 (побайтная адресация ).
|
|
|
|
|
Dec 24 2014, 04:43
|

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

|
Цитата(farbius @ Dec 24 2014, 09:11)  безусловно речь идет s_axis_s2mm Внимательнее ) Запутать собеседника можно капитально ) Цитата(farbius @ Dec 24 2014, 09:11)  попробовал сначала передать 4 слова и далее поток. Ситуация не изменилась. Теперь мне не совсем ясно данное предложение. Т.е. Вы двумя раздельными командами датамуверу сначала дали дали команду переслать 4 слова, а затем другой командой оставшиеся? Я предлагаю вообще не разделять на первые 4 слова и на всё остальное. Если следовать логике, которую я описывал выше и которую я считаю стандартной для фифо, то валид на выходе из фифо в датамувер будет сразу, как только есть хоть одно слово для передачи. Но датамувер их есть не должен, пока не дана команда. И реади он без команды не выставит (исключение - первые 4 слова). Цитата(farbius @ Dec 24 2014, 09:11)  не совсем ясно. Логика проекта следующая: стрим ядро (мастер стрим для s2mm датамувера) получает валид от фифо Мне непонятно, что Вы подразумеваете под стрим ядром и что под фифо? Я понимаю так: есть генератор медленной последовательности, которая подключена к фифо (у Вас это называется фифо для стрима). Фифо буферизирует и отдаёт пачки в датамувер. Стрим ядро это тот самый генератор медленной последовательности? Или стрим ядро - это датамувер + память + AXI Interconnect? Цитата(farbius @ Dec 24 2014, 09:11)  При считывании мастер стрим дает фифо сигнал реади, и стрим пошел в s2mm датамувера. Вы применяете термин мастер стрим, фифо для стрима, датамувер. Предлагаю не запутывать самопридуманными терминами, где это не надо. Очень тяжело распутывать )) Судя по данному предложению, сигнал реади даёт датамувер в направлении вашего "фифо для стрима"? Если я правильно распутал... Цитата(farbius @ Dec 24 2014, 09:11)  Если так не делать, то поток будет на медленной частоте подаваться в датамувер. Я понимаю, что "если так не делать..." нужно фифо - однозначно, с этим никто не спорит, это буфер для согласования скоростей. В Вашей терминологии это "фифо для стрима". Цитата(farbius @ Dec 24 2014, 09:11)  Тогда в составе датамувера должно быть фифо для накопления burst для трансфера. Очень может быть загвоздка в этом моменте. Как только внутреннее фифо датамувера наполняется, происходит трансфер. Размер фифо выставляется в настройках датамувера (burst size). Задумывался об этом... Это только когда C_S2MM_INCLUDE_SF = 1. У Вас не так. Да и у меня тоже. И работает. Причина не в этом. Экспериментально проверено, что если команда на передачу началась, а в стриме ничего нет, то датамувер блокирует всю шину AXI в DDR до окончания передачи. Чтобы блокировки не произошло, и другие устройства могли иметь доступ к памяти, в случае C_S2MM_INCLUDE_SF = 0 пользователь сам должен следить, чтобы в фифо, откуда будет выдаваться стрим на датамувер, имело достаточно данных, чтобы провести полную пересылку числа байтов, указанных в команде датамувера. Цитата(farbius @ Dec 24 2014, 09:11)  вы имеете в виду состав команды в cmd регистре, при которой датамувер не обращает внимание на ласт сигнал? не совсем ясно... Ага. Короче я пока запутался в Вашей терминологии, поэтому не понимаю состав устройств. И из-за этого до конца не понимаю логику работы, совпадает ли она с той, которую я называю естественной для фифо. Если не совпадает, то буду ещё раз заострять на этом внимание и пытаться Вас склонить к этой логике )) Ну короче жду разъяснений.
--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
|
|
|
|
|
Dec 24 2014, 05:21
|
Местный
  
Группа: Свой
Сообщений: 236
Регистрация: 28-06-13
Из: Минск, Беларусь
Пользователь №: 77 312

|
Цитата(Krys @ Dec 24 2014, 07:43)  Мне непонятно, что Вы подразумеваете под стрим ядром и что под фифо? Я понимаю так: есть генератор медленной последовательности, которая подключена к фифо (у Вас это называется фифо для стрима). Фифо буферизирует и отдаёт пачки в датамувер. Стрим ядро это тот самый генератор медленной последовательности? Или стрим ядро - это датамувер + память + AXI Interconnect? для разъяснения привожу собранный в xps проект
итак, ddr + axi4 + datamover + master_strm (user IP или мой мастер стрим) master_strm подключен к datamover как мастер (M_AXIS) для s2mm через интерфейс axi stream, slave порты (S_AXIS) выведены "наружу" и подключены к выходу fifo (там где происходит буферизация потока). на вход fifo подключен генератор медленной последовательности. Цитата(Krys @ Dec 24 2014, 07:43)  Вы применяете термин мастер стрим, фифо для стрима, датамувер. Предлагаю не запутывать самопридуманными терминами, где это не надо. Очень тяжело распутывать )) Судя по данному предложению, сигнал реади даёт датамувер в направлении вашего "фифо для стрима"? Если я правильно распутал... Прошу прощения за запутанность)) сигнал реади для fifo формирует master_strm по наполнению fifo. По этому сигналу данные из fifo потоком через master_strm подаются на вход datamover s_axis_s2mm_tdata. То есть master_srm я использую как мастер стрима для s_axis_s2mm моего datamover. Это позволяет контролировать наполнение fifo. До этого делал иначе: просто выводил сигналы s_axis_s2mm (_tvalid, _tlast, _tready ...) наружу и прикручивал к ним генератор медленной последовательности. Цитата(Krys @ Dec 24 2014, 07:43)  Это только когда C_S2MM_INCLUDE_SF = 1. У Вас не так. Да и у меня тоже. И работает. Причина не в этом. Экспериментально проверено, что если команда на передачу началась, а в стриме ничего нет, то датамувер блокирует всю шину AXI в DDR до окончания передачи. Чтобы блокировки не произошло, и другие устройства могли иметь доступ к памяти, в случае C_S2MM_INCLUDE_SF = 0 пользователь сам должен следить, чтобы в фифо, откуда будет выдаваться стрим на датамувер, имело достаточно данных, чтобы провести полную пересылку числа байтов, указанных в команде датамувера. за разъяснение отдельное спасибо.
Сообщение отредактировал farbius - Dec 24 2014, 05:22
|
|
|
|
|
Dec 24 2014, 07:23
|

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

|
Цитата(farbius @ Dec 24 2014, 11:21)  для разъяснения привожу собранный в xps проект Вот мне показалось странным, что командный интерфейс у Вас как-то не так называется. У меня вот так:
Как у Вас так получилось сделать такое название? В этом не может быть ошибки или подвоха? Цитата(farbius @ Dec 24 2014, 11:21)  итак, ddr + axi4 + datamover + master_strm (user IP или мой мастер стрим) master_strm подключен к datamover как мастер (M_AXIS) для s2mm через интерфейс axi stream, slave порты (S_AXIS) выведены "наружу" и подключены к выходу fifo (там где происходит буферизация потока). на вход fifo подключен генератор медленной последовательности. Спасибо, стало понятнее, но не совсем. Вопросы: получается, что фифо находится за пределами проекта XPS? Генератор медленного потока тоже за пределами? Тогда полностью непонятно, зачем вообще нужна корка master_strm? Что она делает, какую функцию? По моим соображениям реально для работы нужны: память естественно, датамувер, фифо, генератор медленной последовательности. Всё. Зачем же master_strm? Можете ли выложить его потроха? Ну и так объяснить словами. Я понимаю, если бы просто фифо обернуть в User IP Core для XPS. Но у Вас-то фифо как я понял снаружи. Тогда не понимаю. Цитата(farbius @ Dec 24 2014, 11:21)  сигнал реади для fifo формирует master_strm по наполнению fifo. По этому сигналу данные из fifo потоком через master_strm подаются на вход datamover s_axis_s2mm_tdata. Вот тут тем более непонятно, пока я не осилю, что за зверь этот master_strm. Цитата(farbius @ Dec 24 2014, 11:21)  То есть master_srm я использую как мастер стрима для s_axis_s2mm моего datamover. Это позволяет контролировать наполнение fifo. А разве сам фифо не является источником (ну это и есть мастер) данных для датамувера? Зачем ещё какую-то прокладку между ними? Объясните, пожалуйста, как это позволяет контролировать наполнение? У меня наполнение контролируется, как я писал ранее, по шине заполненности фифо. При превышении порога даётся команда датамуверу на передачу того числа байт, которое лежит в фифо на момент превышения порога. Никаких прокладок. Цитата(farbius @ Dec 24 2014, 11:21)  До этого делал иначе: просто выводил сигналы s_axis_s2mm (_tvalid, _tlast, _tready ...) наружу и прикручивал к ним генератор медленной последовательности. это Вы назвали сигналы чьи? Сигналы датамувера? Да, если напрямую прицепить к медленному генератору без фифо, то надо в датамувере включать C_S2MM_INCLUDE_SF = 1, чтобы внутри датамувера копилось необходимое для бёрста количество. Тоже неплохое решение. Я бы наверное его даже применил у себя. Но, пока с Вами не начал разбирать Вашу проблему, не догадался до этого ))) Не городил бы лишних сущностей в виде отдельного фифо )) Цитата(farbius @ Dec 24 2014, 11:21)  за разъяснение отдельное спасибо. Всегда пожалуйста. Вот видите, и мне было полезно напрячь мозги. Как написал выше, разобрался заодно с режимом C_S2MM_INCLUDE_SF = 1 ))
--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
|
|
|
|
|
Dec 24 2014, 08:36
|
Местный
  
Группа: Свой
Сообщений: 236
Регистрация: 28-06-13
Из: Минск, Беларусь
Пользователь №: 77 312

|
Цитата(Krys @ Dec 24 2014, 10:23)  Как у Вас так получилось сделать такое название? В этом не может быть ошибки или подвоха? я работаю в ise 14.3 а Вы в 14.7. Поэтому у меня версия датамувера 3.0 в отличии от Вашей 4.05))) В остальном все точно также) Цитата(Krys @ Dec 24 2014, 10:23)  Спасибо, стало понятнее, но не совсем. Вопросы: получается, что фифо находится за пределами проекта XPS? Генератор медленного потока тоже за пределами? совершенно верно Цитата(Krys @ Dec 24 2014, 10:23)  Тогда полностью непонятно, зачем вообще нужна корка master_strm? Что она делает, какую функцию? По моим соображениям реально для работы нужны: память естественно, датамувер, фифо, генератор медленной последовательности. Всё. Зачем же master_strm? Можете ли выложить его потроха? Ну и так объяснить словами. Я понимаю, если бы просто фифо обернуть в User IP Core для XPS. Но у Вас-то фифо как я понял снаружи. Тогда не понимаю. я использую внешнее фифо сгенеренное coregen'ом, fifo выбрал с интерфейсом axi (а не традиционным как в Вашем случае) для согласования с аналогичным интерфейсом корки master_strm. Можно было и просто обернуть фифо. Но я использовал внешнее: обернуть как я делал до этого с user IP для axi4 или axi_light интерфейсов для user IP с интерфейсом stream не получилось, а разбираться времени пожалел, поэтому пошел по пути наименьшего сопротивления))) На самом деле это не критично: интерфейс все равно один и тот же)) Так вот master_strm как я сказал выше, контролирует наполнение фифо и соединяет это фифо со стрим интерфейсом датамувера. Цитата(Krys @ Dec 24 2014, 10:23)  А разве сам фифо не является источником (ну это и есть мастер) данных для датамувера? Зачем ещё какую-то прокладку между ними? Объясните, пожалуйста, как это позволяет контролировать наполнение? У меня наполнение контролируется, как я писал ранее, по шине заполненности фифо. При превышении порога даётся команда датамуверу на передачу того числа байт, которое лежит в фифо на момент превышения порога. Никаких прокладок. прокладка контролирует заполненность фифо, и дает команду датамуверу на передачу того числа байт, которое лежит в фифо. Команда в виде сигнала s_axis_s2mm_tvalid. Сигнал '1' пока фифо не выгрузит последнее слово. Потом ждем наполнения и снова '1' для выгрузки фифо.... А тут и проблема, когда s_axis_s2mm_tvalid = '1' , s_axis_s2mm_tready перекидывается датамувером в ноль.... Цитата(Krys @ Dec 24 2014, 10:23)  это Вы назвали сигналы чьи? Сигналы датамувера? Да, если напрямую прицепить к медленному генератору без фифо, то надо в датамувере включать C_S2MM_INCLUDE_SF = 1, чтобы внутри датамувера копилось необходимое для бёрста количество. Тоже неплохое решение. Я бы наверное его даже применил у себя. Но, пока с Вами не начал разбирать Вашу проблему, не догадался до этого ))) Не городил бы лишних сущностей в виде отдельного фифо )) сигналы s_axis_s2mm_ (tlast, tvalid, tdata...) это сигналы стрим интерфейса датамувера
вариант "напрямую" для меня тоже более привлекателен и я рассматривал его изначально. Не совсем понятно с наличием внутреннего фифо датамувера. В даташите сказано про режим C_S2MM_INCLUDE_SF, еще я предполагал что количество байт параметром burst_size регулирует размер внутреннего фифо, но теперь понимаю, что в датамувере не фифо, а скорее всего обычный счетчик количества байт (режим C_S2MM_INCLUDE_SF исключение).
|
|
|
|
|
Dec 24 2014, 10:45
|

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

|
Цитата(farbius @ Dec 24 2014, 14:36)  я работаю в ise 14.3 а Вы в 14.7. Поэтому у меня версия датамувера 3.0 в отличии от Вашей 4.05))) Вы бы ещё MaxPlusII выкопали и в нём работали ))) Не проще ли чем искать баги в среде, которая устарела, для начала перейти к среде, в которой у других работает хотя бы это? Я бы вот с удовольствием вообще на виваду пересел, в ней ещё новее есть датамувер, но спартан6 не позволяет... Цитата(farbius @ Dec 24 2014, 14:36)  я использую внешнее фифо сгенеренное coregen'ом, fifo выбрал с интерфейсом axi (а не традиционным как в Вашем случае) для согласования с аналогичным интерфейсом корки master_strm. Можно было и просто обернуть фифо. Но я использовал внешнее: обернуть как я делал до этого с user IP для axi4 или axi_light интерфейсов для user IP с интерфейсом stream не получилось, а разбираться времени пожалел, поэтому пошел по пути наименьшего сопротивления))) Ну фифо с акси или без это совершенно не важно, что оборачивать. У меня в проекте есть такой и такой фифо. Почему не получилось обернуть стрим? Это же куда проще перечисленных Вами полного акси и лайта. Там работы максимум на час обернуть. Если хотите - могу и с этим помочь (обернуть). Можете выложить исходник от master_strm? Правильно ли я понимаю, что АБСОЛЮТНО ВСЕ сигналы стрима Ваш master_strm просто прокидывает со входа на выход без вмешательства? Короче что гадать, дайте исходник, там будет видно ) Я всё же продолжаю думать, что master_strm лишний, если он не оборачивает фифо. В таком случае, если Вы подаёте в XPS стримовский вход на master_strm через внешние порты, то с таким же успехом можно подать этот стрим из внешнего для XPS фифо через порты напрямую на датамувер. Логику контроля наполненности фифо можно конечно оставить в master_strm, но как-то это тем более будет нелогично: лишняя сущность, трудности с обёртыванием в корку логики, когда её можно просто оставить за пределами XPS, а команды на датамувер так же передавать через порты, как и сам стрим данных. Цитата(farbius @ Dec 24 2014, 14:36)  вариант "напрямую" для меня тоже более привлекателен и я рассматривал его изначально. Не совсем понятно с наличием внутреннего фифо датамувера. В даташите сказано про режим C_S2MM_INCLUDE_SF, еще я предполагал что количество байт параметром burst_size регулирует размер внутреннего фифо, но теперь понимаю, что в датамувере не фифо, а скорее всего обычный счетчик количества байт (режим C_S2MM_INCLUDE_SF исключение). Я поначалу думал точно так же )) Режим C_S2MM_INCLUDE_SF это не просто исключение, а такая же равновесная фича, а не редко встречающееся малозначительное дополнение. Т.е. фифо может быть, а может и не быть.
--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
|
|
|
|
|
Dec 25 2014, 08:09
|
Местный
  
Группа: Свой
Сообщений: 236
Регистрация: 28-06-13
Из: Минск, Беларусь
Пользователь №: 77 312

|
Цитата(Krys @ Dec 24 2014, 13:45)  Ну фифо с акси или без это совершенно не важно, что оборачивать. У меня в проекте есть такой и такой фифо. Почему не получилось обернуть стрим? Это же куда проще перечисленных Вами полного акси и лайта. Там работы максимум на час обернуть. Если хотите - могу и с этим помочь (обернуть). Буду очень признателен за помощь)) В случаях с axi4 и axi4 light я просто создал user IP, а затем модифицировал файл user_logic.vhd. При создании своей корки для стрима, такой алгоритм не прокатил: корка становиться уже не стрим. Полагаю нужно далее ручками редактировать mpd, pao и т.д. файлы? Далее копать не стал. Цитата(Krys @ Dec 24 2014, 13:45)  Можете выложить исходник от master_strm? Правильно ли я понимаю, что АБСОЛЮТНО ВСЕ сигналы стрима Ваш master_strm просто прокидывает со входа на выход без вмешательства? Короче что гадать, дайте исходник, там будет видно ) совершенно верно, только при опрокидывании происходит пауза для наполнения фифо. Пробывал и без этой прокладки: просто выход фифо соединил с s_axis_s2mm интерфейсом. Уже без ожидания наполнения фифо. Результат не изменился: теже 4 байта и затем сброс сигнала реади..(( Скачал 14.7 версию. Буду пробовать заново
|
|
|
|
|
Dec 25 2014, 10:05
|

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

|
Цитата(farbius @ Dec 25 2014, 14:09)  Полагаю нужно далее ручками редактировать mpd, pao и т.д. файлы? Далее копать не стал. Вам просто нужен примерчик как шаблон.
axi_stream_data_width_converter_v2_00_a.rar ( 2.14 килобайт )
Кол-во скачиваний: 42Я там вырезал потроха, чтобы меня не поругали за разглашение исходников. Но обёрточка вся есть, внутри напишите своё и всё. Если что задавайте конкретные вопросы. Цитата(farbius @ Dec 25 2014, 14:09)  совершенно верно, только при опрокидывании происходит пауза для наполнения фифо Вот и не совершенно, раз, судя по Вашим словам, в стрим вмешивается логика, делающая паузу для наполнения фифо. Под прокидыванием я имел в виду не Опрокидывание ))) , а пробрасывание, т.е. прямое подключение входа и выхода. Проброс сигналов, протаскивание напрямую, без логики. Цитата(farbius @ Dec 25 2014, 14:09)  Скачал 14.7 версию. Буду пробовать заново Давайте Вы всё сделаете по-человечески, удалите ненужные прокладки, сделаете, если надо, стримовские корки, выложите исходники и осциллограммы для нового проекта - тогда будем разбираться заново.
--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
|
|
|
|
|
Dec 25 2014, 10:13
|
Местный
  
Группа: Свой
Сообщений: 236
Регистрация: 28-06-13
Из: Минск, Беларусь
Пользователь №: 77 312

|
Цитата(Krys @ Dec 25 2014, 13:05)  Вот и не совершенно, раз, судя по Вашим словам, в стрим вмешивается логика, делающая паузу для наполнения фифо. Под прокидыванием я имел в виду не Опрокидывание ))) , а пробрасывание, т.е. прямое подключение входа и выхода. Проброс сигналов, протаскивание напрямую, без логики. благодарю за шаблон, обязательно разберусь. прямое подключение есть, только корка стрим мастера (т.н. прокладка) вычитывает фифо после наполнения (т.е. весь burst), если без нее (так тоже делал), то фифо будет работать так: слово пришло, слово ушло. Корка СТрим мастер сначала ждет наполнения а потом вычитывает. Вообщем переделаю проект в новой версии среды, там видно будет.
|
|
|
|
|
Dec 25 2014, 11:19
|

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

|
Цитата(farbius @ Dec 25 2014, 16:13)  прямое подключение есть Прямое подключение только шины tdata или вообще всего стрима, включая сигналы tvalid и tready? Цитата(farbius @ Dec 25 2014, 16:13)  корка стрим мастера (т.н. прокладка) вычитывает фифо после наполнения (т.е. весь burst) Если вычитывает прокладка - значит вмешивается, значит подключение через логику. Если прокладка не вмешивается - значит вычитывает не прокладка, а датамувер. Цитата(farbius @ Dec 25 2014, 16:13)  если без нее (так тоже делал), то фифо будет работать так: слово пришло, слово ушло Не согласен. Без прокладки данные будут копиться в вашем внешнем фифо. Датамувер находится без команды, он ничего не будет читать. Поэтому "слово ушло" не будет. Будет только "слово пришло" (по отношению к внешнему фифо). Затем пользователь мониторит наполненность фифо, и, если она выше порога, даёт команду датамуверу.
--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
|
|
|
|
|
Dec 25 2014, 12:30
|
Местный
  
Группа: Свой
Сообщений: 236
Регистрация: 28-06-13
Из: Минск, Беларусь
Пользователь №: 77 312

|
Цитата(Krys @ Dec 25 2014, 14:19)  Прямое подключение только шины tdata или вообще всего стрима, включая сигналы tvalid и tready? всего стрима. Моя корка была сделана также как у вас. Сигналы m_axis корки заведены на s_axis_s2mm, а сигналы s_axs - выведены наружу к фифо. Интерфейс у всех естественно стрим. Цитата(Krys @ Dec 25 2014, 14:19)  Затем пользователь мониторит наполненность фифо, и, если она выше порога, даёт команду датамуверу. Дать команду датамуверу -- значит записать слово в cmd регистр (то есть подать сигнал cmd_tvalid = '1')? Вообщем, сейчас разбираюсь в ise 14.7. Уже с мертвой точки сдвинулся: датамувер вычитывает адрес записи данных на шину с axi4. То есть датамувер начал общаться с шиной. разбираюсь далее, по окончанию отпишусь... Благодарю за ответы!
|
|
|
|
|
Dec 26 2014, 03:02
|

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

|
Цитата(farbius @ Dec 25 2014, 18:30)  всего стрима Ну хорошо, действительно всего стрима. Значит неверно вот это Ваше утверждение: Цитата корка стрим мастера (т.н. прокладка) вычитывает фифо после наполнения (т.е. весь burst) Раз прямое подключение, значит вычитывает датамувер, прокладка вообще не при делах, внутри неё лишь провода прокидываются со входа на выход. Запутываете )) Цитата(farbius @ Dec 25 2014, 18:30)  Дать команду датамуверу -- значит записать слово в cmd регистр (то есть подать сигнал cmd_tvalid = '1')? Ага. Ну и на шине cmd_tdata соответствующая правильная команда должна присутствовать в момент cmd_tvalid = '1'. Успехов!
--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|