Визуальная электроника

Вот и пришло время выпустить новую отладочную плату, основанную на новом семействе Cyclone 10 компании Intel. Мир не стоит на месте, и наша новая плата обзавелась SDRAM памятью, 1Gbit ethernet интерфейсом ну и конечно современным HDMI портом. Взамен морально устаревшего VGA пришли чисто цифровые видео интерфейсы, сначала DVI-D , затем HDMI и DisplayPort. В этой статье мы расскажем о создании HDMI интерфейса для систем, содержащих в своем составе FPGA. Мое знакомство с HDMI началось вот с этой статьи - HDMI. Там же есть ссылки на всю базовую информацию.

Схема полученного формирователя HDMI сигнала:

pic1

Так-же как в VGA, сигналы управления Hsync, Vsync и Vdе вырабатывает синхрогенератор (VHgen). А сигналы RGB в отличие от VGA поступают не на ЦАПы , а на три TMDS-энкодера, которые преобразуют 8-ми битные сигналы цветности и два управляющих сигнала (с0,с1) в 10-битные. В синем канале в качестве управляющих сигналов передаются Hsync и Vsync. Управляющие сигналы зеленого и красного каналов в DVI не используются.

Цели у TMDS преобразования две - уменьшение количества изменений состояния и баланс постоянной составляющей.

Затем сигналы поступают на сериалайзер и далее на дифференциальный выход. Так-же на диф-выход поступает и пиксель-клок. В принципе все довольно просто и в приведенной выше ссылке есть пример проекта, который можно использовать практически без переделки. Правда разрешение там небольшое - 640х480, зато будет работать на любом мониторе или даже телевизоре.

У большинства современных телевизоров довольно большой список поддерживаемых режимов. Вот например режимы телевизора Samsung , на котором я делал свои эксперименты:

pic2

Меняя частоту пиксель-клока и параметры синхрогенератора можно реализовать любое разрешение, но есть одно "но". Максимальная частота глобал-клока нашего чипа Cyclone10 400 МГЦ а на сериалайзер нужно подавать частоту в десять раз больше пиксель-клока. Таким образом, будут работать разрешения с частотами до 40МГЦ. Что-же делать если хочется больше?

Можно посмотреть выходной пин нашего чипа в Altera Quartus II "Resource Property Editor":

pic3

В его составе есть элемент "DDIO OUT". Он состоит из двух триггеров, выходы которых подключены к паду через мультиплексор. Практически, это уже встроенный в каждый пин сериалайзер 2х1. Это простое техническое решение позволяет повысить битрейт на выходной ножке относительно клока в два раза. Для его использования в проекте есть библиотечный компонент "altddio_out", но поскольку нам на выходе нужен дифференциальный сигнал, то на каждый канал (в том числе и на клок) нам понадобится по два таких компонента , один для положительного выхода и второй, на котором входные сигналы проинвертированы, для отрицательного.

pic4

Кроме того в проекте теперь понадобится по два пятибитных сериалайзера вместо каждого десятибитного, и соответственно понизить клок для сериалайзинга в два раза. Теперь , после этих доработок, нам становятся доступными разрешения, с пиксель-клоком до 80 МГЦ.

В качестве примера мы взяли из списка самое "телевизионное" разрешение - 1280х720 с клоком 74 МГЦ.

Фото полученной картинки:

pic5

Исходники проекта:

Скачать: firstc10_hdmi.zip

Добавить комментарий