DIP-процессор Motorola 68000 заставил PCI-карту откликнуться
После включения плата сканирует PCI, находит устройство по конфигурационному пространству и может обратиться к последовательной карте либо к Cirrus GD5440. Между процессором и разъёмом нет чипсета: Spartan-II XC2S100 принимает одиночный цикл Motorola 68000 и формирует из него PCI-транзакцию. Рядом работает CPLD XC95144XL, который собирает системную обвязку: тактовые и управляющие сигналы, дешифрацию и связь с остальной платой.
В этом и состоит красота конструкции. MC68000P работает на 10 МГц, имеет 16-битную шину данных и адресует периферию в привычной для себя форме. PCI ждёт 32-битные циклы, отдельные фазы адреса и данных, конфигурационные регистры и иной порядок байтов. Логика в FPGA переводит адреса, размер доступа и управляющие сигналы между этими мирами. Диапазон CPU 0x800000–0x80FFFF отображён на PCI I/O 0x0000–0xFFFF. Для конфигурации сделаны два знакомых каждому разработчику PCI регистра: CONFIG_ADDRESS по 0xFFFF00 и CONFIG_DATA по 0xFFFF04.
С байтами пришлось работать особенно аккуратно. У 68000 и PCI различается порядок байтов в словах, а два вида PCI-доступа требуют разных правил. Для конфигурационного пространства мост сохраняет численное значение регистра, переставляя байты при передаче. Для memory и I/O сохраняется соответствие адресов байтам: это нужно, чтобы регистры периферии попадали именно на те линии, которые ожидает карта. Такая деталь легко превращает внешне живую шину в набор устройств, читающих неверные идентификаторы и игнорирующих команды.
Плата не пытается изобразить универсальный современный PCI-хост. Мост проводит только одиночные фазы данных; burst-транзакций, retry и target abort в нём нет. Bus mastering и DMA также отсутствуют: для необходимых сигналов не хватило выводов XC2S100. Поэтому подходящая карта обязана уметь работать под контролем CPU через PIO. Автор показал Moschip NM9835-совместимую последовательную карту с аппаратными прерываниями и Cirrus GD5440 в текстовом режиме и в VGA 320×200 с 256 цветами. Заполнение кадра занимает около 300 мс по авторской оценке, так что видеопамять здесь ощущается медленной периферией, а не экранным буфером ПК.
В остальном это вполне осязаемый компьютер: 1 МБ SRAM, 4 КБ ROM, MC68681P DUART и два PCI-слота на одной схеме с уровнями питания 5 В, 3.3 В и 2.5 В. Исходники моста, CPLD-логики, прошивки и драйверов опубликованы под MIT-лицензией. Проект ценен тем, что PCI здесь перестаёт быть магией материнской платы: остаются конечный автомат транзакции, таблица преобразования адресов, направление байтов и несколько сигналов, которые нельзя забыть развести.