1891ВМ12Я 0 31 декабря, 2023 Опубликовано 31 декабря, 2023 · Жалоба Использую Kintex UltraScale XCKU-040 и -060. На обоих наблюдается проблема, которую я раньше не видел, то есть повреждение памяти физически я пока что исключаю. На обоих платах 64 битная память DDR4 которую я пытаюсь использовать на частоте 625, 666 и 800 МГц, стараюсь брать поменьше частоту. Наблюдаю следующую проблему. Пишу некий паттерн (счетчик) из 32 битных слов, сама шина контроллера памяти wdf (использую native интерфейс) - 512 бит. Слова такие 32'h0016_0000 .. 32'h0016_000F, для следующих 512 бит уже 32'h0017_0000 .. 32'h0017_000F, то есть вижу четко что писал и могу понять верно ли оно просто по адресу. Проблема: как пишется не знаю, но читается не всегда верно, причем из 512 бит шины контроллера native, может быть несколько слов иметь практически всегда ошибочные данные, а некоторые части этих 512 бит имеют наоборот очень низкое число ошибок, но никогда не нулевое. Пробовал не записывать а просто читать записанное, то есть записал 1 раз и далее читать по несколько раз. Удивительно, при повторных чтениях число ошибок может даже уменьшаться, но при чтении результаты в целом повторяются, большинство сбоев локализованы в одних и тех же местах. Вероятно чтение неверное. Документация четко говорит - данные валидны только при app_rd_data_valid - приходит строб и я беру данные по нему. Ошибок таймингов в прошивке нет. Что я пробовал: 1) делать тест с отдельным модулем MIG и простым конечным автоматом читать-писать в цикле и выводом в UART 2) пробовал ставить другие совместимые компоненты памяти не 075 а например 083 и 107 спид грейдом 3) пробовал режимы no dm без маски 4) пробовал понижать частоту памяти 5) пробовал задавать побольше тайминги DDR 6) создал проект на базе microblaze и block design чтобы работать с памятью из microblaze по шине AXI - вдруг причина была в этом 7) пробовал играть с резетами - может это и причина но я упустил что то? Что еще можно попробовать, как устранить проблему что чтение идет со сбоями? Калибровка то проходит успешно, значит явно я делаю что то не так, но я уже несколько недель с этим борюсь и не понимаю почему "раньше я умел" а сейчас талант работы с DDR покинул меня... Тайминги - вручную не баловался не менял, всё через FIFO или XPM_CDC. Планирую еще раз запустить моделирование (давно делал). Посмотреть что с app_wdf_end сигналом - я ставлю 1 при каждой записи - корректно же? Пишу ведь рывками, единичными по 512 бит и не более того. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 222 31 декабря, 2023 Опубликовано 31 декабря, 2023 · Жалоба 35 минут назад, 1891ВМ12Я сказал: Ошибок таймингов в прошивке нет. А в топологии платы их точно нет? Что это за плата, насколько проверена её топология (дурят отдельные экземпляры или все подряд)? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DanilinS 4 31 декабря, 2023 Опубликовано 31 декабря, 2023 · Жалоба А тайминги 100% верные? С поправкой на нагрев? У меня были случаи, когда DDR3 прекрасно проходила все тесты "на холодную". И вставала клином при хорошем нагрева FPGA и памяти. Ну или топология остается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Sergey_ 17 1 января Опубликовано 1 января · Жалоба On 12/31/2023 at 5:13 PM, makc said: А в топологии платы их точно нет? Что это за плата, насколько проверена её топология (дурят отдельные экземпляры или все подряд)? +1 Плату с DDR4 полезно проверить: - все сигналы DDR4 имеют хороший опорный слой - тайминги (длины + встроенные длины для byte-lane, ADDR/CMD приходят одновременно на каждую м/с) - могут быть резонансы по питанию на рабочих частотах, пару раз сталкивался лично Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 1 января Опубликовано 1 января · Жалоба 5 hours ago, _Sergey_ said: - могут быть резонансы по питанию на рабочих частотах, пару раз сталкивался лично поясните пожалуйста Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Sergey_ 17 1 января Опубликовано 1 января · Жалоба 6 minutes ago, Maverick_ said: поясните пожалуйста На какой-то частоте Power Delivery Network увеличивает свое сопротивление. Напряжение питания на микросхеме уменьшается, выходя из допустимых пределов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
1891ВМ12Я 0 3 января Опубликовано 3 января · Жалоба On 1/1/2024 at 12:40 AM, DanilinS said: А тайминги 100% верные? С поправкой на нагрев? У меня были случаи, когда DDR3 прекрасно проходила все тесты "на холодную". И вставала клином при хорошем нагрева FPGA и памяти. Ну или топология остается. Делаю тест для двух плат. Первая - отладочная плата HTG-800 трофейная http://www.hitechglobal.com/boards/kintex-ultrascale.htm Вторая плата - уже самодельная. Тоже на Kintex UltraScale На первой покупной были сбои и устранили их тогда, когда осознали что на плате напаяны НЕ ТЕ компоненты что указаны в схеме и используются в тестовом проекте и тогда заработало. На самодельной плате заработало полтора года назад тоже и сразу. То есть схемы проверены. Трагизм ситуации в том, что я не могу понять что я делаю не так, когда переделываю проект заново. Я все уже перебрал варианты. Вижу что записав раз, а потом только читая, я вижу что иногда число ошибок снижается. Значит я точно теряю на чтении. Я нашел что в тестовом примере применяется промежуточный регистр для данных и строба валид - только что проверил с точно таким же дополнительным шагом без дополнительных условий и это не помогло. Сейчас попробую натравить XDC примера на отладочную HTG-800, вдруг я забыл что то делать то, что делает пример. Визуально по коду пока не видна ошибка. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Raven 11 4 января Опубликовано 4 января · Жалоба Уточните, все же есть комбинация платы и проекта Vivado, на которых DDR4 работает хорошо (например, та же HTG-800 с примером от HiTech Global)? А то из ваших постов это неясно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
OttO 0 4 января Опубликовано 4 января · Жалоба А чип один или их несколько на плате референсе и Вашей? Вопрос к чему, если одна микросхема, то там по сути только выровнить проводники. Вопрос топологии при одном чипе не супер важны (ну при условии что все выравнено, соблюдены импедансы и опоры), ну и плюс Вы пробовали понижать частоту, тогда ваще супер странно. А вот использование 4х чипов вынуждает к соблюдению топологии и терминации, плюс моделирование лучше проводить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
1891ВМ12Я 0 4 января Опубликовано 4 января · Жалоба 14 hours ago, Raven said: Уточните, все же есть комбинация платы и проекта Vivado, на которых DDR4 работает хорошо (например, та же HTG-800 с примером от HiTech Global)? А то из ваших постов это неясно. Да, такая комбинация существовала, и для HTG-800 и для самодельной платы, то есть комбинация на которой работало. И я не понимаю почему сейчас перестало, как я подозреваю, читать память без ошибок. Не верю что сразу две платы сломались - это нереально. Пробовал еще сейчас натравить XDC на ddr example сгенерированный - код писали умные люди, а он не заработал на HTG-800 и показал read corrupted на светодиоде. Пробовал делать Block Design с AXI интерфейсом к контроллеру - мало ли я неверно как то работал. Снова не так. Пробовал понижать частоту на самый минимум до 625/633 МГц - не помогло. У меня была еще плата на Kintex 7 официальная, так там была битая память и явно не проходила калибровку - дело ясное. Но у меня сейчас обе платы и HTG-800 и самопальная - обе калибровку проходят. Значит интерфейс верный и рабочий. Тайминги все идеальные, использую FIFO и XPM-CDC а значит задано верно всё везде. Может что то в XDC нужно указать иначе? Попробую тактовый сигнал иной указать как источник для DDR - есть второй генератор 200 на плате. Установил Vivado 2023.1 и его попробую - может вивадо со сбоем что то генерить стала, но я пробовал и вивадо 2018.2/3 на которых когда то работало... Если решу проблему - обязательно тут напишу. Но смущает одно - калибровка то проходит! Где тогда не так, если официальный экзампл даже валится при всей его проходимости калибровке (вижу на светодиоде). P.S. Важно, что на самодельной плате, и 512 бит, максимум ошибок приходится на первые 32 бит в остальные ошибки около нуля - самодельная даже лучше работает если это можно назвать работает. На HTG-800 выбито чуть больше половины шины данных, но в начале и по краям ошибки минимальны. Сколько я ни пытался разводить прошивок - локализация сохраняется. Может надо как то дополнительно навернуть каких то XDC правил? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Raven 11 4 января Опубликовано 4 января · Жалоба 2 hours ago, 1891ВМ12Я said: Да, такая комбинация существовала, и для HTG-800 и для самодельной платы, то есть комбинация на которой работало. И я не понимаю почему сейчас перестало, как я подозреваю, читать память без ошибок. Не верю что сразу две платы сломались - это нереально. И где теперь эти рабочие проекты и их битстримы? Или теперь уже и ровно те самые проекты/битстримы перестали работать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Sergey_ 17 4 января Опубликовано 4 января · Жалоба 4 hours ago, 1891ВМ12Я said: Да, такая комбинация существовала, и для HTG-800 и для самодельной платы, то есть комбинация на которой работало. И я не понимаю почему сейчас перестало, как я подозреваю, читать память без ошибок. Не верю что сразу две платы сломались - это нереально. К работающей прошивке что-то добавлялось? Типа сначала было задействовано 30%, а сейчас 80%.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
1891ВМ12Я 0 5 января Опубликовано 5 января · Жалоба On 1/4/2024 at 9:10 PM, _Sergey_ said: К работающей прошивке что-то добавлялось? Типа сначала было задействовано 30%, а сейчас 80%.. Сейчас я пытаюсь работать с максимально облегченным проектом. И тогда и сейчас стандартный ddr example (генерируется ядром) берет не более 5% ресурсов. Я заметил что если оставить стандартные для теста 100 итераций или даже сделать 500 итераций (вижу что там есть лимит счетчика, его легко можно расширить до 32 бит) - вот 100 и 500 итераций - тест проходит. Заливаю заново - снова тест прошел. Проблема начинается тогда когда итераций несколько тысяч, при том что в симуляции мой тест может успешно пройти все эти, скажем 125 тысяч итераций, стало быть логика верна, а реальная память такой тест не проходит. Даже если делать 16 битный интерфейс (чипы по 16 бит), похоже все микросхемы DDR4 памяти ведут себя одинаково. Понижение частоты не помогает, тайминги и так занижены до невозможности, задержки не помогают. Вот мысль - корректно ли создать свои параметры для памяти? Custom, я уже изучал их формат это CSV файлы. Что если задать больше задержки и больше паузы? Или память не примет что либо, выходящее за ее рамки, заданные в даташитах? On 1/4/2024 at 7:17 PM, Raven said: И где теперь эти рабочие проекты и их битстримы? Или теперь уже и ровно те самые проекты/битстримы перестали работать? Очень боюсь внести путаницу, отладочная плата HTG-800 проверялась только стандартным тестом - калибровка проходила и малое число итераций не выдает ошибки, проблема когда итераций много, значит стандартный тест ложный, не выдерживает буквально несколько тысяч чтений (а мне надо миллиарды). Впрочем и сейчас, даже в штатном проекте, когда мало итераций - все записи и чтения могут быть без ошибок. Вся беда в стабильности работы. Тесты - они быстрее пересобираются, и выявляют те же проблемы. Попробую собрать старый проект и вернуть программную часть. Однако в рабочем проекте по этой части ничего не менялось. И боюсь что проблема проекта уже в PCI - там тоже проблема с которой я бьюсь, на новом процессорном модуле стал шалить PCI и я не могу работать по старому и не могу работать со старым битстримом. Самодельной платы у меня нет, ее забрали как раз. Проверить старое рабочее это правильная идея, но и она проблематична из за других сбоев и из за сбоев аналогичных в памяти. Я не могу там UART попросить подключить для отладки - там невозможно. Плохо... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Sergey_ 17 6 января Опубликовано 6 января · Жалоба Моя мысль простая - задействовано больше ресурсов, увеличилось потребление, просело питание. Там есть допуски по 50мВ. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
1891ВМ12Я 0 7 января Опубликовано 7 января · Жалоба On 1/6/2024 at 10:05 AM, _Sergey_ said: Моя мысль простая - задействовано больше ресурсов, увеличилось потребление, просело питание. Там есть допуски по 50мВ. Температура низкая - ниже 40 градусов, проект заполнен на 5%, беру от мощного источника питания где 6-pin разъем для видеокарты - он превышает потребность отладочной платы при ее максимальной загрузке. Я обнаружил парадоксальную вещь в тесте ddr (стандартный), я его уже обложил светодиодами и UARTами, как только число итераций теста превосходит 740 и становится 750 - всё, идет сбой теста. У меня возникает подозрение что несмотря на опору на ready сигналы, случается рефреш и всё валится. Пробовал ставить manual refresh и соотвественно тест управляет этим сам. Завтра попробую изменить хотя бы немного, сделать это чаще, найти место где управляется manual refresh через специальный порт. Я всегда полагался что рефреш делается сам, и когда оно занято этим, то я просто не получаю свои рэдики и всё становится на паузу пока не отрефрешится. Ранее меня это не подводило, но я уже подозреваю именно рефреш, очень подозрительно точная граница числа тестов с ошибками и без, но радует что все эти 740 транзакций проходят без сбоев, а там много циклов по 512 бит полных. Хоть 20 хоть 30 раз делаю сброс - оно калибруется и запускает тест заново - все 30 раз оно пройдет тест с 740 циклами. А например 750 уже нет хоть 20-30 раз сбрасывать. Вероятно существует плавающая граница между 740 и 750 числом итераций теста. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться