Перейти к содержанию
    

Тактовая частота АЦП и FCO равны (в МГц). Для тактирования приёмника можно использовать как FCO, так и DCO (одну из них, лучше DCO), ядро ALTLVDS_RX поставит внутри PLL и само сгенерирует необходимые клоки, или можно задать вручную при использовании внешнего PLL. Правильный приём фрейма осуществляется синхронизацией АЦП и приёмника (используется порт rx_data_align).

 

 

FCO - соответствует началу фрейма, Ваш синхронный клок будет сдвинут по фазе. Можно попробовать обойтись без FCO/DCO (так не делали), но без автомата, который ищет границы фрейма НЕТ (для этого случая Ваши настройки ядра верны).

 

Спасибо за разъяснения. Но, извините, не могли бы вы более детально пояснить, что в данной ситуации можно было бы сделать, чтобы данные виделись правильно (что изменить в настройках мегафункции и какие куда следовало бы подключать сигналы от АЦП и внутри циклона). Я с диф.сигналами и последовательным кодом никогда не работал. И не очень представляю/понимаю, как программировать по SPI этот АЦП.

Может быть есть небольшое недопонимание в плане работы самой платы:

Есть две маленькие платки, на которых распаяны АЦП. Они воткнуты через разъем в большую плату, которая должна получить с них данные, обработать и передать обработанную информацию на следующую плату, от которой она в свою очередь для синхронной работы в общей системе получает клок.

Поэтому мне не очень понятно, как я на ядро циклона могу подать сразу несколько клоков. Проблема заключается еще в том, что платы уже распаяны и сейчас идет процесс отладки/тестирования.

Если я правильно понимаю, то синхронность фрейма я могу увидеть по осциллографу - сдвинут ли один сигнал относительно другого. И кроме того мне не сильно важно на сколько задерживается сам фрейм с 10-ю битами. Мне главное, чтобы биты были правильно распакованы. А на данный момент выходит какая-то непонятность - не зависимо от амплитуды всегда ВСЕ биты скачут (я вывожу их в параллель на тестовые ноги).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо за разъяснения. Но, извините, не могли бы вы более детально пояснить, что в данной ситуации можно было бы сделать, чтобы данные виделись правильно (что изменить в настройках мегафункции и какие куда следовало бы подключать сигналы от АЦП и внутри циклона). Я с диф.сигналами и последовательным кодом никогда не работал. И не очень представляю/понимаю, как программировать по SPI этот АЦП.

Может быть есть небольшое недопонимание в плане работы самой платы:

Есть две маленькие платки, на которых распаяны АЦП. Они воткнуты через разъем в большую плату, которая должна получить с них данные, обработать и передать обработанную информацию на следующую плату, от которой она в свою очередь для синхронной работы в общей системе получает клок.

Поэтому мне не очень понятно, как я на ядро циклона могу подать сразу несколько клоков. Проблема заключается еще в том, что платы уже распаяны и сейчас идет процесс отладки/тестирования.

Если я правильно понимаю, то синхронность фрейма я могу увидеть по осциллографу - сдвинут ли один сигнал относительно другого. И кроме того мне не сильно важно на сколько задерживается сам фрейм с 10-ю битами. Мне главное, чтобы биты были правильно распакованы. А на данный момент выходит какая-то непонятность - не зависимо от амплитуды всегда ВСЕ биты скачут (я вывожу их в параллель на тестовые ноги).

Всё скачет, т.к. порядок бит в принимаемом слове неправильный. Идеальный вариант - завести диффпару DCO+/DCO- на Cyclone и на ALTLVDS_RX in_clock (это не отменяет необходимость автомата для синхронизации). Если возможности нет или очень сложно, то можно попытаться принять правильные данные на Вашей системе, для этого:

1) Разберитесь с чтением/записью регистров АЦП по SPI;

2) Переключаете АЦП в режим тестовой последовательности, передаваться будет известная последовательность;

3) Сделайте автомат, который будет тактировать порт rx_channel_data_align[n-1:0], если принятое слово не соответствует образцу;

4) Когда границы фрейма найдены, переключаете АЦП в нормальный режим работы.

 

PS

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Всё скачет, т.к. порядок бит в принимаемом слове неправильный. Идеальный вариант - завести диффпару DCO+/DCO- на Cyclone и на ALTLVDS_RX in_clock (это не отменяет необходимость автомата для синхронизации). Если возможности нет или очень сложно, то можно попытаться принять правильные данные на Вашей системе, для этого:

1) Разберитесь с чтением/записью регистров АЦП по SPI;

2) Переключаете АЦП в режим тестовой последовательности, передаваться будет известная последовательность;

3) Сделайте автомат, который будет тактировать порт rx_channel_data_align[n-1:0], если принятое слово не соответствует образцу;

4) Когда границы фрейма найдены, переключаете АЦП в нормальный режим работы.

 

PS

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

 

Не очень понял по поводу идеального варианта - завести диффпару DCO+/DCO- на Cyclone и на ALTLVDS_RX in_clock (это не отменяет необходимость автомата для синхронизации). То есть мне нужно DCO+/DCO- ввести в Cyclone на LVDS-ные ноги и в коде подключить на ALTLVDS_RX.in_clock? Но ведь в таком случае у меня буду появляться биты каждые 2.5нс, а не цельное 10-ти битовое слово каждые 25нс? И как можно его синхронизовать?

Если вам не сложно, пожалуйста, не могли бы вы подправить настройки, которые я выложил в первом сообщении в теме?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

То есть мне нужно DCO+/DCO- ввести в Cyclone на LVDS-ные ноги и в

коде подключить на ALTLVDS_RX.in_clock? Но ведь в таком случае у меня буду появляться биты каждые 2.5нс, а не цельное 10-ти битовое

слово каждые 25нс? И как можно его синхронизовать?

Это идеальный вариант, выше по пунктам расписано, что необходимо сделать, чтобы система смогла работать в том виде, в каком есть сейчас.

Ещё доку на ядро почитайте, там расписан алгоритм работы.

 

Если вам не сложно, пожалуйста, не могли бы вы подправить настройки, которые я выложил в первом сообщении в теме?

Там всё правильно (для случая использования FCO или синхронного ему клока), только необходима синхронизация или вариант с гаданием правильного битового сдвига (тактируете align порт кнопкой или ещё каким способом и проверяете результат).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это идеальный вариант, выше по пунктам расписано, что необходимо сделать, чтобы система смогла работать в том виде, в каком есть сейчас.

Ещё доку на ядро почитайте, там расписан алгоритм работы.

Извини, но я все время путаюсь, что вы имеете в виду под словом "ядро".

 

Там всё правильно (для случая использования FCO или синхронного ему клока), только необходима синхронизация или вариант с гаданием правильного битового сдвига (тактируете align порт кнопкой или ещё каким способом и проверяете результат).

Немного запутался... а синхронизация происходит не по FCO - синхронизация фрейма? Он же 40МГц? Если он тактируется фреймом, то защелкивать же должен синхронно с фреймом? Или это не так? И не очень понятно как расписывать align порт.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Извини, но я все время путаюсь, что вы имеете в виду под словом "ядро".

ALTLVDS_RX

 

 

Немного запутался... а синхронизация происходит не по FCO - синхронизация фрейма? Он же 40МГц? Если он тактируется фреймом, то защелкивать же должен синхронно с фреймом? Или это не так? И не очень понятно как расписывать align порт.

Читайте доку.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это идеальный вариант, выше по пунктам расписано, что необходимо сделать, чтобы система смогла работать в том виде, в каком есть сейчас.

Ещё доку на ядро почитайте, там расписан алгоритм работы.

 

Там всё правильно (для случая использования FCO или синхронного ему клока), только необходима синхронизация или вариант с гаданием правильного битового сдвига (тактируете align порт кнопкой или ещё каким способом и проверяете результат).

 

То есть я правильно понимаю, что ножка rx_data_align сдвигает на нужное количество бит сам фрейм, чтобы он правильно защелкнуться? Или не так? И я могу его попробовать подобрать сам, так как там всего 10 бит. Есть небольшой проблем - плату нужно запустить край через 3 дня(.

Изменено пользователем EpLeon

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

То есть я правильно понимаю, что ножка rx_data_align сдвигает на нужное количество бит сам фрейм, чтобы он правильно защелкнуться?

Да.

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

Можно попробовать (вручную тактировать align и анализировать принимаемые данные). Для одного канала, возможно, будет быстрее, чем полностью со всем разобраться и сделать правильно. Каналов АЦП 8 - пробуйте.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да.

 

Можно попробовать (вручную тактировать align и анализировать принимаемые данные). Для одного канала, возможно, будет быстрее, чем полностью со всем разобраться и сделать правильно. Каналов АЦП 8 - пробуйте.

 

Сдвиг происходит, просто задержкой зашелкивания по фазе? Я правильно понимаю, что на ножку align нужно подавать частоту фрейма и сдвигать по одному битику? И еще вопрос - будут ли все каналы синхронны? Или для каждого нужна отдельная тактировка?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сдвиг происходит, просто задержкой зашелкивания по фазе? Я правильно понимаю, что на ножку align нужно подавать частоту фрейма и сдвигать по одному битику? И еще вопрос - будут ли все каналы синхронны? Или для каждого нужна отдельная тактировка?

Импульс на линии align даёт сдвиг фрейма на 1 бит. Каждый канал необходимо синхронизировать отдельно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Импульс на линии align даёт сдвиг фрейма на 1 бит. Каждый канал необходимо синхронизировать отдельно.

 

И еще, может быть, конечно и глупый вопрос, но для окончательного понимания и осознания - на align подается частота фрейма, которая и будет сдвигаться на один бить по фазе, то есть та же частота, что и на rx_inclock, только со сдвигом?

Изменено пользователем EpLeon

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И еще, может быть, конечно и глупый вопрос, но для окончательного понимания и осознания - на align подается частота фрейма, которая и будет сдвигаться на один бить по фазе, то есть та же частота, что и на rx_inclock, только со сдвигом?

Из доки на ALTLVDS:

Use ‘rx_channel_data_align’ input port

 

Turn on this option to control bit insertion on a channel-by-channel basis

to align the word boundaries of the incoming data. The data slips one bit

for every pulse on the rx_channel_data_align port. This option is

available only if you use a dedicated SERDES block.

You can use control characters in the data stream so your logic can have

a known pattern to search for. You can compare the data received for

each channel, compare to the control character you are looking for, then

pulse the rx_channel_data_align port as required until you

successfully receive the control character.

To use this port, you must meet the following requirements:

■ The minimum pulse width is one period of the parallel clock in the

logic array (rx_outclock).

■ The minimum low time between pulses is one period of the parallel

clock.

■ There is no maximum high or low time.

■ Valid data is available two parallel clock cycles after the rising edge of

rx_channel_data_align signal.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Из доки на ALTLVDS:

Честно говоря, прочитав данный текст, я только больше запутался... на align нужно подавать клок со сдвигом по фазе, в зависимости от того на сколько бит сдвинуть - на столько и задерживать фазу данного клока, или нет?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Честно говоря, прочитав данный текст, я только больше запутался... на align нужно подавать клок со сдвигом по фазе, в зависимости от того на сколько бит сдвинуть - на столько и задерживать фазу данного клока, или нет?

На align нужно подавать импульсы до наступления синхронизма,после этого ничего подавать не нужно. Примерно так - фаза не совпадает => дали один импульс align, проверили фазу,фаза не совпадает => дали один импульс align, проверили фазу и т.д.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На align нужно подавать импульсы до наступления синхронизма,после этого ничего подавать не нужно. Примерно так - фаза не совпадает => дали один импульс align, проверили фазу,фаза не совпадает => дали один импульс align, проверили фазу и т.д.

Имеется ввиду импульс любой длительности? Или туда что-то конкретное нужно подавать? Просто я сейчас туда подсоединил один из выходов PLL со сдвигом по фазе относительно основной частоты... То есть, я правильно понимаю, что сигнал поданный на align запускает подстройку фазы?

и еще вопрос - нужно ли такую подстройку проводить каждый раз при включении платы? Или же синхронизацию как-то можно запомнить?

Изменено пользователем EpLeon

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...