https://disk.360.yandex.ru/d/Uqpr_k25pB1P5A
более синхронный дизайн
Вид для печати
https://disk.360.yandex.ru/d/Uqpr_k25pB1P5A
более синхронный дизайн
можно и без "ядер" обойтись))) вот тут все изящно и красиво и самое главное - портируемо на любой FPGA!!
без привязки к несовместимым библиотечным элементам от производителя кристалла FPGA
звук. хдми делается просто. а вот звук.
Все не так просто. Одно дело генерировать видео а другое дело адаптировать существующий видеовыход.
Проблема интеграции контроллера 6845 (Amstrad CPC) с HDMI:
Для стандарта HDMI 720p (PAL) требуется 625 строк. Контроллер 6845 по умолчанию генерирует 312 строк. Даже с учетом теоретической возможности получить 312.5, на практике используется 312.
Это делает метод удвоения строк неприменимым. Наиболее простым и гарантированным решением видится полный захват кадра в буфер.
Рекомендация: Продолжить разработку с использованием полнокадрового буфера.
Моя цель: Параллельно я буду искать решение, позволяющее избежать захвата всего кадра.
Преобразование временных параметров видеопотока
Имеется два видеопотока с разным строчным разложением.
Исходный кадр:
Строки: 1, 2, 3, 4
Время строки: l1
Время кадра: f1 = l1 * 4
Выходной кадр:
Строки: A, B, C, D, E, F, G, H, J
Время строки: l2
Время кадра: f2 = l2 * 9
Алгоритм преобразования строк
Для преобразования 4 строк в 9 используется метод дублирования:
Каждая исходная строка дублируется дважды.
Поскольку 4 * 2 = 8, а требуется 9 строк, последняя (четвертая) строка дублируется трижды.
Результат преобразования:
1, 1, 2, 2, 3, 3, 4, 4, 4
Синхронизация временных параметров
Требуется выполнить два условия синхронизации:
✅ Условие 1: l1 == l2 / 2
Это условие выполняется за счет настройки длительности строки.
Пример: Если l1 = 64 мкс, то l2 = 32 мкс.
❌ Проблема с Условием 2: f1 == f2
При попытке выполнить это условие возникает несоответствие:
f1 = l1 * 4
f2 = l2 * 9
Подставляя условие l2 = l1 / 2, получаем:
f2 = (l1/2) * 9 = l1 * 4.5
Вывод:
f1 = l1 * 4
f2 = l1 * 4.5
Для исходного потока из 4 строк и выходного из 9 строк, где каждая входная строка дублируется, невозможно одновременно соблюсти оба условия:
Время новой строки равно половине времени исходной (l2 = l1 / 2).
Времена кадров обоих потоков равны (f1 = f2).
Это противоречие возникает из-за того, что отношение количества строк (9/4 = 2.25) не равно отношению длительностей строк (2/1 = 2).
Все упирается в коэффициент совместимости. И если мы хотим, чтобы просто работала операционная система, то можно менять все что угодно. Но если мы хотим полной совместимости, там где приложение использует прерывание, который кстати у Amstrad несколько в одном кадре, для того, чтобы изменить какой-либо регистр видеоконтроллера или палитры, Требуется очень точное соблюдение временных характеристик всей системы. Разработчик выбирает, что для него важнее полная совместимость или минимизация сложности системы. Я очень сильно стараюсь сделать стопроцентную совместимость, но боюсь, что это будет невозможно. Рано делать какие-то выводы.
Однако, замечу, что даже небольшой изменение частоты входных строк приводит к необходимости буферизации всего кадра из-за накопления ошибки. Если у RW9UAO уже есть рабочее решение с буферизации всего кадра, то лучше оставаться с этим вариантом до тех пор пока не появится лучшая альтернатива. А я надеюсь, что она появится.
нет у меня 600кб на весь кадр. от силы 64кб.
Позвольте "вставить пять копеек". Для полной совместимости оставить стандартный аналоговый видеовыход с ТВ-развёрткой, и использовать пропатченный подходящий монитор.