
По-немножку делаем совместно с другом (на форуме Tim) (моя часть - в основном схемы-платы-ПЛИС-низкоуровневые драйверы, его часть - код верхнего уровня, написание инструментального и отладочного кода, финансовая поддержка. Общее - разработка идеологии и архитектуры).
Хотелось сделать удобную в программировании альтернативную минималистическую, но достаточно мощную систему на PDP-11-подобном процессоре или 68000. И при этом - реконфигурируемую и построенную с использованием ПЛИСок. И заодно - поизучать Verilog

В итоге был выбран 68К за его линейное адресное пространство в 16МБайт, 16-битную шину и гибкие методы адресации и удобство кодирования, аналогичные PDP-шным


Немаловажным стало также то, что эти процессоры в наше время пока еще не так сложно приобрести (производились они, кажется, чуть ли не до 2015-го).
Практическое применение - реалтайм-секвенсор для электронной музыки

Что тут есть:
ЦП 68000 4..20МГц (такт асинхронный от остальной схемы) под защищенным режимом (режим супервизор+пользователь).
Периферийный контроллер ATmega128.
Системный чип - на ПЛИС Altera MAX2 (EPM1270).
Видео чип - также на ПЛИС EPM1270.
GPIO чип - на самой маленькой ПЛИС из серии MAX2 (EPM240).
Память системная - статическая 256к*16 (впаяна) или 512к*16 (если добавить еще один чип).
Видеопамять выделенная - 256к*16 статическая 10нсек.
Флэшка 256/512к*16 (не напаяна).
RTC (часы) - не напаяна.
8-разрядная байтовая LED- линейка (показывать байтики в двоичном коде

Светодиодики RUN HALT RESET

2шт кнопок сброса - на Атмегу (холодная перезагрузка системы) и отдельно на 68К и его периферию.
Системный такт 16МГц, процессорный такт 4..20МГц (отдельный кварц).
Интерфейсы:
- Питание 10..20В (DC/DC 5V 2A и 3.3V 0.6A на LM2596+LM1117).
- 16-разрядная системная шина (выведена на контакты расширения). Использована 3-вольтовая логика.
Трансляция уровней с 5В на 3В - на 74LVC125/74LVC4245/74LVC244/74LVC1G17 - по месту разные.
- клавиатура PS/2 (драйвер на атмеге128).
- мышка PS/2 (также через драйвер на атмеге).
- АТМега связана с системной ПЛИС (под 68) через SPI интерфейс.
- 18 линий GPIO на атмеге128 (в том числе на АЦП).
- интерфейс энкодеров с кнопочками - двухканальный, на атмеге128.
- microSD на атмеге128 (загрузка кода супервизора/софта системы).
- отладочный прямой доступ (SPI) на системной ПЛИСке - для удобства быстрой заливки кода с PC.
- видео: VGA 512*400*72Hz (20MHz clk), 640*480*60Hz (25MHz clk) 16/256 цветов.
Загружаемый RAMDAC (трансляция палитры 8 -> 18 bit RGB 6:6:6) (BT476/ADV476).
Предусмотрено место под распайку кодера PAL и ПЦТВ/S-video выход. Не распаяно.
Аппаратное ускорение 2D заливки (в ПЛИС).
- PWM канал на speaker (на атмеге128). Просто чтобы было

- RS232 порт, переключаемый на системную ПЛИСку или атмегу.
- RS485 порт (на атмеге128).
- 2 входа MIDI со стандартной опторазвязкой (на системную ПЛИС).
- 2 выхода MIDI (с системной ПЛИС).
- RS485 порт (на системной ПЛИС) - для передатчика DMX512.
- 32 линии GPIO (GPIO ПЛИСка под шиной 68000).
- интерфейс записи-чтения цифрового потока на магнитную ленту (как в ZX, БК и т.д) - на всякий случай
- генератор случайной шумовой последовательности на TL431+LM393.
- системная micro-SD карточка на системной ПЛИС (под 68000).
- юзерская SD (большая) - также на системной ПЛИС (под 68000).
Содержимое ПЛИСок/МК:
1. Системная ПЛИС:
Сейчас относительно готово и работает:
-Шинный интерфейс, системный тактовый генератор, генератор исключений при сбоях цикла шины, DMA, прочие низовые функции обеспечения работы 68000.
-Приоритетный векторный контроллер прерываний (20 линий). 3 линии IRQ выведены на разъем системной шины, 1 линия на GPIO ПЛИСку.
-Таймеры (3шт 8-разрядных).
-Отладочный интерфейс (SPI) с микрокомандами чтения-записи слов и байтов в адресное пространство 68000, запуска-останова 68000. Интерфейс доступен с внешнего разъема (подключение к PC),
и для атмеги128 (начальный запуск, загрузка ядра супервизора), для чего есть мультиплексирование доступа в системной ПЛИСе.
-Менеджер обращения к памяти с разделением привилегии для юзерского и системного режима.
-SPI интерфейсы для SD карточек с переключением скорости обмена и генерацией прерывания при смене карточки (только для юзерской "большой" карточки).
-2 приемника MIDI.
-2 передатчика MIDI.
-таймер событий (генерация тактов ритма для секвенсора) - на основе дробного синтеза частоты с аккумулятором фазы.
-регистр RTC.
-передатчик DMX512.
-приемник и передатчик RS232 (скорость только 115200 для экономии ПЛИСки)
-регистр генератора случайных чисел.
2. ПЛИС GPIO (на шине 68000).
Пока совсем пустая.
3. Видео ПЛИСка:
Есть:
- тактовый генератор (получение сетки сигналов из входного такта 100МГц)
- VGA синхрогенератор (сейчас 640*480*60Гц, экспериментальный был на 512*400*72Гц)
- менеджер обращения к VRAM, обеспечивающий "прозрачную" запись-чтение VRAM со стороны ЦПУ
- сканирование VRAM и простенький конвейер загрузки RAMDAC
- прерывание вертикального обратного хода
- загрузка палитры
- трансляция координат XY в адрес видеопамяти с контролем диапазона
- рисование вертикальных/горизонтальных/диагональных линий с маскировкой битовой маской (для вывода штрих-пунктиров и растровых шрифтов)
Нужно:
- аппаратный указатель мышки с загружаемым образом
- может быть - генератор сеток и указателя в стиле "прицел" для работы с энкодером вместо мышки
- может быть - аппаратный скроллинг
- может быть - рисование произвольных линий по Брезенхему или лучше по Ву
- может быть - спрайт-движок или простейший блиттер - но наверное не вместится...
- может быть еще сделать видеорежим с расслоением на плоскости.
4. АТмега128 периферийный МК:
Есть:
Драйвер PS/2 клавиатуры и мышки.
Драйвер SDшки (простейший, только чтение FAT16).
Очередь событий.
Загрузка 68-го c SDшки.
Нужно:
Всякое - по необходимости...

5. Система 68000.
В процессе, по мере построения блоков в ПЛИС, и по мере нахождения душевных сил, - написание ядра, системных функций и всего-всего...
Использованный софт: Altium Designer, Quartus II web edition, gavrasm, avreal, asm68k, самописные программы загрузки-отладки.
--------------------