Был один эксперимент по созданию RTL кода для PCI-Express 1x версии 1.1. Вышло все следующим образом: - использовали ПЛИС фирмы Xilinx Spartan6 в нем есть GTP (высокоскоростной приемо-передатчик - компонент GTP_DUAL) и аппаратное ядро EndPoint (часть Physical Level, Data-Link Level и часть Transaction Level - компонент PCIE_A1) и дописали мы оставшуюся часть Transaction Level c DMA контроллером. На тестовых ПЭВМ все работало "как из пушки" суточные прогоны, повышенные температуры все нас радовало. Мы успокоились, первый раз использовали ядра в проектах и все шло как по маслу. Новая технология позволяла быстро создавать проекты, но во время сдачи проекта на эталонных ПЭВМ заказчика изделие работало 10 минут в режиме DMA и останавливалось. Мы использовали различные ПЭВМ одного типа и различные экземпляры устройств - поведение было одинаковым. После долгих разбирательств выяснили что на этих чипсетах после 10 минут интенсивного обмена заканчивались "кредиты" в системе управления буферами (flow control). Ситуация ужасная все подписано и согласовано а изделие не работает, заменить ПЭВМ или ПЛИС в изделии заказчик отказывается его тоже поджимают сроки. Ничего лучше не придумали как переписать аппаратное ядро (компонент PCIE_A1) и получилось, думали времени год убъем, оказалось написали за месяц отладили еще где-то за 3 и почти за полгода получили сырой но вполне рабочий вариант!!! Проект сдали где-то в начале 2012 года. Писать пришлось тяжело, ведь спецификацию нижлежащих слоев мы знали поверхностно. Реализовывал все один человек, правда работать ему приходилось без выходных и более 8 часов в день. Неудалось реализовать скремблирование на физическом уровне, т.к. времени начальство не дало, и без него все прекрасно работало, поэтому обошлись без него. Возможно этот код нужно по оптимизировать по быстродействию но нам хватало скорости которое изделие выдавало, приблизительно половина от заявленной в спецификации!!!
|