|
Cyclone V завести все трансиверы |
|
|
|
Nov 21 2016, 10:11
|

Местный
  
Группа: Свой
Сообщений: 285
Регистрация: 10-12-04
Из: Earth
Пользователь №: 1 437

|
Возможно ли завести одновременно все 9 трансиверов (каждый в режиме tx/rx), находящихся в пятом циклоне (пускай будет кристалл 5CSXFC6D6F31C7)? Больше 6-ти пока не получается даже скомпилировать.... Перепробовал разные варианты конфигураций: и с встроенными TXPLL, и с внешними, и с bonded и с не-bonded, - не собирается и всё тут. Такое ощущение что это невозможно (хотя на форуме встречал упоминания об обратном, но без какой-либо конкретики, пруф). Куда копать хотя бы? Спасибо.
|
|
|
|
|
 |
Ответов
(1 - 14)
|
Nov 21 2016, 11:12
|
Участник

Группа: Участник
Сообщений: 15
Регистрация: 2-08-16
Пользователь №: 92 805

|
Какое IP ядро вы используете (Native-Phy или Custom-Phy)? В своем проекте на 5CGX использовали все трансиверы с IP ядром Native-Phy и внешней PLL для tx. Всё заработало.
|
|
|
|
|
Nov 21 2016, 11:33
|

Местный
  
Группа: Свой
Сообщений: 285
Регистрация: 10-12-04
Из: Earth
Пользователь №: 1 437

|
Native PHY, настройки в данный момент такие:
Выдает следующие ошибки: Код Error (14566): Could not place 1 periphery component(s) due to conflicts with existing constraints (1 Channel PLL(s)) Error (175020): Illegal constraint of Channel PLL that is part of Cyclone V Transceiver Native PHY gxb to the region (0, 40) to (0, 42): no valid locations in region Error (11238): Node is not compatible with other nodes placed at the same location either because there are too few available Channel PLL locations, or the nodes have different inputs, parameters, or both. Don Eugenio, вполне вероятно, что я неправильно подключаю сигналы. Как это сделано у Вас? Правильно ли я понимаю, что сделано всё так: - у каждого трансивера есть своя pll; - трансиверы сгруппированы в банки по 3 штуки; - в каждом банке pll "центрального" трансивера может шарить свой клок на соседей; - клок также можеть шариться и на другие банки (но это увеличивает джиттер) с помощью bonded-режима; - опору можно давать через специальную ногу REFCLK; - передающую часть трансивера можно тактировать лююбым из вышеприведенных способов, а также отдельным pll, а также просто внешней опорой с ножки (вопрос - с какой?); ? И сразу еще вопрос: что дает параметр "TX local clock division factor" и что означает параметр "TX PLL base data rate"? Это для всяких JESD-применений, когда используется несколько каналов? Пока не могу понять: вроде написано что это делитель, а по цифрам получается умножитель...
|
|
|
|
|
Nov 21 2016, 11:35
|
Участник

Группа: Участник
Сообщений: 15
Регистрация: 2-08-16
Пользователь №: 92 805

|
Настройки нормальные. По моему проекту: у нас используется внешняя частота с тактового генератора. Она заводится на клоковый вход, чтобы была возможность нормально использовать Fraction PLL. Саму PLL настраиваем на необходимые нам частоты (у меня Datarate 625Mbit, один выход с PLL 312.5Mhz, другой 62.5Mhz). И оба используем для тактирования native-phy. В Native-phy выставлено необходимое количество каналов сразу. Всего у меня 3 трансивера. По сигналам: На вход ext_pll_clk - заводим частоту с внешней PLL. На вход rx_cdr_refclk - заводим частоту тоже с внешней PLL. Входная частота заведена в плату (REFCLK), но не используется. Быстро создал проект с минимумом IP ядер (разных блоков, не подключал сигналы которые на расположение не влияют, контакты в Pin Planner не задавал), чтобы проверить точно ли он расположит всё (чип 5CSXFC6D6F31C7). Всё нормально располагает. Верхний уровень проекта.  Настройка PLL. (Настройка FPLL_CTRL - по умолчанию что предлагается в IP ядре).  Настройка Native-Phy.  Результат в Chip Planner.
Сообщение отредактировал Don Eugenio - Nov 21 2016, 12:15
|
|
|
|
|
Nov 21 2016, 13:03
|
Участник

Группа: Участник
Сообщений: 15
Регистрация: 2-08-16
Пользователь №: 92 805

|
В данном тестовом проекте Quartus расположил входную частоту на PLL на pin AB27. Для тактирования паралельной шины данных передаваемых с трансивера я использую выходную частоту с IP ядра (порт tx_std_clkout). Для принятых данных по аналогии используется частота rx_std_clkout. (данное решение было подсмотрено в reference desing examples. На выходе Pll настроены 2 частоты: Большая для передатчика, у меня равна 312.5 Мгц, из моего понимания - передатчик передаёт данные по двум фронтам, тем самым происходит умножение частоты и в итоге 625 Mbit поток данных. Меньшая частота используется как опорная для CDR, завожу ее на порт rx_cdr_refclk. Она настраивается на частоту которая настроена в IP ядре Native-Phy, в части RX (62.5 МГц).
|
|
|
|
|
Nov 21 2016, 13:28
|

Местный
  
Группа: Свой
Сообщений: 285
Регистрация: 10-12-04
Из: Earth
Пользователь №: 1 437

|
Собралось, ура. История такая: если один трансивер (один instance) настроить как 9-канальный и в режиме bonded, то всё собирается, тактируясь от одной FPLL-ки, как собственно и получилось у ув. Don Eugenio. Однако, если сделать 9 экземпляров одноканального трансивера, тактируемых также от одного клока, то - не собирается. А у меня изначально была именно такая конфигурация. Видимо, квартус не понимает что идентичные по настройкам трансиверы как бы можно и объединить...
Ну плюс какой-то ад в документации, где конкретики чуть меньше, чем ноль.
|
|
|
|
|
Nov 25 2016, 11:09
|

Местный
  
Группа: Свой
Сообщений: 285
Регистрация: 10-12-04
Из: Earth
Пользователь №: 1 437

|
Собрать удалось, теперь разбираюсь с синхронизацией потока. Появился новый вопрос. Собираю конфигурацию следующего вида: - 1-канальный Native PHY на ~2.5ГБит/с с включенным входом rx_bitslip для ручного управления байтовой синхронизацией; - Altera PLL; - PHY Reset controller; Далее, есть простейший тестбенч, который дожидается пока пройдет сброс, потом дергает rx_bitslip пока не поймает паттерн и всё (txd соединен с rxd, т.е. сделан external loopback). На вход (tx_parallel_data) трансивера всегда подается константа. Симуляция - функциональная. На выходе я ожидаю увидеть как побитово двигается шина rx_parallel_data и в какой-то момент этот процесс останавливается (когда поймается паттерн). Однако странности на выходе (rx_parallel_data) наблюдаю я. Такое ощущение, что битовая синхра постоянно "подсрывается" понемногу - видны плывущие как будто бы глитчи длиной в такт rx_parallel_clk, которые портят принятые данные. Как такое может быть? Если интересно, могу выложить проект с моделькой. Картинки. Настройки трансивера:
Настройки PLL:
Времянка поближе - видно глитчи (см. шину txdata - это вход трансивера - константа, развернутая rxdata - его выход):
Времянка подальше - видно как плывет rxdata:
|
|
|
|
|
Nov 25 2016, 13:04
|
Участник

Группа: Участник
Сообщений: 15
Регистрация: 2-08-16
Пользователь №: 92 805

|
В своем проекте использую преобразование 8b/10b и синхронизацию осуществляю по K28.5 символу. Проверялось в железе. Стабильно принимало и синхронизация никуда не уплывала. Какие частоты заводите на порты rx_std_coreclkin, tx_std_coreclkin и на какой частоте передаёте данные и смотрите принимаемые?
|
|
|
|
|
Nov 25 2016, 13:20
|

Местный
  
Группа: Свой
Сообщений: 285
Регистрация: 10-12-04
Из: Earth
Пользователь №: 1 437

|
Сейчас туда подаю tx_std_clkout и rx_std_clkout соответственно, чтобы уж совсем наверняка. 8b/10b использовать не получится, т.к. входящий поток от другой железки, с которой будет общение, без кодирования. Поэтому и изобретаю велосипед с калибровкой.
Вспомнил сейчас: в былые времена сталкивался с похожей проблемой уплыва шины rx_parallel_data, когда симулировал Arria II GX. Как выяснилось в итоге (после многонедельного секса), в тестбенче с маааааленькой погрешностью вычислялся опорный такт (было выражение вида period=1/75_000_000, что давало 13.(3)нс). Из-за этого мееееедленно, но верно плыла линия txd. Вылечилось добавлением в тестбенч PLL и заданием в качестве опорной частоты "хорошего" такта - 50 МГц.
Но подобный трюк сейчас - не проходит, значит это уже что-то другое (((
|
|
|
|
|
Nov 30 2016, 08:03
|
Профессионал
    
Группа: Свой
Сообщений: 1 088
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082

|
Цитата(spectr @ Nov 21 2016, 16:28)  История такая: если один трансивер (один instance) настроить как 9-канальный и в режиме bonded, то всё собирается, тактируясь от одной FPLL-ки, как собственно и получилось у ув. Don Eugenio. Однако, если сделать 9 экземпляров одноканального трансивера, тактируемых также от одного клока, то - не собирается. А у меня изначально была именно такая конфигурация. Видимо, квартус не понимает что идентичные по настройкам трансиверы как бы можно и объединить... Ну плюс какой-то ад в документации, где конкретики чуть меньше, чем ноль. В данный момент времени стоит схожая задача, поэтому возник, возможно, несколько странный вопрос - если есть несколько независимых приемопередатчиков (fpga связана с несколькими другими, которые в общем случае никак не связаны между собой), то могу ли я их объединить в режиме bounded, создав один. Или все-таки придется реализовывать независимо? Не до конца понятен принцип восстановления частоты из потока данных CDR, вроде бы опорную частоту и частоту cdr_clk подаю одну на всех, а восстанавливает частоту приемопередатчик из общего потока или все-таки отдельно для каждой линии независимо?
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|