Астрофотокамера на 33 мегапикселя

Несколько лет назад нам с товарищем удалось приобрести на ebay несколько CCD матриц компании DALSA. На 22 и 33 мегапикселя, форматом 36 на 48 миллиметров, применяются в среднеформатных камерах MAMIYA. Квантовая эффективность составляет 15%, что конечно маловато для астрофотокамеры. Однако решили попробовать силы и запустить их в обвязке с АЦП и ПЛИС.

Первая, точнее первые, версии дизайна имели странности в работе и вызывали пропуски строк в кадре. Я не мог уделить много внимания проекту, и он закончился на почти работающем устройстве. Если не учитывать эпизодические пропуски строк. Вся эта история отображена на астрофоруме.

Мой личный список индульгенций незаконченным проектам содержал пункт довести эту астрокамеру до нормальной работы. Поэтому я переписал проект с нуля, дабы не тащить в него потенциальную ошибку. В проекте использовал ту же библиотеку fpgalink. И, как ни странно, получил те же пропуски данных. Это уже стало интересным. Дальнейшее долгое разбирательство показало что причина крылась в FIFO очереди, которая применяется для буферизации данных с CCD в USB. Очередь содержала лишний байт, который туда никто не записывал. И этот байт содержится еще до запуска. Разумеется никакого байта в очереди нет, это просто несовпадение указателей. Однако в механизме проверки пустоты очереди это казалось лишним байтом. Который в свою очередь приводил к смещению потока данных. К изменению размера блока данных и к необходимости читать данные построчно а не по кадрам. А уже чтение по строкам приводило к неконтролируемым паузам между запросами чтения к камере. И, если пауза была больше 1 мс, буфер FIFO переполнялся и возникал разрыв в изображении. Яркий пример каскада ошибок.

Эта особенность FIFO устраняется, как оказалось, флажком first word fall through при генерации IP ядра. После этого пропал лишний байт. Отпала необходимость читать кадр построчно. Библиотека fpglink стала прекрасно справляться и вычитывала весь кадр без нареканий. Программное обеспечение переписывается, камера работает. Новый проект на github.


2019-06-22