Задача
С некоторыми проектами, кажется, сразу понимаешь, что и как надо делать, но в процессе работы проявляются тонкости, нюансы, ограничения. Иногда приходится в корне менять выбранную вначале идеологию. Но бывают и более экзотические случаи. Как раз про один из них эта статья.
Наш заказчик заложил в свой проект плату контроллера ввода/вывода от всем известного производителя Advantech. Это была карта PCI, а к ней подключалось 8 коаксиальных кабелей, по которым приходили сигналы с TTL-уровнями. Advantech должен был фиксировать фронт переключения состояния входного сигнала и выдавать прерывание. Номер прерывания зависел от того, с какого входа приходило переключение. И все работало — более или менее.
Проблема возникала только тогда, когда входные воздействия становились частыми и начинали приходить по нескольким каналам почти одновременно (с небольшой разницей во времени). В такой ситуации некоторые прерывания начинали теряться. Для заказчика было критически важно не терять прерывания. Его программисты никак не могли решить эту проблему. Они пытались искать ошибки в своем коде, связывались со службой поддержки Advantech, плясали с бубном, но прерывания все терялись и терялись.
Узнав об этой проблеме, мы предложили свои услуги по проведению экспертной оценки. Но заказчик заверил нас, что в этом нет необходимости, т.к. они уже испробовали все что можно. Вместо этого заказчик попросил нас оценить сроки и стоимость работ по проектированию и производству нескольких десятков аналогичных контроллеров.
Казалось бы, можно взять готовый микроконтроллер с 8 логическими входами, связать его по PCI (через мост PLX, правда, не очень дешевый), и он будет запоминать в буфере накопленные прерывания, а когда есть возможность, выдавать их в PCI. Но такое решение категорически не устраивало заказчика. По его мнению, если даже Advantech не справился с проблемой, то плата с простеньким микроконтроллером тем более не вызывает доверия. К тому же генеральный заказчик всего проекта, будучи в курсе возникших проблем, теперь требовал дополнительных гарантий надежности.
Тогда было решено усложнить проект, используя в качестве контроллера прерываний ПЛИС.
Решение
Наши аргументы были такими:
- ПЛИС справится с задачей и не потеряет ни одно прерывание (доказательством будет служить открытый код ПЛИС)
- Буфер FIFO может быть достаточно большим, и в нем будет храниться информация о значительном количестве уже пришедших, но еще не обработанных прерываний (ресурсы современных ПЛИС позволяют сделать буфер больше, чем в любой готовой микросхеме)
- С помощью ПЛИС можно реализовать помехозащищенный канал с внешней платой-переходником на коаксиал, исключив тем самым вероятность возникновения внешних помех
- В ПЛИС можно также разработать независимый интерфейс удаленного аппаратного сброса станции, что важно для заказчика
Мы настаивали, что с ПЛИС ни одно прерывание не пройдет незамеченным. Все два месяца, пока мы делали работу, заказчик сомневался, что у нас и правда все получится. И после того, как мы закончили, отдельной задачей было доказать заказчику, что устройство не просто работает, а работает без ошибок и без пропусков прерываний. Дополнительно мы разработали методику тестирования и провели серию испытаний, оформив полный комплект документации в соответствии с ГОСТ и ЕСКД.
Последний этап работы был связан с тем, что генеральный заказчик сомневался в надежности крепления многожильных кабелей ULTRA-WIDE SCSI-3 для стыковки с платой-переходником.
За две недели мы доработали плату, добавив дополнительный механизм фиксации к ней разъема. В результате заказчикам некуда было деваться, кроме как выразить удовлетворение успешным завершением этого проекта. А в нашем активе оказалась полноценная разработка устройства под ключ.
Использованные технологии
Проектирование электронных схем
Методики проектирования:
- использование библиотек элементов (library based design)
- задание правил автоматического контроля соответствия параметров (electrical DRC)
- различные варианты одной схемы (variant based design)
Проектирование печатных плат
Методики проектирования:
- задание ограничений трассировки (constrained based routing)
- задание правил автоматического контроля соответствия параметров (DRC — design rules check)
- разработка под производство (DFMA — design for manufacturing and assembly)
- проектирование в соответствии со стандартами IPC
- 3D-модели механических элементов конструкции
Интерфейсы и шины:
- PCI, RS485
Проектирование ПЛИС
Целевая технология:
- Xilinx Spartan-6
Языки описания аппаратуры:
- VHDL
Методики и технологии верификации:
- задание правил соответствия (assertion-based verification)
- моделирование отдельных составных узлов (block-level simulation)
- генерация воздействий на основе генераторов случайных чисел (random /constrained random)
Разработка встроенного ПО
Операционные системы:
- Linux
- QNX
Технические характеристики разработанного продукта не разглашаются по требованию заказчика.
Благодаря своей надежности устройство стало неотъемлемой частью крупного комплекса и продолжает устанавливаться на новые объекты.