|
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 порт и реализуете автомат синхронизации.
Эскизы прикрепленных изображений
|
|
|
|
Сообщений в этой теме
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   iiv Цитата(doom13 @ Mar 3 2016, 11:40) ALTLVD... Mar 3 2016, 07:55    doom13 Цитата(iiv @ Mar 3 2016, 10:55) скажите, ... Mar 3 2016, 10:03     iiv Цитата(doom13 @ Mar 3 2016, 15:03) Тактов... Mar 3 2016, 10:18      doom13 Цитата(iiv @ Mar 3 2016, 13:18) то есть, ... Mar 3 2016, 10:29     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
|
|
|