|
LVDS преобразователь, Проектирование приемника LVDS в Циклоне |
|
|
|
Mar 2 2016, 05:32
|
Участник

Группа: Участник
Сообщений: 25
Регистрация: 10-07-12
Пользователь №: 72 683

|
Добрый день.
Подскажите, пожалуйста. Задача заключается в следующем: есть 10-битный АЦП AD9212 - он посылает данные в формате LVDS с частотой 400Mbps или 40МГц на событие. Необходимо рсшифровать эти данные в Циклоне - EP4CE55F23C6. Пробую использовать встроенную мегафункцию altlvds_rx со следующими параметрами: SUBDESIGN LVDS_In ( rx_in[0..0] : INPUT; rx_inclock : INPUT = GND; rx_locked : OUTPUT; rx_out[9..0] : OUTPUT; rx_outclock : OUTPUT; ) VARIABLE altlvds_rx_component : altlvds_rx WITH ( COMMON_RX_TX_PLL = "ON", DESERIALIZATION_FACTOR = 10, IMPLEMENT_IN_LES = "ON", INCLOCK_DATA_ALIGNMENT = "UNUSED", INCLOCK_PERIOD = 25000, INCLOCK_PHASE_SHIFT = 0, INPUT_DATA_RATE = 400, INTENDED_DEVICE_FAMILY = "Cyclone IV E", LPM_HINT = "CBX_MODULE_PREFIX=LVDS_In", LPM_TYPE = "altlvds_rx", NUMBER_OF_CHANNELS = 1, PLL_SELF_RESET_ON_LOSS_LOCK = "OFF", PORT_RX_CHANNEL_DATA_ALIGN = "PORT_UNUSED", PORT_RX_DATA_ALIGN = "PORT_UNUSED", REGISTERED_DATA_ALIGN_INPUT = "OFF", REGISTERED_OUTPUT = "ON", USE_EXTERNAL_PLL = "OFF" ); BEGIN
rx_locked = altlvds_rx_component.rx_locked; rx_out[9..0] = altlvds_rx_component.rx_out[9..0]; rx_outclock = altlvds_rx_component.rx_outclock; altlvds_rx_component.rx_inclock = rx_inclock; altlvds_rx_component.rx_in[0..0] = rx_in[0..0]; END;
Пишу на языке AHDL в силу пока незнания остальных. Данные, которые потом вывожу на ножки циклона в виде параллельного кода как-то не соответствуют сигналу. Подскажите, все ли правильно в настройка функции. Клок на функцию использую тот же, что и в самой альтере для других вещей через pll функцию. Сама же частота задается извне генератором 40МГц.
|
|
|
|
|
 |
Ответов
|
Mar 2 2016, 16:12
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Ещё разберитесь с Цитата PORT_RX_CHANNEL_DATA_ALIGN = "PORT_UNUSED", PORT_RX_DATA_ALIGN = "PORT_UNUSED", REGISTERED_DATA_ALIGN_INPUT = "OFF", , вероятно, последовательные данные принимаются со сдвигом на N-бит. Тут необходим автомат который будет находить границы принимаемого слова.
|
|
|
|
|
Mar 2 2016, 23:48
|
Участник

Группа: Участник
Сообщений: 25
Регистрация: 10-07-12
Пользователь №: 72 683

|
Цитата(doom13 @ Mar 2 2016, 22:12)  Ещё разберитесь с , вероятно, последовательные данные принимаются со сдвигом на N-бит. Тут необходим автомат который будет находить границы принимаемого слова. Но из АЦП не выходит каких либо служебных сигналов - только данные и есть еще две пары ножек с тактовыми частотами FCO и DCO. Кроме того, если я правильно понимаю, то у меня функция циклона тактируется сама - внешний клок у нее отключен USE_EXTERNAL_PLL = "OFF".
|
|
|
|
|
Mar 3 2016, 06:40
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Цитата(EpLeon @ Mar 3 2016, 02:48)  Но из АЦП не выходит каких либо служебных сигналов - только данные и есть еще две пары ножек с тактовыми частотами FCO и DCO. Есть ещё SPI, который позволяет переключить АЦП в режим синхронизации, когда на выход выдаётся test pattern. Он используется для определения правильных границ принимаемого слова (совместно с align портом ядра). Цитата(EpLeon @ Mar 3 2016, 02:48)  Кроме того, если я правильно понимаю, то у меня функция циклона тактируется сама - внешний клок у нее отключен USE_EXTERNAL_PLL = "OFF". ALTLVDS_RX должна тактироваться от FCO или DCO (лучше DCO). USE_EXTERNAL_PLL = "OFF" - означает, что ядро ALTLVDS_RX будет использовать PLL внутри, который сгенерирует все необходимые для работы ядра клоки. Можно включить опцию "ON" (внешний PLL), чтобы была возможность использовать данный PLL для тактирования других модулей. Цитата(EpLeon @ Mar 3 2016, 08:52)  То есть я правильно понимаю, что мне нужно взять с АЦП FCO и DCO и по ним тактировать данные с АЦП? Первым тактировать посылки, а вторым сами биты в посылке? Но когда я пытаюсь создать в мегофункции внешний клок, то Квартус ругается, что максимальная частота для внешнего тактирования 760МГц, так как ему нужна в данном случае удвоенная частота прихода бит. На rx_inclock подаёте DCO, ядро настраиваете следующим образом (для приёма одного канала АЦП): CODE ALTLVDS_RX_component.buffer_implementation = "RAM", ALTLVDS_RX_component.cds_mode = "UNUSED", ALTLVDS_RX_component.common_rx_tx_pll = "OFF", ALTLVDS_RX_component.data_align_rollover = 4, ALTLVDS_RX_component.data_rate = "400.0 Mbps", ALTLVDS_RX_component.deserialization_factor = 10, ALTLVDS_RX_component.dpa_initial_phase_value = 0, ALTLVDS_RX_component.dpll_lock_count = 0, ALTLVDS_RX_component.dpll_lock_window = 0, ALTLVDS_RX_component.enable_clock_pin_mode = "UNUSED", ALTLVDS_RX_component.enable_dpa_align_to_rising_edge_only = "OFF", ALTLVDS_RX_component.enable_dpa_calibration = "ON", ALTLVDS_RX_component.enable_dpa_fifo = "UNUSED", ALTLVDS_RX_component.enable_dpa_initial_phase_selection = "OFF", ALTLVDS_RX_component.enable_dpa_mode = "OFF", ALTLVDS_RX_component.enable_dpa_pll_calibration = "OFF", ALTLVDS_RX_component.enable_soft_cdr_mode = "OFF", ALTLVDS_RX_component.implement_in_les = "OFF", ALTLVDS_RX_component.inclock_boost = 0, ALTLVDS_RX_component.inclock_data_alignment = "EDGE_ALIGNED", ALTLVDS_RX_component.inclock_period = 5000, ALTLVDS_RX_component.inclock_phase_shift = 0, ALTLVDS_RX_component.input_data_rate = 400, ALTLVDS_RX_component.intended_device_family = "Cyclone V", ALTLVDS_RX_component.lose_lock_on_one_change = "UNUSED", ALTLVDS_RX_component.lpm_hint = "CBX_MODULE_PREFIX=ghh", ALTLVDS_RX_component.lpm_type = "altlvds_rx", ALTLVDS_RX_component.number_of_channels = 1, ALTLVDS_RX_component.outclock_resource = "Dual-Regional clock", ALTLVDS_RX_component.pll_operation_mode = "NORMAL", ALTLVDS_RX_component.pll_self_reset_on_loss_lock = "UNUSED", ALTLVDS_RX_component.port_rx_channel_data_align = "PORT_UNUSED", ALTLVDS_RX_component.port_rx_data_align = "PORT_UNUSED", ALTLVDS_RX_component.refclk_frequency = "200.000000 MHz", ALTLVDS_RX_component.registered_data_align_input = "UNUSED", ALTLVDS_RX_component.registered_output = "ON", ALTLVDS_RX_component.reset_fifo_at_first_lock = "UNUSED", ALTLVDS_RX_component.rx_align_data_reg = "RISING_EDGE", ALTLVDS_RX_component.sim_dpa_is_negative_ppm_drift = "OFF", ALTLVDS_RX_component.sim_dpa_net_ppm_variation = 0, ALTLVDS_RX_component.sim_dpa_output_clock_phase_shift = 0, ALTLVDS_RX_component.use_coreclock_input = "OFF", ALTLVDS_RX_component.use_dpll_rawperror = "OFF", ALTLVDS_RX_component.use_external_pll = "OFF", ALTLVDS_RX_component.use_no_phase_shift = "ON", ALTLVDS_RX_component.x_on_bitslip = "ON", ALTLVDS_RX_component.clk_src_is_pll = "off";
PS: Если принять правильные данные не удаётся - добавляете rx_channel_data_align порт и реализуете автомат синхронизации.
Эскизы прикрепленных изображений
|
|
|
|
|
Mar 3 2016, 07:55
|
вопрошающий
    
Группа: Свой
Сообщений: 1 726
Регистрация: 24-01-11
Пользователь №: 62 436

|
Цитата(doom13 @ Mar 3 2016, 11:40)  ALTLVDS_RX должна тактироваться от FCO или DCO (лучше DCO). скажите, пожалуйста, можно ли тактировать АЦПшку от DCO, но использовать FCO для распознания начала фрейма, и, если да, то как? Иначе как-то не логично получается, нога есть, а пользы от нее нет.
|
|
|
|
|
Mar 3 2016, 10:03
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Цитата(iiv @ Mar 3 2016, 10:55)  скажите, пожалуйста, можно ли тактировать АЦПшку от DCO, но использовать FCO для распознания начала фрейма, и, если да, то как? Иначе как-то не логично получается, нога есть, а пользы от нее нет. Тактовая частота АЦП и FCO равны (в МГц). Для тактирования приёмника можно использовать как FCO, так и DCO (одну из них, лучше DCO), ядро ALTLVDS_RX поставит внутри PLL и само сгенерирует необходимые клоки, или можно задать вручную при использовании внешнего PLL. Правильный приём фрейма осуществляется синхронизацией АЦП и приёмника (используется порт rx_data_align). Цитата(EpLeon @ Mar 3 2016, 11:09)  Так и не понял почему у вас стоит 200МГц... хотя на DCO именно она и выходит - проверил щупом. При этом частоты внутри циклона и АЦП синхрованы, поэтому не очень понятно зачем использовать FCO? Кроме того вопрос можно ли обойтись без FCO и DCO? Просто АЦП и циклон находятся на разных платах и возможности их соединить еще одним кабельком очевидной нет( И таких платок с АЦП у меня две и они обе соединяются с циклоном. FCO - соответствует началу фрейма, Ваш синхронный клок будет сдвинут по фазе. Можно попробовать обойтись без FCO/DCO (так не делали), но без автомата, который ищет границы фрейма НЕТ (для этого случая Ваши настройки ядра верны).
|
|
|
|
|
Mar 3 2016, 10:18
|
вопрошающий
    
Группа: Свой
Сообщений: 1 726
Регистрация: 24-01-11
Пользователь №: 62 436

|
Цитата(doom13 @ Mar 3 2016, 15:03)  Тактовая частота АЦП и FCO равны (в МГц). Для тактирования приёмника можно использовать как FCO, так и DCO (одну из них, лучше DCO), ядро ALTLVDS_RX поставит внутри PLL и само сгенерирует необходимые клоки, или можно задать вручную при использовании внешнего PLL. Правильный приём фрейма осуществляется синхронизацией АЦП и приёмника (используется порт rx_data_align). то есть, скажите, пожалуйста, правильно ли я понимаю, что надо DCO завести на rx_inclock, а FCO завести на rx_data_align?
|
|
|
|
|
Mar 3 2016, 10:29
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Цитата(iiv @ Mar 3 2016, 13:18)  то есть, скажите, пожалуйста, правильно ли я понимаю, что надо DCO завести на rx_inclock, а FCO завести на rx_data_align? Это "стёб"? Это правильно: Цитата(iiv @ Mar 3 2016, 13:18)  то есть, скажите, пожалуйста, правильно ли я понимаю, что надо DCO завести на rx_inclock... Это нет: Цитата(iiv @ Mar 3 2016, 13:18)  а FCO завести на rx_data_align? Каждый такт на rx_data_align сдвигает последовательность бит в выходных данных на 1 бит (т.о. сравниваем с ADC test pattern и ищем правильные границы фрейма).
|
|
|
|
Сообщений в этой теме
EpLeon LVDS преобразователь Mar 2 2016, 05:32 iiv Цитата(EpLeon @ Mar 2 2016, 10:32) rx_inc... Mar 2 2016, 08:42 doom13 Цитата(iiv @ Mar 2 2016, 11:42) это же кл... Mar 2 2016, 12:50 doom13 Цитата(EpLeon @ Mar 2 2016, 08:32) Добрый... Mar 2 2016, 14:38 EpLeon Цитата(doom13 @ Mar 2 2016, 20:28) Параме... Mar 2 2016, 14:40  doom13 Цитата(EpLeon @ Mar 2 2016, 17:40) Немног... Mar 2 2016, 15:06   EpLeon Цитата(doom13 @ Mar 2 2016, 21:06) Да, ст... Mar 3 2016, 05:52     EpLeon Цитата(doom13 @ Mar 3 2016, 16:03) Тактов... Mar 3 2016, 12:00      doom13 Цитата(EpLeon @ Mar 3 2016, 15:00) Спасиб... Mar 3 2016, 12:46       EpLeon Цитата(doom13 @ Mar 3 2016, 18:46) Всё ск... Mar 3 2016, 13:12        doom13 Цитата(EpLeon @ Mar 3 2016, 16:12) То ест... Mar 3 2016, 13:39         EpLeon Цитата(doom13 @ Mar 3 2016, 19:39) Это ид... Mar 3 2016, 14:30          doom13 Цитата(EpLeon @ Mar 3 2016, 17:30) Извини... Mar 3 2016, 14:45         EpLeon Цитата(doom13 @ Mar 3 2016, 19:39) Это ид... Mar 3 2016, 22:53          doom13 Цитата(EpLeon @ Mar 4 2016, 01:53) То ест... Mar 4 2016, 06:32           EpLeon Цитата(doom13 @ Mar 4 2016, 12:32) Да.
М... Mar 4 2016, 15:51            doom13 Цитата(EpLeon @ Mar 4 2016, 18:51) Сдвиг ... Mar 4 2016, 21:51             EpLeon Цитата(doom13 @ Mar 5 2016, 03:51) Импуль... Mar 4 2016, 23:14              doom13 Цитата(EpLeon @ Mar 5 2016, 02:14) И еще,... Mar 5 2016, 07:11               EpLeon Цитата(doom13 @ Mar 5 2016, 13:11) Из док... Mar 5 2016, 09:21                _Anatoliy Цитата(EpLeon @ Mar 5 2016, 12:21) Честно... Mar 5 2016, 09:26                 EpLeon Цитата(_Anatoliy @ Mar 5 2016, 15:26) На ... Mar 5 2016, 09:58                  _Anatoliy Цитата(EpLeon @ Mar 5 2016, 12:58) Имеетс... Mar 5 2016, 10:25                   EpLeon Цитата(_Anatoliy @ Mar 5 2016, 16:25) Вам... Mar 5 2016, 11:16                    _Anatoliy Цитата(EpLeon @ Mar 5 2016, 14:16)
Насчё... Mar 5 2016, 11:40                     EpLeon Цитата(_Anatoliy @ Mar 5 2016, 17:40) Нас... Mar 5 2016, 13:43                      _Anatoliy Цитата(EpLeon @ Mar 5 2016, 16:43) То ест... Mar 6 2016, 07:22                       EpLeon Цитата(_Anatoliy @ Mar 6 2016, 13:22) Ни ... Mar 6 2016, 09:24                        _Anatoliy Цитата(EpLeon @ Mar 6 2016, 12:24)
Так н... Mar 6 2016, 11:20                         EpLeon Цитата(_Anatoliy @ Mar 6 2016, 17:20) Так... Mar 6 2016, 11:57                          _Anatoliy Цитата(EpLeon @ Mar 6 2016, 14:57) То ест... Mar 6 2016, 12:13                           EpLeon Цитата(_Anatoliy @ Mar 6 2016, 18:13) При... Mar 6 2016, 12:16                    doom13 Цитата(EpLeon @ Mar 5 2016, 14:16) Извини... Mar 5 2016, 14:18   EpLeon Цитата(doom13 @ Mar 3 2016, 12:40) Есть е... Mar 3 2016, 08:09
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|