Специализированный
I/O-контроллер

Задача

С некоторыми проектами, кажется, сразу понимаешь, что и как надо делать, но в процессе работы проявляются тонкости, нюансы, ограничения. Иногда приходится в корне менять выбранную вначале идеологию. Но бывают и более экзотические случаи. Как раз про один из них эта статья.

Наш заказчик заложил в свой проект плату контроллера ввода/вывода от всем известного производителя 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

Технические характеристики разработанного продукта не разглашаются по требованию заказчика.

Благодаря своей надежности устройство стало неотъемлемой частью крупного комплекса и продолжает устанавливаться на новые объекты.