Всем, здравствуйте. Делаю систему на FPGA на основе xapp1052 для двусторонней передачи данных FPGA Spartan-6 (кит sp605) - оперативка. Передача данных из оперативки в FPGA осуществляется следующим образом: FPGA отправляет транзакцию MRd с соответствующими адресом, тегом и размером запрашиваемых данных, в ответ приходит транзакция CPLD с данными.
Столкнулся со следующей проблемой, нарушается порядок следования транзакций CPLD. Т.е. я отправляю транзакции MRd с адресами данных последовательно, и теги в транзакциях MRd идут последовательно 1, 2, 3, ... 1F, 0, 1 ... а в ответ периодически приходят CPLD с нарушенным порядком. Например, сначала CPLD с тегом 2, потом CPLD с тегом 4, потом CPLD с тегом 5, потом CPLD с тегом 3, потом CPLD с тегом 6. И данные, соответственно, лежащая по адресам, соответствующим тегам. В результате в принимаемом на стороне FPGA файле данные перемешиваются.
Пробовал выставлять всем транзакциям MRd одинаковый тег, данные все равно перемешиваются, хоть и CPLD идут с одинаковым тегом.
Читал спецификацию PCI-Express, но так и не понял, это такая особенность PCI-Express, что ему разрешено менять порядок транзакций CPLD во избежании Deadlock'ов или дело в чем-то другом? Причем такая фишка у меня только в компах под управлением 64-разрядной операционки (Linux). В 32-разрядных Linux всё ОК.
Кто-нибудь сталкивался с подобной проблемой? Что можете посоветовать?
|