Как обрабатывать несколько одновременных входов в FIFO? - PullRequest
0 голосов
/ 26 апреля 2019

Мой код verilog генерирует сигналы линейного изменения ЦАП (канал, значение) для 8 каналов.Я добавляю эту функциональность в проект, который уже имеет контроллер / коммуникатор ЦАП и связанный с ним FIFO.Я хотел бы добавить данные, которые я генерирую одновременно для всех 8 каналов, к этому существующему FIFO.Я легко сделал это для одного канала, но я не уверен, что лучший способ включить все каналы.

Пандусы не очень быстрые, и все часы имеют частоту 50 МГц.Итак, у меня много тактов (~ 150+) для работы.Однако данные могут поступать из нескольких каналов в одном такте.

Должен ли я создать 8 FIFO (достаточно больших для нескольких инструкций), по 1 на канал?Или есть более эффективный способ сделать это?

Если я потеряю случайную точку данных, это не будет большой проблемой.

1 Ответ

0 голосов
/ 26 апреля 2019

Не уверен, является ли это простым CDC fifo или чем-то еще, но это можно сделать разными способами, если у вас есть достаточно времени до прибытия следующего пакета данных, то вы можете:

  • (1) В домене push внедрить простой алгоритм циклического перебора, который будет последовательно передавать данные из каждого канала. Возможно, вы захотите добавить 3-битный сигнал боковой полосы для идентификации канала, чтобы поп-домен мог распространять его дальше на основе фактического источника данных.
  • (2) объединяет все данные перед отправкой в ​​FIFO и просто делает ширину порта данных FIFO равной ширине 8х входных каналов. В поп-домене Вы можете снова деагрегировать его (при необходимости), позиционирование должно быть детерминированным, поэтому эта операция будет очень простой.

Если требуется более сложное управление потоком данных, вы можете быть вынуждены использовать 8 отдельных FIFO.

...