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

Parralel to differential: моделирование потока данных с АЦП

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

 

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

 

До этого у меня была такая система - я в Матлабе генерировал нужный сигнал, записывал его в файл, в тестбенче его читал и гонял по шинам. Подскажите пожалуйста, как такие потоки параллельных данных превращать в потоки последовательных? Может стоит использовать какие-то примитивы от производителя ПЛИС, для упрощения (использую Xilinx 7й серии)?

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


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

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

 

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

 

До этого у меня была такая система - я в Матлабе генерировал нужный сигнал, записывал его в файл, в тестбенче его читал и гонял по шинам. Подскажите пожалуйста, как такие потоки параллельных данных превращать в потоки последовательных?

Ну так и делаете в тетсбенче: читаете из файла слово, выдаёте его на свой приёмник побитно. В чём проблема?

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


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

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

 

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

 

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

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


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

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

Если хотите подробнее, могу рассказать по скайпу.

Удачи!

 

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


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

Расклад такой. Если данные идут только по одной lvds паре, то Вы в проекте должны сделать преобразователь послед->паралл. И к нему на самом входе только добавить примитив "lvds-буфер". При этом весь проект делайте, как FPGA_core и к нему на самом верхнем уровне добавляйте "lvds-буфер". А для RTL симуляции берите только FPGA_core.

В старом тестбенче, xlt у Вас данные вычитываются байтами, сделайте преобразователь "парр->послед". И этого достаточно.

Если хотите подробнее, могу рассказать по скайпу.

Удачи!

Спасибо.

 

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

 

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

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


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

Спасибо.

 

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

 

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

 

На уровне моделирования вовсе не обязательно генерировать отрицательный провод, достаточно одного позитива, всё равно вы в симуляторе уровни lvds не воссоздадите. А для параллельно-последовательных преобразований иногда используется описанный вами выше мультиплексорный метод, но чаще все же, применяют сдвиговый регистр.

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


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

На уровне моделирования вовсе не обязательно генерировать отрицательный провод, достаточно одного позитива, всё равно вы в симуляторе уровни lvds не воссоздадите.
Если при моделировании используются примитивы IBUFDS, то нужна полная пара, иначе через эти буферы ничего не пройдёт. Уровней LVDS, естественно, не будет, но прямой и инверсный сигналы нужны.

 

А для параллельно-последовательных преобразований иногда используется описанный вами выше мультиплексорный метод, но чаще все же, применяют сдвиговый регистр.
В тестбенче всё равно.

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


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

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

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

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

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

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

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

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

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

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