2016-06-06 3 views
0

Я генерирую определенный сигнал (цифровой импульс) в одном из моих модулей verilog, работающих на программируемой логике в чипе Xilinx Zynq. Сигнал довольно быстрый, с тактовой частотой около 200 МГц. У меня также есть простой интерфейс Qt linux и framebuffer, который работает для последующего управления моим приложением.Тип осциллографа с интерфейсом FPGA PL и PS framebuffer?

Как я могу пробовать свой сигнал, чтобы сделать осциллограф как интерфейс внутри моего приложения Qt? Я хочу быть в состоянии представить визуальную форму пульса, который я генерирую.

Что мне нужно использовать, чтобы иметь возможность пробовать достаточно данных на такой тактовой частоте? И как передать его с помощью модуля ядра или mmap в Qt?

ответ

0

Вы бы сделали все, чтобы сделать то, что делают большинство осциллографов: проведите данные в ОЗУ и только затем передайте их в процессор для отображения/аналайса, в более «расслабленном» темпе.

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

Конечный автомат затем заполняет образцы в буфер, состоящий из одного или нескольких блоков. Если вы хотите разместить триггер где-то посередине взятых образцов, вы должны использовать его в качестве циклического буфера и постоянно записывать его, останавливая настраиваемое количество выборок после триггера, чтобы оставалось некоторое количество до состояния триггера после чего он перезаписывается новыми.

Поскольку блок-плейеры FPGA обычно представляют собой два порта, вы можете просто подключить другой порт к вашей шине CPU для считывания. Вероятно, вы захотите, чтобы регистр считывал состояние конечного автомата выборки, и если вы идете с использованием циклического буфера, адрес, где он остановлен, чтобы вы могли развернуть данные до линейной записи времени.

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

Вы также можете увидеть, есть ли в ЦПУ какие-либо высокоскоростные интерфейсы, которые вы могли бы использовать - например, они могут быть предназначены для видео.

Также представляется, что вы измеряете только цифровой сигнал, т. Е. Один бит. Если вы хотите обрабатывать более высокую частоту дискретизации, чем может поддерживать ткань FPGA, это может означать, что вы могли бы использовать что-то вроде блока десериализатора на краю FPGA, чтобы превратить 1-битный входной поток в более медленный поток более широких выборок хранить.

С точки зрения вывода, как только у вас есть вектор выборок в буфере, довольно просто превратить это в сюжет области типа/логического анализатора, с таким же масштабированием, аннотацией курсора, автоматическим измерением или тем, что вам нравится.

Также не забывайте, что если целью является только использование этого во время разработки, FPGA и их инструменты часто имеют возможность создавать логический анализатор прямо в дизайне, а данные, заявленные через интерфейс программирования для построения на ПК.

Смежные вопросы