Как мультиплексировать потоки AXI с помощью TDEST?

В Xilinx Vivado я хотел бы буферизовать 8 независимых потоков AXI через "контроллер виртуального FIFO AXI". Насколько я понимаю, 8 потоков должны сначала быть мультиплексированы в один поток с помощью "переключателя AXI4-Stream", а затем демультиплексированы с помощью второго "переключателя AXI4-Stream".

Переключатель демультиплексирования "axis_switch_0" использует сигнал "tdest", чтобы определить, на какой интерфейс Mxx_AXIS отправлять каждую передачу. Сигнал "tdest" проходит через "контроллер виртуального FIFO AXI".

Но я не могу понять, как сделать так, чтобы переключатель мультиплексирования "axis_switch_1" выдавал сигнал "tdest" на основе интерфейса Sxx_AXIS, с которого пришла каждая передача.

Любые идеи?

РЕДАКТИРОВАТЬ

Вот что произойдет, если я включу TDEST или TUSER в "переключателе AXI4-Stream". Не знаю, как 3-битный TDEST/TUSER на главном интерфейсе становится 24-битным на подчиненных интерфейсах.

3 ответа

Читая отчеты людей, которые пытались и не могли делать похожие вещи, в конце концов стало ясно, что «контроллер AXI Virtual FIFO» и «переключатель AXI4-Stream» просто неспособны к мультиплексированию и буферизации потоков. Не знаю, каково их истинное предназначение. Но они не могут этого сделать. Хочешь верь, хочешь нет.

Закончил реализацию всего на HDL.

Попробуйте включить сигнал TUSER и жестко закодировать ведомую сторону на 0-7, чтобы указать, с какого ведомого устройства пришли данные.

https://i.sta ck.imgur.com/boWfp.png

На входе мультиплексора 24 бита для TDEST обрабатываются аналогично данным или любым другим сигналам. Биты 2:0 должны быть подключены к TDEST[2:0] от/для входа S00, биты 5:3 должны быть подключены к TDEST[2:0] от входа S01, биты 8:6 ... биты 23:21 для S07. 8 каналов * 3 бита на канал = 24 бита. Данные те же. Все, что вы поместите в TDEST на S00, появится на другом конце вашего демультиплексора и разделит его на любой вывод, который у вас есть для этого адреса.

Если вы хотите, чтобы данные, отправляемые на порт S03 оси_коммутатора_0, выходили из порта M03 оси_коммутатора_1, и ваша адресация в оси_коммутатора_1 настроена таким образом, что TDEST=011 направляет данные на M03, тогда установите биты TDEST[11:9]=3'b011 на оси_коммутатора0, когда отправив этот пакет.

Другие вопросы по тегам