Итак, на частоте 12,5МГц без WAIT'ов время доступа к памяти получается очень малым - но я частоту переключения пока что "задрал" очень высоко - период вышел 20нс. Работает почти идеально, но есть и конфликты - при работе теста видны артефакты.
В основном сейчас занимался упаковкой логики для дальнейшего переноса в GAL. Пока что получилось 6 корпусов на оба модуля:
  1. GAL_X - формирование сигналов на основании сигналов от счётчиков горизонтали экрана (горизонтальное гашение, импульс для отсчёта строк, горизонтальная синхронизация, счётчик столбцов 16-битных видеоданных, арбитраж доступа к памяти, сигнал на чтение из видеопамяти);
  2. GAL_Y - формирование сигналов на основании сигналов от счётчиков вертикали экрана (гашение урана, горизонтальная синхронизация, конец кадра - для прерывания);
  3. GAL_VMUX - формирование видеовыхода на основании сигналов от сдвиговых регистров, битов 0, 1 и 4 видеорежима, данных регистров псевдоцветных режимов;
  4. GAL_CPU - формирование сигналов для процессора и не только (тактовые импульсы CPU, стробирование сброса, укорачивание сигнала чтения - необязательно и потом может быть и уберу);
  5. GAL_ADDR - формирование сигналов для дешифраторов портов (два сигнала для выборки дешифраторов стандартных портов F4-FB, разрешение на включение мультиплексоров адресов MA14-MA19, сигналы доступа к памяти на чтение и запись);
  6. GAL_MEM - формирование сигналов доступа к ROM1 и ROM2, блокировки оперативной памяти, переключения адресов MA14-MA19.

В процессорном модуле есть ещё пачка мелкой логики, но там всё тяжело и некоторые места ещё не проверялись толком.

Ну, а поскольку с GAL'ками более-менее готово, надо решать проблему с артефактами записи в память

- - - Добавлено - - -

Кстати, о портах ввода-вывода - длительность чтения равна 197нс. Запись не проверял ещё, но если судить по циклу записи в память и дополнительному циклу ожидания по умолчанию, получается около 117нс.
Всё это без учёта задержек в реальной логике. Но, если цепочку выстроить правильно, то они будут нивелироваться