Jump to content

    

Нестабильно работает трансивер Kintex7

Занимаюсь сейчас SATA на плате с Kintex7 и уперся в некоторый тупик - поведение трансивера меняется от ресета к ресету и, чаще всего, не обеспечивает нормальной работы.

Сгенерирован стандартный пример на 3 ГБит/с с минимумом изменений, для процедуры сброса используется встроенный контроллер, т.е. снаружи сброс подается только сигналом soft_reset. Далее я наблюдаю происходящее после сброса, ориентируясь главным образом на признак rxnotintable, говорящий об ошибке на нижнем уровне при 10b/8b-декодировании внутри трансивера (ну и заодно rxdisperr).

 

Я вижу что:

1. Иногда (1 случай из 20) все работает нормально, правда с периодом в минуту-пять-полчаса может проскочить одиночная ошибка (тоже ведь не нормально или как?)

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

 

Будь это моя собственная логика, я бы списал на асинхронщину, клоки/сбросы и т.п. Ну тут все происходит внутри адской коробочки и как быть непонятно.

 

На данный момент я успел проверит следующее:

 

1. Тупой тест с PRBS на базе готового примера через loopback-кабель проходит - то есть линия сама по себе целая. IBERT тест к сожалению запустить не удается. По невыясненным причинам вивада говорит, то debug-ядра внутри проекта нет (или клока нет). Хотя берется готовый пример,а клок тот же, что и в рабочем проекте.

2. Был найден AR# 53364 с указанием какие параметры задавать RX CDR для разных протоколов. Ни к каким видимым эффектам не привело.

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

4. Естественно попробовал разные кабели и несколько жестких дисков.

5. Тайминги в проекте вроде как проходят, но даже если бы не проходили - это все снаружи, а проблемы начинаются непосредственно с приема внутри трансивера.

6. Кое где были упоминания про длительную настройку эквалайзера, которая может мешать начальной процедуре установления соединения. Возможно, но по крайней мере по ее окончании я должен получать из линии символы без ошибок - а сыпятся rxnotintable.

 

 

Может кто-то боролся с похожими проблемами и может навести на след проблемы?

 

Share this post


Link to post
Share on other sites

MMCM сбрасываете вместе с soft_reset? Может забыли подождать пока он залочится?

У меня сбоев в течении нескольких часов к ряду не наблюдается, не должно такого быть. Эластичный буфер включен?

Share this post


Link to post
Share on other sites
MMCM сбрасываете вместе с soft_reset? Может забыли подождать пока он залочится?

У меня сбоев в течении нескольких часов к ряду не наблюдается, не должно такого быть. Эластичный буфер включен?

 

Буферы включены. Со сбросом вроде честно - непосредственно при работе с трансивером MMCM не используется, задействована только частота, приходящая прямо с GTX (linespeed/20, и usrclk и usrclk2 - одинаковая). Впрочем MMCM тоже ставить пробовал (естественно задействуя его lock для сброса) - без разницы.

Share this post


Link to post
Share on other sites

Что за плата? Что за опорный генератор? Как дела обстоят с терминацией (такта и данных)? Используете ли вы FSM для сброса, которая идет с примером к GTX визарду? - были там какие-то заморочки. Можно наверно выложить трансивер сюда на форум.

Share this post


Link to post
Share on other sites

Если плата самодельная, то я бы в первую очередь проверил тактирование. Трансиверы очень критичны к качеству тактового сигнала, если джиттер клока выходит за рамки дозволенного, то будут происходить как раз периодические ошибки или даже потеря линка.

Share this post


Link to post
Share on other sites

Вполне может оказаться что Вы так и не решите эту проблему. Знакомые ребята заложились на Kintex7 и не смогли надежно запустить SATA, даже в усеченном виде, с поддержкой только перекачки данных. Когда стали разбираться и задавать вопросы Xilinx, те тупо открестились что они нигде не сказали, что можно реализовать SATA на Xilinx. И даже на сайте Xilinx нет родных корок SATA, можно найти корку от третьестороннего разработчика, в спецификации есть пунктик "SATA spec validated NO". Я бы постарался не связываться с Kintex и вообще с Xilinx, у них там где то глубоко, не помню в чем, есть засада с трансиверами, которая не позволяет реализовать SATA. Переходите на Altera, там вроде ситуация намного лучше. Не проверял, но навскидку они явно рекламируют свои IPCore SATA.

Edited by silantis

Share this post


Link to post
Share on other sites
Вполне может оказаться что Вы так и не решите эту проблему. Знакомые ребята заложились на Kintex7 и не смогли надежно запустить SATA, даже в усеченном виде, с поддержкой только перекачки данных. Когда стали разбираться и задавать вопросы Xilinx, те тупо открестились что они нигде не сказали, что можно реализовать SATA на Xilinx. И даже на сайте Xilinx нет родных корок SATA, можно найти корку от третьестороннего разработчика, в спецификации есть пунктик "SATA spec validated NO". Я бы постарался не связываться с Kintex и вообще с Xilinx, у них там где то глубоко, не помню в чем, есть засада с трансиверами, которая не позволяет реализовать SATA. Переходите на Altera, там вроде ситуация намного лучше. Не проверял, но навскидку они явно рекламируют свои IPCore SATA.

 

Конечно, люди сталкиваются с проблемами при реализации SATA на Kintex-7, но вроде бы успешно их решают. Есть там не мало тонкостей, но это не значит что нельзя сделать стабильную конфигурацию. тыц

Кстати, надеяться что визард вам все настроит, это сомнительно. На Virtex-6, по крайней мере, пришлось основательно разобраться какой параметр за что отвечает и править руками.

Share this post


Link to post
Share on other sites
Вполне может оказаться что Вы так и не решите эту проблему. Знакомые ребята заложились на Kintex7 и не смогли надежно запустить SATA, даже в усеченном виде, с поддержкой только перекачки данных. Когда стали разбираться и задавать вопросы Xilinx, те тупо открестились что они нигде не сказали, что можно реализовать SATA на Xilinx. И даже на сайте Xilinx нет родных корок SATA, можно найти корку от третьестороннего разработчика, в спецификации есть пунктик "SATA spec validated NO". Я бы постарался не связываться с Kintex и вообще с Xilinx, у них там где то глубоко, не помню в чем, есть засада с трансиверами, которая не позволяет реализовать SATA. Переходите на Altera, там вроде ситуация намного лучше. Не проверял, но навскидку они явно рекламируют свои IPCore SATA.

 

Очень похоже на агитацию за "советскую власть".

 

По делу - вот корки для работы с SATA для Xilinx.

Все ок с ними.

http://www.intelliprop.com/sata-bridge-videos-demos.htm

Кому надо - у меня есть контакты человека из этой конторы.

Share this post


Link to post
Share on other sites
Что за плата? Что за опорный генератор? Как дела обстоят с терминацией (такта и данных)? Используете ли вы FSM для сброса, которая идет с примером к GTX визарду? - были там какие-то заморочки. Можно наверно выложить трансивер сюда на форум.

 

Плата самопадельная, что вносит некоторые опасения. Клоки идут с PLL TI CDC62005. От нее же тактируется много всего еще, в том числе Serial RapidIO 5.0Gbps на той же FPGA (и вроде работает).

Да, использую встроенный FSM для сброса. Изначально рисовал на бумажке по юзергайду, хотел сделать сам - но в итоге то, что генерирует встроенный контроллер совпало с моими представлениями.

Вот с терминацией вопрос хороший оказался. Я стал уже сам смотреть и выяснилось, что схему делали из общих соображений, поставив разделительные конденсаторы по 100 нФ на приемной линии. А в sata просят не более 12 нф, причем ставят с обеих сторон и на приемник и на передатчик. Сейчас коллеги думают как быть... Но у меня сомнения в том, что это корень проблемы...

 

 

Кстати, надеяться что визард вам все настроит, это сомнительно. На Virtex-6, по крайней мере, пришлось основательно разобраться какой параметр за что отвечает и править руками.

 

На счет править руками настройки визарда - пока только RXCDR_CFG, больше не накопал ничего. Остальное либо вещи функциональные, которые вроде и не надо трогать, либо настолько невнятные, что остается только 2^n комбинаций перебирать. Может порекомендуете, какого рода настройки вам пришлось править?

Share this post


Link to post
Share on other sites
Вот с терминацией вопрос хороший оказался. Я стал уже сам смотреть и выяснилось, что схему делали из общих соображений, поставив разделительные конденсаторы по 100 нФ на приемной линии. А в sata просят не более 12 нф, причем ставят с обеих сторон и на приемник и на передатчик. Сейчас коллеги думают как быть... Но у меня сомнения в том, что это корень проблемы...

 

Не забывайте что на такт тоже требуются разделительные конденсаторы по 0,1 мкФ.

 

На счет править руками настройки визарда - пока только RXCDR_CFG, больше не накопал ничего. Остальное либо вещи функциональные, которые вроде и не надо трогать, либо настолько невнятные, что остается только 2^n комбинаций перебирать. Может порекомендуете, какого рода настройки вам пришлось править?

В моем случае была проблема с TXDIFFCTRL. Визард ставил 4'b0000 вместо 4'b1000. Но в этом случае вообще ничего не работало.

 

Убедитесь перед работой что все такты устаканились. При появлении ошибок эластичного буфера его нужно сбросить, иначе может не заработать. Ну и в принципе, не плохо было бы промониторить его работу. Воспринимает ли он ALIGNp...

Share this post


Link to post
Share on other sites
Не забывайте что на такт тоже требуются разделительные конденсаторы по 0,1 мкФ.

 

Да, это есть.

 

В моем случае была проблема с TXDIFFCTRL. Визард ставил 4'b0000 вместо 4'b1000. Но в этом случае вообще ничего не работало.

 

Увы, там по умолчанию уже стоит 1000. Пробовал увеличить - без разницы...

Share this post


Link to post
Share on other sites

Кстати, в даташите пишут что нельзя верить сигналу RXBYTEISALIGNED - это учли?

Share this post


Link to post
Share on other sites
Вполне может оказаться что Вы так и не решите эту проблему. Знакомые ребята заложились на Kintex7 и не смогли надежно запустить SATA, даже в усеченном виде, с поддержкой только перекачки данных. Когда стали разбираться и задавать вопросы Xilinx, те тупо открестились что они нигде не сказали, что можно реализовать SATA на Xilinx. И даже на сайте Xilinx нет родных корок SATA, можно найти корку от третьестороннего разработчика, в спецификации есть пунктик "SATA spec validated NO". Я бы постарался не связываться с Kintex и вообще с Xilinx, у них там где то глубоко, не помню в чем, есть засада с трансиверами, которая не позволяет реализовать SATA. Переходите на Altera, там вроде ситуация намного лучше. Не проверял, но навскидку они явно рекламируют свои IPCore SATA.

Объясните как же SATA 3G у нас работает на Xilinx Virtex6? Причём на древнем отладочнике ML605 много Б/У, с припаянным советскими проводами МГТФ к FMC разъёму SATA коннектором ?

"Родных корок SATA" на сайте нет, потому что и у конкурентов их нету: "Altera's partners developed SATA and SAS IP for both host and device interfaces". На xilinx.com тоже ссылка на сторонних разработчиков, которые за десятки килобаксов барыжат корками. Вообще в целом у Альтеры кол-во платных ядер поболее будет.

 

:bb-offtopic:

А ещё документация у Альтеры написана очень мутно. Недавно захотели выяснить могут ли serdes'ы Arria V работать в DDR режиме, перечитали несколько раз волшебный Handbook - не нашли.

Помнится уважаемый DES00 писал, что Стратихс 4 так не умеет делать, вот и захотели посмотреть не научилась ли Arria V, делать то, что давно умеют делать все FPGA хилых, начиная с Virtex4 (V4,V5,V6,V7,S6,A7,K7).

Даже яндекс про это слышал: http://electronix.ru/forum/index.php?showtopic=94403

Вот и непонятно - толи доки кривые, толи так действительно до сих пор не умеют и боятся сказать прямо об этом.

У хилых такие базовые вещи, как режимы работы сердезов, расписаны досконально.

 

З.Ы. Чуток похоливарили и хватит:)

Share this post


Link to post
Share on other sites
Кстати, в даташите пишут что нельзя верить сигналу RXBYTEISALIGNED - это учли?

 

В смысле вот это?

 

In systems that use the RX OOB block, such as PCIe and SATA, after locking to a valid byte boundary and asserting the RXBYTEISALIGNED signal, the byte align block might occasionally deassert the RXBYTEISALIGNED signal even when there is no change in the byte boundary. In such applications, RXBYTEISALIGNED should not be used as a valid indicator of the change in byte boundary after the first assertion.

 

Ага. Но на практике я такой ситуации пока не наблюдал...

Share this post


Link to post
Share on other sites
Вполне может оказаться что Вы так и не решите эту проблему. Знакомые ребята заложились на Kintex7 и не смогли надежно запустить SATA, даже в усеченном виде, с поддержкой только перекачки данных. Когда стали разбираться и задавать вопросы Xilinx, те тупо открестились что они нигде не сказали, что можно реализовать SATA на Xilinx. И даже на сайте Xilinx нет родных корок SATA, можно найти корку от третьестороннего разработчика, в спецификации есть пунктик "SATA spec validated NO". Я бы постарался не связываться с Kintex и вообще с Xilinx, у них там где то глубоко, не помню в чем, есть засада с трансиверами, которая не позволяет реализовать SATA. Переходите на Altera, там вроде ситуация намного лучше. Не проверял, но навскидку они явно рекламируют свои IPCore SATA.

"Переходи на тёмную сторону, у нас есть печеньки!" (с)

 

У нас SATA отлично работает в Kintex7. Большая часть проблем - собственные ляпы и особенности работы отдельных моделей винчестеров. Но это уже уровень транспортника, к кристаллу не имеет отношения. С физикой вопросов не было.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this