Отлаживаем SATA контроллер в кристалле Virtex5. Режим работы - SATA2.0 (3Гбита).
При коротких пересылках по 1-2 сектора всё работает хорошо. А вот при передачи больших объёмов данных, при блоках больше 4 секторов возникают проблемы:
1. Высокий уровень ошибок CRC на шине. На приёме от дисковода - ~2 ошибки на 15Гб, на передаче те же 2, но на 100Мб.
2. Зависания шины. Причём на двух разных дисководах это проявляется по разному.
Один в какой-то момент не подтверждает приём данных и далее не реагирует ни на какие команды.
Второй подтверждает приём, но далее также ни на что не реагирует.
Выяснили, что всегда (по крайней мере в большинстве случаев) зависанию предшествует передача символа Align во время фазы данных. В спецификации нет никаких запретов на выдачу Align'а. Хотя опытным путём выяснили, что если выравнивание происходит во время старта кадра - шина также виснет. Хорошо, эту ситуацию зарубили. Но что делать с выравниванием во время прохождения обычного тела кадра?
Возможно, проблема в линии - вероятно, сбой происходит именно в момент выравнивания и это вешает шину.
Подключение по стандартной схеме: на всех линиях стоят конденсаторы 10nF. Все питания в норме. Во всех каналах ситуация одна и та же. Регулировка амплитуды сигнала не даёт толком ничего. PCI-E в этом же кристалле работает без проблем.