Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Parralel to differential: моделирование потока данных с АЦП
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
sqrt(2)
Здравствуйте.

Есть некоторый проект для ПЛИС, полностью отлаженый. Однако отладка проводилась без обвязки АЦП. Добавил обвязку АЦП. Проблема в том, что до этого я моделировал данные с АЦП в виде шин с нужной разрядностью, но в моем случае данные с АЦП поступают на ПЛИС в дифф. виде (LVDS) и мне надо отдельно собирать их в шины. Как собирать - я разобрался, осталось только промоделировать. И вот тут я не совсем понимаю, как это моделировать.

До этого у меня была такая система - я в Матлабе генерировал нужный сигнал, записывал его в файл, в тестбенче его читал и гонял по шинам. Подскажите пожалуйста, как такие потоки параллельных данных превращать в потоки последовательных? Может стоит использовать какие-то примитивы от производителя ПЛИС, для упрощения (использую Xilinx 7й серии)?
andrew_b
Цитата(sqrt(2) @ Jul 24 2017, 10:48) *
Есть некоторый проект для ПЛИС, полностью отлаженый. Однако отладка проводилась без обвязки АЦП. Добавил обвязку АЦП. Проблема в том, что до этого я моделировал данные с АЦП в виде шин с нужной разрядностью, но в моем случае данные с АЦП поступают на ПЛИС в дифф. виде (LVDS) и мне надо отдельно собирать их в шины.
Всё смешалось в кучу. LVDS и формат данных вещи независимые. Параллельный интерфейс тоже может быть LVDS-ным. Или вы хотите сказать, что в модели у вас был АЦП с параллельным интерфейсом, а реальный с последовательным?

Цитата
Как собирать - я разобрался, осталось только промоделировать. И вот тут я не совсем понимаю, как это моделировать.

До этого у меня была такая система - я в Матлабе генерировал нужный сигнал, записывал его в файл, в тестбенче его читал и гонял по шинам. Подскажите пожалуйста, как такие потоки параллельных данных превращать в потоки последовательных?
Ну так и делаете в тетсбенче: читаете из файла слово, выдаёте его на свой приёмник побитно. В чём проблема?
sqrt(2)
Например, считываю из файла в виде вектора x из 14 бит. Сигнал с АЦП - два провода, data_P, data_N.

Беру бит за битом вектор x: data_bit <= x(i), где i - номер текущего читаемого бита.

Правильно я понимаю, что в итоге должно получаться так: data_P <= data_bit, data_N <= not data_bit ?
andrew_b
Да, верно.
iosifk
Цитата(sqrt(2) @ Jul 24 2017, 12:09) *
Например, считываю из файла в виде вектора x из 14 бит. Сигнал с АЦП - два провода, data_P, data_N.

Беру бит за битом вектор x: data_bit <= x(i), где i - номер текущего читаемого бита.

Правильно я понимаю, что в итоге должно получаться так: data_P <= data_bit, data_N <= not data_bit ?


Расклад такой. Если данные идут только по одной lvds паре, то Вы в проекте должны сделать преобразователь послед->паралл. И к нему на самом входе только добавить примитив "lvds-буфер". При этом весь проект делайте, как FPGA_core и к нему на самом верхнем уровне добавляйте "lvds-буфер". А для RTL симуляции берите только FPGA_core.
В старом тестбенче, xlt у Вас данные вычитываются байтами, сделайте преобразователь "парр->послед". И этого достаточно.
Если хотите подробнее, могу рассказать по скайпу.
Удачи!
sqrt(2)
Цитата(iosifk @ Jul 24 2017, 14:24) *
Расклад такой. Если данные идут только по одной lvds паре, то Вы в проекте должны сделать преобразователь послед->паралл. И к нему на самом входе только добавить примитив "lvds-буфер". При этом весь проект делайте, как FPGA_core и к нему на самом верхнем уровне добавляйте "lvds-буфер". А для RTL симуляции берите только FPGA_core.
В старом тестбенче, xlt у Вас данные вычитываются байтами, сделайте преобразователь "парр->послед". И этого достаточно.
Если хотите подробнее, могу рассказать по скайпу.
Удачи!

Спасибо.

Приём таких данных в ПЛИС - ситуация типовая и всё расписано самим Xilinx, и в этом я разобрался.

У меня было некоторое непонимание, как грамотно создать такой поток данных для моделирования.
Magnum
Цитата(sqrt(2) @ Jul 24 2017, 18:38) *
Спасибо.

Приём таких данных в ПЛИС - ситуация типовая и всё расписано самим Xilinx, и в этом я разобрался.

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


На уровне моделирования вовсе не обязательно генерировать отрицательный провод, достаточно одного позитива, всё равно вы в симуляторе уровни lvds не воссоздадите. А для параллельно-последовательных преобразований иногда используется описанный вами выше мультиплексорный метод, но чаще все же, применяют сдвиговый регистр.
andrew_b
Цитата(Magnum @ Jul 24 2017, 14:48) *
На уровне моделирования вовсе не обязательно генерировать отрицательный провод, достаточно одного позитива, всё равно вы в симуляторе уровни lvds не воссоздадите.
Если при моделировании используются примитивы IBUFDS, то нужна полная пара, иначе через эти буферы ничего не пройдёт. Уровней LVDS, естественно, не будет, но прямой и инверсный сигналы нужны.

Цитата
А для параллельно-последовательных преобразований иногда используется описанный вами выше мультиплексорный метод, но чаще все же, применяют сдвиговый регистр.
В тестбенче всё равно.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.