Добро пожаловать, Гость
Логин: Пароль: Запомнить меня

ТЕМА: ZX Spectrum, регенерация видеобуфера и помехи

ZX Spectrum, регенерация видеобуфера и помехи 9 года 10 мес. назад #3102

  • Chaosorg
  • Chaosorg аватар Автор темы
  • Не в сети
  • Завсегдатай
  • Завсегдатай
  • Сообщений: 312
  • Спасибо получено: 18
Я понимаю, что на форуме есть раздел "Проекты пользователей", но я всего лишь пытаюсь довести до более рабочего состояния проект уже размешенный на этом сайте в соответствующем разделе с примерами. Если не прав - переместите тему, пожалуйста.

Удивляет немного низкая активность в комментариях к этому проекту. Если человек, второй день как вообще учащийся что-то делать с ПЛИС, может добавить туда звук и загрузку с магнитофона, то почему другие не заметили, что игры не работают? Файлы tap конвертировал в wav, проверял wav эмулятором, умеющим их понимать - файлы нормальные. Звук подаю на ADC марсохода, результат сравнения с порогом на соответствующий разряд порта FE, работающего на чтение, т.е. порта клавиатуры. Больше в проекте, кроме опечатки, о которой отписался в комментариях к проекту, ничего не трогал. Даже river raid не загружается - загрузка прерывается всегда на одном и том же месте. Пробовал найти игру еще меньше - доходят до конца загрузки, но не работают. Заработали совсем уж маленькие.

В связи с этим (и не только) - вопросы:

1. Есть ли люди, нашедшие еще ошибки или сделавшие добавки в проекте? Расскажите о них, пожалуйста.

2. Есть ли сведения о работоспособности изначального проекта от Ewgeny7 с zx.pk.ru ? (Я там тоже попробую спросить, скорее всего).

3. Достаточно ли для замены ПЗУ просто заменить HEX файл или надо среде разработки об этом сообщить как-то? Я не вижу HEX файла в дереве проекта, почему-то.

далее вопросы уже больше по плате Марсоход и для пользы большей, чем ностальгирование по спектрумам :)

4. В ходе внесения в проект изменений никак не связанных с формированием картинки замечал, что некоторые промежуточные его версии страдали очень сильными помехами на экране. Они устранялись сами собой в следующих версиях. Особенно удобно "бороться" с ними стало после появления сравнения с константой значения из ADC для считывания с магнитофона. Меняешь константу - меняется сложность компаратора, наверное. Видимо изменяется общее количество задействованных элементов ПЛИС и их взаимное расположение и питание? Можно ли как-то влиять на это напрямую?

5. Почему такие сложности из-за смены SRAM на SDRAM? Разве в проекте, содержащем вывод на экран из памяти, надо заботиться о контролере и регенерации? Ведь регенерация получается даровая из-за вывода картинки, если правильно "перепутать" адресные линии, чтобы соседние части экрана брались из разных строк ячеек памяти. Или причина перехода на использование внутренней памяти ПЛИС для видеобуфера была только в нехватке быстродействия даже без регенерации?


С уважением.
Спасибо сказали: alman

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

ZX Spectrum, регенерация видеобуфера и помехи 9 года 10 мес. назад #3104

Я запустил проект на DE0-nano.
Некоторые соображения.
1. Формат файлов записываемых на магнитную ленту в ZX-spectrum - частотная модуляция, после конвертирования файлов tap в wav не факт что получается частотная модуляция. Надо делать или искать программу перекодирующюю tap в формат магнитной записи а потом выводить на звуковую карту.
Формат можно поискать в старых книгах по спектруму, он описан.
Еще ваниант в качестве идеи...
берем преобразователь USB-COM, выход COM на свободную ногу ПЛИС (компаратор ненужен) и программой-терминалом передаем файл tap. но это надо пробовать.
2. В проекте в папке ROM есть файл 48.hex подключаемый к компоненту lpm_rom0.
Если есть желание поменять прошивку на например Пентагон128 или другую, то ее можно взять в любой программе эмулятора ZX-spectrum например FUSE но это самое простое, далее схемная доработка проекта.
В качестве учебной тренировки и с целью дальнейшего усовершенствования проекта было бы неплохо переделать проект на менее крупные схемные модули (выделить процессор, ПЗУ, контроллр клавиатуры, видеоконтроллер, вывести шину адреса, данных, управляющие сигналы с процессора) ну а затем уже можно пробовать расширить проект.
В инете есть старые схемы доработок для спектрума например от ВМГ, их можно попробовать реализовать в ПЛИС.
3. По поводу SRAM-SDRAM у меня тоже есть сомнения, но надо переделывать контроллер, в проекте используется уже ранее разработанный вариант, описанный на этом сайте.
Спасибо сказали: Chaosorg

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

ZX Spectrum, регенерация видеобуфера и помехи 9 года 10 мес. назад #3105

Дополнительно...
Если всетаки пробовать загружать файлы через АЦП, используя его в качестве компаратора, то необходимо поставить схему устранения дребезга, которая реализуется на двух или трех тригерах (есть статьи на этом сайте "Синхронизатор сигнала для CDC на Verilog" и "Еще о метастабильности.") ведь сигнал на входе АЦП асинхронный и после его выделения компарированием относительно уровня фронты оцифрованного сигнала могут "плавать". И еще, для оцифровки меандра необходима достаточно высокая частота дискретизации АЦП (хотябы в 10 раз больше чем максимальной частоты сигнала (для оцифровки гармоник меандра)). Получаемый с компаратора сигнал можно посмотреть средствами Signal-TAP. Синхросигнал для Signal-TAP можно взять килогерц 200-400. Если в низкочастотном сигнале будут высокочастотные вставки - это дребезг.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

ZX Spectrum, регенерация видеобуфера и помехи 9 года 10 мес. назад #3106

  • Chaosorg
  • Chaosorg аватар Автор темы
  • Не в сети
  • Завсегдатай
  • Завсегдатай
  • Сообщений: 312
  • Спасибо получено: 18
1. А чем wav не замена магнитофонной ленты? Именно это я играю через плеер компьютера или телефон и подаю как аналоговый звуковой сигнал на АЦП и еще в динамике слушаю. Тот самый звук:) Короче говоря, реальный спектрум от этого звука загрузится. Качество приема спектрумом сигнала контроллируется визуально по полоскам на экране - пилот сигнал должен иметь одинаковую их ширину. Я оцифровываю сигнал на частоте много большей, чем частота сигнала, а схема компаратора повторяет имено его физический эквивалент в рельном спектруме. Дребезг кнопок и помехи сигнала магнитофона спектрум устранял программно, причем терпеливо. Особо подчеркиваю - картинки грузятся идеально (а это большой объем данных)! Короче говоря, процесс загрузки от реального звука не виноват в сбоях, а проблемы в другом.

Идея с переходом к загрузке через USB-COM нужный этап, но следующий (аппаратно у марсохода для этого уже все есть). Причем надо обеспечить загрузку непосредственно из TAP формата, чтобы не тратить время на преобразование в wav. Есть ПЗУ реального спектрума подстраивающийся под ускоренную скорость звукового сигнала - "turbo" режим - можно многократно ускорять загрузку. Наверное такие вещи даже лучше сделать на микроконтроллере или процессоре в FPGA каком-то с дальнейшим прицелом на SD-карточку. Есть готовые подобные проекты.

2. Я про ПЗУ в учебной статье понял так, что на основании HEX файла мастером что-то строится, поэтому боялся, что простая его подмена ничего не даст. И я не смог найти HEX файл в самом проекте в Quartus. Поэтому такие вопросы. Но действительно, проще попробовать. От Пентагон 128 не подойдет - она страничная, бОльшего размера и не имеет смысла для 48 спектрума. Мне больше интересны прошивки с нормальным вводом программ на бейсике и "turbo" загрузкой с ленты.

Про шины и отдельные узлы не совсем понял - они в проекте уже есть. Внутрь объекта speccy "проваливаемся" и все там видим.

3. По поводу контроллера SDRAM - да - есть нехорошие подозрения. Я попробовал набрать крупную программу на бейсике и она стала разрушаться. Я не успел набрать ее до конца. В некоторых клонах спектрума регенерация обеспечивалась как раз выводом картинки, а в этом проекте картинка берется из другой памяти. Из динамического ОЗУ мы ее не читаем и этим память не регенерируем. У реального Z80A был свой механизм регенерации ОЗУ, но я не уверен, что у T80, который используется в проекте, он тоже есть.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

ZX Spectrum, регенерация видеобуфера и помехи 9 года 10 мес. назад #3109

  • Chaosorg
  • Chaosorg аватар Автор темы
  • Не в сети
  • Завсегдатай
  • Завсегдатай
  • Сообщений: 312
  • Спасибо получено: 18
Замена контроллера SDRAM на новую версию с этого сайта решила проблему с неработающими программами. Значит раньше просто память не регенерировались. Правда я пока вообще игнорирую сигнал ready контроллера. Раньше его низкий уровень прерывал основной clock всей схемы, что тоже странно и после смены контролера разрушило вывод на экран. Сейчас clock я пустил напрямую, а ready висит в воздухе. Как схема работает - не понятно:) надо внутри модуля speccy искать грамотное место, где низкий уровень ready должен приостанавливать работу.

Остался вопрос с помехами. Правильно ли я понимаю, что можно как-то через chip planner отодвинуть видеовыход от остальной шумящей схемы?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

ZX Spectrum, регенерация видеобуфера и помехи 9 года 10 мес. назад #3110

Разрушнние данных больших программ скорее всего связана с отсутствием регенерации SDRAM.
В проекте спектрума автор использует контроллер без ререгенерации, описанный в статье "Простейший SDRAM-контроллер на VHDL"
но можно попробовать подключить усовершенствованый контроллер описанный в статье "Обновление для простого SDRAM контроллера" там регенерация введена. Однако могут возникнуть проблемы с синхронизацией сигналов спктрума и контроллера, надо пробовать...

цитата:
Про шины и отдельные узлы не совсем понял - они в проекте уже есть. Внутрь объекта speccy "проваливаемся" и все там видим.

Я имел ввиду то что для начинающих плисоводов удобнее работать со схемой. На мой взгляд файл верхнего уровня (схемный) должен состоять из законченных блоков (процессор, пзу, контроллеры итд) написанных уже на VHDL или Verilog. Это позволит проще поменять какой либо блок или добавить новый.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

ZX Spectrum, регенерация видеобуфера и помехи 9 года 10 мес. назад #3111

Ну вот, предположения по SDRAM подтвердились:)

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

ZX Spectrum, регенерация видеобуфера и помехи 9 года 10 мес. назад #3112

Цитата:
4. В ходе внесения в проект изменений никак не связанных с формированием картинки замечал, что некоторые промежуточные его версии страдали очень сильными помехами на экране. Они устранялись сами собой в следующих версиях. Особенно удобно "бороться" с ними стало после появления сравнения с константой значения из ADC для считывания с магнитофона. Меняешь константу - меняется сложность компаратора, наверное. Видимо изменяется общее количество задействованных элементов ПЛИС и их взаимное расположение и питание? Можно ли как-то влиять на это напрямую?

По помехам непонятно...Шум на выходе VGA? может чтото со шнуром VGA? плохая земля например.
Можно попробовать подключить SignalTAP к сигналам VGA и посмотреть на качество синхроимпульсов во время помехи, чтобы точно определить - это плис или внешние факторы.
Можно попробовать выбрать частоту дискретизации АЦП не кратную синхрочастотам спектрума например 203 кГц.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от Alvich.

ZX Spectrum, регенерация видеобуфера и помехи 9 года 10 мес. назад #3113

  • Chaosorg
  • Chaosorg аватар Автор темы
  • Не в сети
  • Завсегдатай
  • Завсегдатай
  • Сообщений: 312
  • Спасибо получено: 18
Про помехи мой вопрос постараюсь лучше объяснить:

Первое, что я сделал с проектом - это поменял кнопку сброс на клавиатуре, чтобы она не была Scroll Lock - чтобы каждое переключение KVM switch (я подключал через него основной компьютер и марсоход к одному компьютеру, клавиатуре и мыше) не приводило к сбросу. Т.е. я внес минимальные изменения в схему не имеющие никакого отношения к АЦП и видеовыходу - забыли про них - я поменял сравнение со скан-кодом. Сравнение бинарного числа с различными бинарными константами транслируется в различное количество логических элементов. Если мне надо сравнить 8ми битную шину с 255, то это одно большое "И", а если другое число, то надо добавлять "НЕ" на входах, например. Способов может быть несколько. Короче, я поменял схему на несколько элементов. Видимо, они иначе "легли" на кристалл и шумящие участки оказались в бОльшей степени напротив чувствительных к шуму выводам. ЦАП видеовыхода марсохода сделан на резисторах - поэтому помехи в "единицах" и "нолях", приходящих на него из ПЛИС, видны на экране в виде градаций серого.

Я проверял много раз - возвращаю схему к предыдущей версии - помеха уменьшилась, вношу опять изменения - помеха возвращается. Разная степень изменения схемы - разная степень помехи.

Компаратор АЦП с константой является немаленьким участком на кристале. Меняя константу я меняю размер этого участка в элементах и взаимное расположение элементов меняется. Можно ли влиять на взаимное их расположение без таких извращений? Я хочу как-то средствами среды разработки отдалить схему от выводов ЦАП видеовыхода или влиять каакой узел на каких внутрених линиях питания лежит.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

ZX Spectrum, регенерация видеобуфера и помехи 9 года 10 мес. назад #3114

Средствами Chip Planner можно просматривать и менять топологию но помоему только в полной версии Quartus, версия WEB Edition позволяет только просматривать топологию.
Можно попробовать поменять настройки Fiffer Settings в свойствах проекта, например значение Seed поставить 2 или 3 при этом будет меняться топология разводки.
Можно также попробовать включить опцию Weak Pull-Up Resistor в вкладке More Settings это подтягивающий резистор на VCC и он может убрать помеху.
Можно также попробовать поменять условие оптимизации проекта.
Спасибо сказали: Chaosorg

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Время создания страницы: 0.147 секунд
Работает на Kunena форум