2D-акселератор

2d_graphicsМожет, кто забыл, но наши программисты в своё время сделали 2d графический ускоритель на FPGA для прибора Беркут-ЕТ. Это дало возможность не думать о том, что графики и диаграммы сложной структуры будут строиться слишком долго и тормозить работу основной части программы. Сейчас любой график отрисовывается практически мгновенно, чего не скажешь о графической подсистеме, например, Беркут-E1, где всё делает довольно медленный для такой задачи процессор.

Акселератор умеет строить прямые линии, прямоугольники и окружности (производительность в «попугаях», конечно, надо уточнить). А чего это стоило, ребята расскажут сами:

Сергей Колемагин:

Да, действительно, графический акселератор в Беркут-ET существует, и при этом даже работает на частоте 50 МГц, то есть позволяет рисовать 50 Mpix/с, что для дисплея Беркут-ET, имеющего размеры 320х240 — хороший показатель. Любой графический примитив отрисовывается за незаметное для человеческого глаза время.

Количество цветов на данный момент ограничено 8, но это связано только с объемом памяти, выделяемой под framebuffer. Сам акселератор без проблем сможет работать и с цветом большей глубины.

На данный момент акселератор может выполнять следующие операции:
— рисовать линии по алгоритму Брезенхема;
— рисовать закрашенные прямоугольники (без поворота);
— строить дуги произвольного размаха (аппаратно, с помощью драйвера на основе этого примитива рисуются окружности и сектора);
— выводить на экран текст, причем шрифты могут подгружаться в память прибора, и на данный момент Беркут-ET может рисовать на экране шрифты трех различных размеров.

Отмечу, что, к сожалению, функция рисования треугольника так и не была включена в список функций акселератора, несмотря на то, что для ее реализации было испробовано 2 алгоритма. Хотя, опираясь на уже накопленный опыт, сейчас ее реализовать особого труда не составит. Была бы только востребована…
Также есть возможность реализовать поворот примитивов, хотя бы на фиксированный угол (удобно было бы выводить текст, например, для подписей к графикам).

Так что, заканчивая вступление, скажу, что наш графический акселератор может, конечно, не все, но своего потенциала еще не исчерпал.
Если же у кого-то возникнут вопросы о том, как функционируют уже существующие его части — обращайтесь, мы обязательно ответим!

3 комментария

  1. Павел Курочкин:

    надо кружки для чего-нибудь задействовать уже, наконец.
    может для bandwidth allocation?

  2. Антон Фельдман:

    а давайте исходники опубликуем? на opencores, например.

  3. sk:

    Да, надо заняться и тем, и тем. А может, еще и треугольник поднимем? ))