Тема: Универсальный новодельный модуль ОЗУ
Привет!
После копания в теме CPLD'х начал реализацию пары старых и немного новых идей.
Первый блин, возможно даже не комом: универсальный модуль расширения ОЗУ.
Планируется работа как в семёрке так и в девятке и немножко других вкусностей.
Основной упор на полную совместимость с существующим софтом.
Но компактно, без глюков старой DRAM и на современных нулёвых элементах.
-==-
Лирика.
-==-
Конструктив: в основе maxII на 240 LE и SRAM 128 Кб (спасибо AlexBel: он подарил пару штук и в остальном много помогал). Также питание 3.3в и буфера согласования уровней.
Режимы работы (выбираются красными переключателями):
- Модуль ДопОЗУ-7 32 Кб
- Модуль ДопОЗУ-7 128 Кб
- Модуль ЭмПЗУ-7 32 Кб
- Модуль ЭмПЗУ-7 128 Кб
- Модуль ДопОЗУ-9 128 Кб (без поддержки Apple ][-mode)
- Отключено (модуль недоступен, на светодиоды постоянно выводится шина адреса)
- Модуль "2в1": ДопОЗУ-7 + ЭмПЗУ-7 (по 32 Кб каждый или по 64 Кб каждый).
В последнем режиме модуль не использует сигнал !ROM Select, а сам слушает шину адреса и отзывается на 2 и 4 слоте независимо от того, куда установлен. Т.е. одной платой можно закрывать все потребности в памяти семёрки.
{ От поддержки Apple ][-mode пришлось отказаться, так как я слабо ориентируюсь в софте, который бы его знал и мне неизвестны тестовые программы, которые можно было бы использовать для разносторонней проверки модуля. Другая причина: мутная документация на модуль ДопОЗУ9 (ФГ3.089.170 ТО). Её дебри, даже для агатовского режима, пришлось всё время проверять по реальному железу. Самое страшное: описание регистра управления модулем. Он и так-то не особо логичный (а в эпловском режиме просто странный), но даже найти его первоначальное состояние (при сбросе питания) в доках не удалось. }
Две кнопки сверху:
- Сброс регистров управления (полезно при зависаниях семёрки, чтобы питанием не щёлкать),
- Переключение индикации (на светодиоды обычно выводятся слова состояния регистров управления, при нажатии кнопки выводится шина адреса).
Две линейки светодиодов (2x8) используются для индикации (в зависимости от выбранного режима):
- Регистров состояния модулей ДопОЗУ7 (верхняя линейка) и ЭмПЗУ7 (нижняя линейка) (режим "2в1").
- Регистра состояния одного из модулей ДопОЗУ7 или ЭмПЗУ7 и признака запрета работы второго модуля (тусклое свечение всей линейки).
- Регистра LC ДопОЗУ9 (верхняя линейка) и активных сегментов адресного пространства, на которые подключен модуль (нижняя линейка).
- Состояния шины адреса (по нажатию кнопки или постоянно, в соответствующем режиме модуля).
В текущей конфигурации использовано примерно 194 из 240 доступных LE матрицы (80%).
-==-
Платы изготовлены на заводе Электроконнект (г.Новосибирск).
Слотовый разъём с никелевым покрытием.
4 платы стоили около 2800р.
Завод сохраняет шаблоны, так что повторный выпуск платы будет дешевле, номер заказа: ps409194.
(спасибо Wierzbowsky: здесь использованы его чертеж и схема слотового разъёма из разработки Breadboard)
Самая дорогая деталь: матрица, цена вопроса - около 180р за штуку, покупал в tom-electron.ru.
Буфера (кроме ап6) - около 20 р за штуку, Чип-Дип.
Голубые разъёмы JTAG, резисторы, кондёры, АП6 и транзисторы (в итоге оказались не нужны) бесплатно выдраны из дохлых материнок и прочего технохлама.
Остальное - aliexpress, цены ниже точности вычислений.
Основная часть платы немного смещена относительно разъёма: это напоминалка об ориентации платы в слоте, аналогично другим агатовским устройствам.
-==-
Проект доведён до завершения примерно на 95%: всё запланированное работает, но иногда программные тесты ОЗУ указывают на одиночные сбои (1 сбой минут за 10 тестирования в худшем случае, в лучшем - 1 сбой в час и менее). Частота их возникновения зависит от комплектности компьютера, от подключения-отключения измерительной техники и от напряжения питания. Снижение напряжения уменьшает процент сбоев. Судя по проведённым измерениям, основной источник сбоев - "звон" шин. Наибольшие проблемы возникают при одновременном переключении линий шины данных из "1" в "0". Наиболее злобные проявления этого эффекта устранены подбором алгоритмов работы матрицы, но идеальное поведение пока не достигнуто. Возможные пути поиска решения:
1) последовательные или параллельные резисторы на линиях.
2) разнос фаз переключения (разделить шину на 2 части, переключать сперва 4 бита, потом следующие 4).
3) кратковременно (70нс) выводить на шину константу $55 или $AA, затем нужное значение.
4) подбор фаз выдачи данных на шину: условие "phase_addr <= phase_num >= 4;" в исходнике тоже как-то странно влияло на поведение: вроде бы ">= 5" в каких-то случаях улучшало работу, хотя и не понятно - почему. Шина адреса ЦП к началу phase_addr в любом случае давно уже подготовлена.
Бейсик-60 на семёрке грузится и работает, так же как Рапира и ДОК.
-==-
В результате исследований ДопОЗУ9 выявлен странный косяк: линия блокировки штатного ПЗУ активна постоянно, поэтому не ясно, как предполагалась совместная работа нескольких модулей, заявленная в документации. Однако штатные модули работают: возможно из-за того, что ток низкого уровня этой линии превышает ток высокого уровня, таким образом образуя монтажное НЕ-ИЛИ.
На новоделе это также создало проблемы: попытка реализовать нормальное монтажное НЕ-ИЛИ с каскадом с ОК было безуспешным, так как подтягивающий резистор на материнке имеет значительный номинал и линия возвращается в высокий уровень только за время, сопоставимое с периодом тактовой частоты F0. Пришлось реализовать трюк: захват линии выполняется низким уровнем, но, в конце периода F0, линия !БлкПЗУ принудительно восстанавливается в высокий уровень, после чего выход переходит в Z-state, что позволяет другим модулям также переводить её в низкий уровень при необходимости.
В результате тест Лисина для двух новодельных модулей нормально гоняет этап "ЛОГИКА". Так как альтера даёт заметно больший ток, чем оригинальные модули, то можно даже использовать новодел одновременно с оригинальными модулями. Хотя было замечено, что чем больше модулей установлено в комп, тем больше вероятность глюков. Возможно, это связано всё с тем же "звоном", но так как сбои редки и одиночны, исследовать явление сложно. Также были отмечены глюки копировщика ИКП при работе с тремя модулями: при копировании диска на некоторых треках копии были созданы корявые адресные поля, но что явилось источником этого глюка - неизвестно. Явление подробно не изучалось.
-==-
Вложения:
- Схема в PDF.
- Схема и плата в AD 16.
- Плата в Gerber.
- Исходники конфигурации матрицы в Quartus 11: помимо исходника на Verilog-е, также важны разнообразные списки assignment: это не только списки выводов, но и конфигурация pullup-резисторов, первоначальные состояния триггеров и т.д..
- Фотография обратной стороны платы: если будете собирать - обратите внимание на перемычки.