Здравствуйте! Ситуация такая: использую ядро Xilinx axi4-stream interconnect 2.1 для коммутации 8-ми потоков в один, фифо для всех слейвов настроены на пакетный режим с переключением по tlast, арбитраж установлен в режим Round-Robin, клоки слейвов и свитча одинаковы, клок мастера асинхронен им. Данные идут пачками таким образом, что все фифо заполняются одновременно на размер достаточный для переключения. На каждую пачку на входе арбитра ожидал увидеть на выходе пакеты последовательно с каждого из фифо, начиная с нулевого. Но! Первый раз выкачка началась не с нулевого, а со второго или третьего фифо. Немного удивился, но придумал, как это обойти - задержал входы каждого следующего фифо на один такт, относительно предыдущего. Т.о. нулевое фифо заполняется до момента переключения первым, затем первое фифо и т.д. Как и ожидалось, выкачка началась с нулевого фифо, НО затем арбитр перепрыгнул на 7 фифо. Порядок данных на выходе важен, поэтому меня такой вариант не устраивает. Попытался разобраться в коде ядра, но с наскока ничего не вышло. Сталкивался ли кто-то с таким поведением, и насколько оно соответствует принципу Round-Robin?
|