sqrt(2) 0 24 июля, 2017 Опубликовано 24 июля, 2017 · Жалоба Здравствуйте. Есть некоторый проект для ПЛИС, полностью отлаженый. Однако отладка проводилась без обвязки АЦП. Добавил обвязку АЦП. Проблема в том, что до этого я моделировал данные с АЦП в виде шин с нужной разрядностью, но в моем случае данные с АЦП поступают на ПЛИС в дифф. виде (LVDS) и мне надо отдельно собирать их в шины. Как собирать - я разобрался, осталось только промоделировать. И вот тут я не совсем понимаю, как это моделировать. До этого у меня была такая система - я в Матлабе генерировал нужный сигнал, записывал его в файл, в тестбенче его читал и гонял по шинам. Подскажите пожалуйста, как такие потоки параллельных данных превращать в потоки последовательных? Может стоит использовать какие-то примитивы от производителя ПЛИС, для упрощения (использую Xilinx 7й серии)? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 16 24 июля, 2017 Опубликовано 24 июля, 2017 · Жалоба Есть некоторый проект для ПЛИС, полностью отлаженый. Однако отладка проводилась без обвязки АЦП. Добавил обвязку АЦП. Проблема в том, что до этого я моделировал данные с АЦП в виде шин с нужной разрядностью, но в моем случае данные с АЦП поступают на ПЛИС в дифф. виде (LVDS) и мне надо отдельно собирать их в шины.Всё смешалось в кучу. LVDS и формат данных вещи независимые. Параллельный интерфейс тоже может быть LVDS-ным. Или вы хотите сказать, что в модели у вас был АЦП с параллельным интерфейсом, а реальный с последовательным? Как собирать - я разобрался, осталось только промоделировать. И вот тут я не совсем понимаю, как это моделировать. До этого у меня была такая система - я в Матлабе генерировал нужный сигнал, записывал его в файл, в тестбенче его читал и гонял по шинам. Подскажите пожалуйста, как такие потоки параллельных данных превращать в потоки последовательных? Ну так и делаете в тетсбенче: читаете из файла слово, выдаёте его на свой приёмник побитно. В чём проблема? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sqrt(2) 0 24 июля, 2017 Опубликовано 24 июля, 2017 · Жалоба Например, считываю из файла в виде вектора x из 14 бит. Сигнал с АЦП - два провода, data_P, data_N. Беру бит за битом вектор x: data_bit <= x(i), где i - номер текущего читаемого бита. Правильно я понимаю, что в итоге должно получаться так: data_P <= data_bit, data_N <= not data_bit ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 16 24 июля, 2017 Опубликовано 24 июля, 2017 · Жалоба Да, верно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 24 июля, 2017 Опубликовано 24 июля, 2017 · Жалоба Например, считываю из файла в виде вектора 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) 0 24 июля, 2017 Опубликовано 24 июля, 2017 · Жалоба Расклад такой. Если данные идут только по одной lvds паре, то Вы в проекте должны сделать преобразователь послед->паралл. И к нему на самом входе только добавить примитив "lvds-буфер". При этом весь проект делайте, как FPGA_core и к нему на самом верхнем уровне добавляйте "lvds-буфер". А для RTL симуляции берите только FPGA_core. В старом тестбенче, xlt у Вас данные вычитываются байтами, сделайте преобразователь "парр->послед". И этого достаточно. Если хотите подробнее, могу рассказать по скайпу. Удачи! Спасибо. Приём таких данных в ПЛИС - ситуация типовая и всё расписано самим Xilinx, и в этом я разобрался. У меня было некоторое непонимание, как грамотно создать такой поток данных для моделирования. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Magnum 0 24 июля, 2017 Опубликовано 24 июля, 2017 · Жалоба Спасибо. Приём таких данных в ПЛИС - ситуация типовая и всё расписано самим Xilinx, и в этом я разобрался. У меня было некоторое непонимание, как грамотно создать такой поток данных для моделирования. На уровне моделирования вовсе не обязательно генерировать отрицательный провод, достаточно одного позитива, всё равно вы в симуляторе уровни lvds не воссоздадите. А для параллельно-последовательных преобразований иногда используется описанный вами выше мультиплексорный метод, но чаще все же, применяют сдвиговый регистр. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 16 24 июля, 2017 Опубликовано 24 июля, 2017 · Жалоба На уровне моделирования вовсе не обязательно генерировать отрицательный провод, достаточно одного позитива, всё равно вы в симуляторе уровни lvds не воссоздадите.Если при моделировании используются примитивы IBUFDS, то нужна полная пара, иначе через эти буферы ничего не пройдёт. Уровней LVDS, естественно, не будет, но прямой и инверсный сигналы нужны. А для параллельно-последовательных преобразований иногда используется описанный вами выше мультиплексорный метод, но чаще все же, применяют сдвиговый регистр.В тестбенче всё равно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться