Jump to content

    

Подключение refclk (100 MHz) к Hard PCIe core (Altera)

Требуется совет человека, сталкивавшегося непосредственно или более внимательно, чем я прочитавшего доку: у альтеры в юзергайде на ядро PCIe всюду подразумевается, что refclk приходит на специальный вход трансивера, однако в качестве обязательного требования, что только так и никак иначе (насколько я понимаю английским по белому) это не прописано. По ряду причин есть идея подключить референсный клок через обычные входы FPGA. Попробовал (на Arria II GX) - собирает успешно, что напрямую с клоковых входов, что через PLL. Но как-то боязно... Нет ли у кого опыта на этот счет?

Share this post


Link to post
Share on other sites

По идее надо подключать на отдельный клоковый вход PLL, выделенного для трансиверов.

Share this post


Link to post
Share on other sites

Если речь идет о микросхемах серии Arria 2 GX, то можно подключать как на специальный REFCLK0..n, так и на "обычный вход GCLK" (не REFCLK0..n). Но следует иметь ввиду, что сигнал refclk на разъеме PCIe заходит в ПЛИС как HCSL. Не все "обычные входы GCLK" поддерживают такой стандарт ввода. Если не привязываться именно к PCIe, то трансиверы в микросхемах Arria 2 GX можно запитывать частотой довольно многими способами (REFCLK0..n, GCLK, GCLK --> PLL --> ALTGX). В микросхемах Cyclone 4 GX способ "GCLK --> PLL --> ALTGX" не работает. Способы (REFCLK0..n, GCLK) - проект собирается в Квартусе. Но в железе я использовал только REFCLK0..n

Share this post


Link to post
Share on other sites
у альтеры в юзергайде на ядро PCIe всюду подразумевается, что refclk приходит на специальный вход трансивера, однако в качестве обязательного требования, что только так и никак иначе (насколько я понимаю английским по белому) это не прописано.

Я не понимаю. Зачем вам грабли? Альтера тоже не писала что для PCIe можно использовать только нулевые GBX а не первые. И квартус работал не ругался. Вот только железяка не работала.

Share this post


Link to post
Share on other sites
Я не понимаю. Зачем вам грабли? Альтера тоже не писала что для PCIe можно использовать только нулевые GBX а не первые. И квартус работал не ругался. Вот только железяка не работала.

 

PCIE_REFCLK (100МГц) по идее можно вообще в кристалл не заводить.

Эту частоту можно синтезировать на внутренних PLL и подавать с внутренних линий синхронизации.

У меня так один проект работает, без каких либо проблем.

Да, там есть нюансы с еластичным буфером, но он есть и работает. Главное чтоб опорные частоты не слишком

сильно отличались

Share this post


Link to post
Share on other sites

Благодарю всех за помощь. То, что различные варианты работают в железе - ценная информация. На грабли наступать действительно не хочется... Но у заказчика есть Идея - постараться сделать универсальную платформу, которая сможет выступать как в качестве root point, так и end point (предполагается кабельная версия PCIe). Соответственно, прорабатываются варианты, насколько это реализуемо с практической точки зрения... В режиме endpoint вообще не использовать приходящий клок - мысль тоже интересная. Будем думать...

Share this post


Link to post
Share on other sites

А что мешает поставить отдельный генератор на 100 МГц - вот и будет Вам универсальность.

Share this post


Link to post
Share on other sites
Требуется совет человека, сталкивавшегося непосредственно или более внимательно, чем я прочитавшего доку: у альтеры в юзергайде на ядро PCIe всюду подразумевается, что refclk приходит на специальный вход трансивера, однако в качестве обязательного требования, что только так и никак иначе (насколько я понимаю английским по белому) это не прописано. По ряду причин есть идея подключить референсный клок через обычные входы FPGA. Попробовал (на Arria II GX) - собирает успешно, что напрямую с клоковых входов, что через PLL. Но как-то боязно... Нет ли у кого опыта на этот счет?

 

 

У меня был печальный опыт с такой проблемой, поиск её составил около 2-х недель. Я работал с Serial RapidIO ядром на Xilinx Spartan 6. Области применения PCIe и SRIO почти совпадают, в интернете много сравнений между ними. Так вот, в документации на ядро было также черно по белому сказано, что ЛУЧШЕ прикрутить внешний осциллятор с необходимой частотой, напрямую к сециальным входам аппаратных трансиверов. Для этого пришлось бы делать отдельную плату с осциллятором, поскольку на отладочной плате с ПЛИС его не было. И я решил взять и поделить 200 Мгц через внутренний PLL ПЛИС. С такой архитектурой проект работал без проблем полгода, пока не начили производить отладку моего девайса с DSP. Для теста сделали по loopback гоняли данные. И все пакеты проходили на ура, но когда данные в пакете SRIO были равны значению 0x4A, линк рушился между контроллерами. Конечно ошибку я искал у себя в ПЛИС проекте, потому что ошибиться на С в DSP было более сложно. И 2 недели исправлений проекта и головной боли. Пока ссылка в гугле не раскрыла значение числа 0х4A. Это какой паттерн в шифровании 8/10, и кодируется он 10101010, что вводило рассинхронизацию между трансиверами и они затыкались. Сделали плату с отдельным осциллятором , подсоединили и все заработало.

Share this post


Link to post
Share on other sites
В режиме endpoint вообще не использовать приходящий клок - мысль тоже интересная. Будем думать...

А зачем не использовать приходящий клок ? Ведь ставить свой набортный генератор - это дополнительные расходы.

Share this post


Link to post
Share on other sites
Но у заказчика есть Идея - постараться сделать универсальную платформу, которая сможет выступать как в качестве root point, так и end point

Вы посмотрите сначала, какие ПЛИС имеют внутри PCIe root и сколько они стоят. IMHO не очень хорошая идея: root нужен реже, чем endpoint, и можно существенно сэкономить, сделав endpoint на дешевых чипах, благо endpoint есть даже в Циклонах. А так у вас вся партия будет на дорогих ПЛИС, поддерживающих root.

 

Share this post


Link to post
Share on other sites
Требуется совет человека, сталкивавшегося непосредственно ...

 

Помнится мне, что квартус выдает warning, если клок для Hard IP PCIe заведен не на соответствующий клоковый вход высокоскоростного трансивера.

Уж очень много недосказано в мануале на этот Hard IP PCIe. На форуме альтера очень много косяков описывается, и далеко не все они есть в errdata.

Вот поверьте опыту - не раз я спорил со схемотехниками по поводу можно/нельзя. И всегда, когда нарушались даже не строгие требования разработчика ПЛИС(хоть Altera, хоть Xilinx) приходилось потом либо выкручиваться, либо переделывать плату.

Использование стороннего клока теоретически может и возможно, но кто даст гарантию на то, что это заработает в печке на максимальной скорости при загрузке кристалла более 85%(когда ПЛИС будет максимально греться).

Share this post


Link to post
Share on other sites
Помнится мне, что квартус выдает warning, если клок для Hard IP PCIe заведен не на соответствующий клоковый вход высокоскоростного трансивера.

Уж очень много недосказано в мануале на этот Hard IP PCIe. На форуме альтера очень много косяков описывается, и далеко не все они есть в errdata.

Вот поверьте опыту - не раз я спорил со схемотехниками по поводу можно/нельзя. И всегда, когда нарушались даже не строгие требования разработчика ПЛИС(хоть Altera, хоть Xilinx) приходилось потом либо выкручиваться, либо переделывать плату.

Использование стороннего клока теоретически может и возможно, но кто даст гарантию на то, что это заработает в печке на максимальной скорости при загрузке кристалла более 85%(когда ПЛИС будет максимально греться).

Что мешает поставить клок генератор и завести родной клок. Вообще, а в чем проблемы завести клок с мамки? Там два входа для клока.

 

ЗЫ, главное в железном PCIe, это то что оно работает ТОЛЬКО с нулевым, или первыми четырмя, или со всеми восемью трансиверами. Завести PCIе на первый блок в котором 4е штуки трансиверов, работать не будет. И девятый квартус на это не ругался.

Share this post


Link to post
Share on other sites
ЗЫ, главное в железном PCIe, это то что оно работает ТОЛЬКО с нулевым, или первыми четырмя, или со всеми восемью трансиверами. Завести PCIе на первый блок в котором 4е штуки трансиверов, работать не будет. И девятый квартус на это не ругался.

Quartus II Mapping Issue with a PCIe x1 Interface Using the Hard IP

Block

The Quartus II software version 10.0 SP1 and prior releases incorrectly allowed logical

channel 0 to be placed in any physical channel for the PCIe Gen1 x1 interface with the

hard IP block. For correct operation with the hard IP block, logical channel 0 must be

placed in physical channel 0.

This issue is fixed in the Quartus II software version 10.1.

 

Источник: es_cyciv Errata Sheet.pdf

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