Задача следующая: в системе есть работающий OLED дисплей резолюцией 320хRGBx240, 6 бит на цвет (т.е. 18 бит на пискель). Входной видео тайминг данного OLEDа включает горизонтальный и вертикальный syncs (VSYNC, HSYNC), data valid (DV) и ессно клок данных (на пиксель по 3 клока).
Есть блок в FPGA который форматирует все это в 18 бит выход с соотв. частотой клока и syncs.
Тайминг его таков что его syncs идут шириной в один клок и сразу следом наичается DV и данные. Т.е. на выходе форамтирующего блока FPGA идут данные шириной 18 бит так что на 320 пикселей в строке идет 321 клок (320 клока данных + один клок sync который либо HSYNC при переходе строки либо HSYNC одновременно с VSYNC при переходе фрейма). Сканирование ессно progressive.
И так, bottom line: имеем на входе 321 клок в строке (каждый клок их 320 - данное, 321ый клок - sync), всего 240 строк, итого 77040 клоков на фрейм.
Нужно данный тайминг выходе форматирующего блока подогнатаь под тайминг стандартного TFT дисплея который тоже резолюцией 320хRGBx240 но его стандартный входной тайминг подогнан под стандартный TV сигнал (NTSC). Т.е. первые 7 строк - пустые, затем идет 320 строк видео, после чего еще 15 строк пустых (для обратного хода луча). Ессно есть стандартные syncs: VSYNC, HSYNC, DEN (data enable внутри строки) и PCLK (pixel clock). Каждая строка имеет длинну между соседними HSYNCs: 400 клоков, из них данных: ессно 320 клоков. Ширина пульса HSYNC - 96 клоков, ширина VSYNC - 2 строки. Значит полная ширина строки (от фронта до фронта HSYNCа): 496 клоков, ширина VSYNCа: 992 клока.
Понятно что нужен буфер памяти (FIFO) для подгонки таймингов: т.е. например буфер на время тех 22 TV строк TFT дисплея. Буфер начинает заполняться видео данными по первому VSYNC/HSYNC OLEDа в течении 22ух TFT строк (что равно примерно 35 OLED строкам), затем начинаем читать видео данные наружу на TFT. Но проблема в том что величина буфера в 22 TFT строке не будет постоянной ибо кол-во клоков в каждой строке TFT значительно больше кол-ва клоков строки OLEDа.
Как мне кажется, буфер со временем переполниться вследствии разницы в длине строк (в клоках), т.е. будет нарастающее запаздывание считывания по сравнению с записью.
Забыл отметить: выход OLEDа (вход буфера) и вход TFT (выход буфера) идут по одному клоку, т.е. на одной частоте.
Действительно ли FIFO буфер в таком случае будет переполняться и получиться бардак ? Или я не совсем правильно это себе представляю ?
Спасибо.