реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Parralel to differential: моделирование потока данных с АЦП
sqrt(2)
сообщение Jul 24 2017, 07:48
Сообщение #1


Участник
*

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



Здравствуйте.

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

До этого у меня была такая система - я в Матлабе генерировал нужный сигнал, записывал его в файл, в тестбенче его читал и гонял по шинам. Подскажите пожалуйста, как такие потоки параллельных данных превращать в потоки последовательных? Может стоит использовать какие-то примитивы от производителя ПЛИС, для упрощения (использую Xilinx 7й серии)?
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Jul 24 2017, 08:26
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 785
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



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

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

До этого у меня была такая система - я в Матлабе генерировал нужный сигнал, записывал его в файл, в тестбенче его читал и гонял по шинам. Подскажите пожалуйста, как такие потоки параллельных данных превращать в потоки последовательных?
Ну так и делаете в тетсбенче: читаете из файла слово, выдаёте его на свой приёмник побитно. В чём проблема?
Go to the top of the page
 
+Quote Post
sqrt(2)
сообщение Jul 24 2017, 09:09
Сообщение #3


Участник
*

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



Например, считываю из файла в виде вектора x из 14 бит. Сигнал с АЦП - два провода, data_P, data_N.

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

Правильно я понимаю, что в итоге должно получаться так: data_P <= data_bit, data_N <= not data_bit ?
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Jul 24 2017, 10:13
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 785
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Да, верно.
Go to the top of the page
 
+Quote Post
iosifk
сообщение Jul 24 2017, 11:24
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 3 570
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(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 у Вас данные вычитываются байтами, сделайте преобразователь "парр->послед". И этого достаточно.
Если хотите подробнее, могу рассказать по скайпу.
Удачи!


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
sqrt(2)
сообщение Jul 24 2017, 11:38
Сообщение #6


Участник
*

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



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

Спасибо.

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

У меня было некоторое непонимание, как грамотно создать такой поток данных для моделирования.
Go to the top of the page
 
+Quote Post
Magnum
сообщение Jul 24 2017, 11:48
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 205
Регистрация: 26-05-05
Пользователь №: 5 397



Цитата(sqrt(2) @ Jul 24 2017, 18:38) *
Спасибо.

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

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


На уровне моделирования вовсе не обязательно генерировать отрицательный провод, достаточно одного позитива, всё равно вы в симуляторе уровни lvds не воссоздадите. А для параллельно-последовательных преобразований иногда используется описанный вами выше мультиплексорный метод, но чаще все же, применяют сдвиговый регистр.
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Jul 24 2017, 12:24
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 785
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



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

Цитата
А для параллельно-последовательных преобразований иногда используется описанный вами выше мультиплексорный метод, но чаще все же, применяют сдвиговый регистр.
В тестбенче всё равно.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th August 2017 - 05:31
Рейтинг@Mail.ru


Страница сгенерированна за 0.01484 секунд с 7
ELECTRONIX ©2004-2016