|
|
  |
Parralel to differential: моделирование потока данных с АЦП |
|
|
|
Jul 24 2017, 07:48
|
Участник

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

|
Здравствуйте.
Есть некоторый проект для ПЛИС, полностью отлаженый. Однако отладка проводилась без обвязки АЦП. Добавил обвязку АЦП. Проблема в том, что до этого я моделировал данные с АЦП в виде шин с нужной разрядностью, но в моем случае данные с АЦП поступают на ПЛИС в дифф. виде (LVDS) и мне надо отдельно собирать их в шины. Как собирать - я разобрался, осталось только промоделировать. И вот тут я не совсем понимаю, как это моделировать.
До этого у меня была такая система - я в Матлабе генерировал нужный сигнал, записывал его в файл, в тестбенче его читал и гонял по шинам. Подскажите пожалуйста, как такие потоки параллельных данных превращать в потоки последовательных? Может стоит использовать какие-то примитивы от производителя ПЛИС, для упрощения (использую Xilinx 7й серии)?
|
|
|
|
|
Jul 24 2017, 08:26
|
Профессионал
    
Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757

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

Группа: Участник
Сообщений: 74
Регистрация: 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 ?
|
|
|
|
|
Jul 24 2017, 11:24
|
Гуру
     
Группа: Модераторы
Сообщений: 4 011
Регистрация: 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
|
|
|
|
|
Jul 24 2017, 11:38
|
Участник

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

|
Цитата(iosifk @ Jul 24 2017, 14:24)  Расклад такой. Если данные идут только по одной lvds паре, то Вы в проекте должны сделать преобразователь послед->паралл. И к нему на самом входе только добавить примитив "lvds-буфер". При этом весь проект делайте, как FPGA_core и к нему на самом верхнем уровне добавляйте "lvds-буфер". А для RTL симуляции берите только FPGA_core. В старом тестбенче, xlt у Вас данные вычитываются байтами, сделайте преобразователь "парр->послед". И этого достаточно. Если хотите подробнее, могу рассказать по скайпу. Удачи! Спасибо. Приём таких данных в ПЛИС - ситуация типовая и всё расписано самим Xilinx, и в этом я разобрался. У меня было некоторое непонимание, как грамотно создать такой поток данных для моделирования.
|
|
|
|
|
Jul 24 2017, 11:48
|
Местный
  
Группа: Свой
Сообщений: 214
Регистрация: 26-05-05
Пользователь №: 5 397

|
Цитата(sqrt(2) @ Jul 24 2017, 18:38)  Спасибо.
Приём таких данных в ПЛИС - ситуация типовая и всё расписано самим Xilinx, и в этом я разобрался.
У меня было некоторое непонимание, как грамотно создать такой поток данных для моделирования. На уровне моделирования вовсе не обязательно генерировать отрицательный провод, достаточно одного позитива, всё равно вы в симуляторе уровни lvds не воссоздадите. А для параллельно-последовательных преобразований иногда используется описанный вами выше мультиплексорный метод, но чаще все же, применяют сдвиговый регистр.
|
|
|
|
|
Jul 24 2017, 12:24
|
Профессионал
    
Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757

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