Я программирую Xilinx Spartan-6 на основе OpalKelly для своей магистерской диссертации в университете. Если быть точным, это ПЛИС, над которой я работаю (XEM6010-LX45): https://www.opalkelly.com/products/xem6010/
Он установлен на плате, которая должна собирать несколько сигналов (8+), обрабатывать их и генерировать несколько (16+), чтобы закрыть некоторые петли обратной связи в зависимости от настроек.
Он управляется пользовательским интерфейсом, созданным на C#, который я также программирую сам, и который должен иметь возможность изменять используемую логику обратной связи, когда это необходимо, без перезапуска эксперимента. Это означает, что интерфейс USB постоянно отправляет данные для обновления настроек.
Я только что столкнулся с классической (я полагаю) проблемой, когда у меня закончились WireIns, которые представляют собой реализацию Opal Kelly для передачи данных через USB из программы C # в FPGA.
Они ограничены 16-битными данными с адресами от 0x00 до 0x1F (то есть 32 WireIn). Подробнее здесь, на странице 41 http://assets00.opalkelly.com/library/FrontPanel-UM.pdf
Вот вопрос: как я могу увеличить данные, которые я могу отправить на FPGA?
Первая идея, которая приходит на ум, — это большой мультиплексор в FPGA, который просто использует два WireIn, один для данных, другой в качестве селектора. Затем триггер активирует FPGA, сохраняя данные в регистре с правильным адресом.
Это действительно жизнеспособно или невероятно неэффективно? Должен ли я использовать WireORs (см. руководство по FrontPanel, на которое я ссылаюсь)? Должен ли я использовать PipeIn и каким-то образом управлять требуемым мультиплексором?
Как разработчики ПЛИС преодолевают этот предел связи через USB?
Заранее спасибо!