Если б я делал процессор в 90х

топ 100 блогов ckotinko03.01.2022

У меня есть хобби - растёт из игры, в которой был злобный алгоритм, который ну невозможно было переписать эффективно для проца. Буквально 6 инструкций SSE2 для проверки столкновения кубиков. Ветвления по максимуму заменены на lookup table в памяти. SSE команды просто не поддавались оптимизации т.к. регистров на несколько итераций параллельно не хватало. Плюс этот алгоритм сам хорошо паралелился в теории но был вложен в непаралелящийся кусочек - очень короткий, но тем не менее. И я придумал процессор который мог бы тянуть такие злые внезапно ветвящиеся и сходящиеся алгоритмы, и это разумеется не GPU. Потом оказалось, что такой проц может тянуть вообще все виды программ.

Еще я люблю ретро-компы. Они какие-то лапмовые, человеческие. Когда мерялись не графоном в йоба-играх, программы на асме оптимизировали. Так вот, в урезанном виде он мог бы поместиться в тогдашние габариты(на кристалле) пентиумов а в очень урезанном - четверентиумов и может быть трентиумов.

Идея там довольно простая: в обычном х86 компилятор пытается команды перемешать так чтоб параллельные команды шли параллельно. Но если выборка из памяти сосёт, то смысла в этом не будет. Логичнее разбить команды на последовательные списки небольшой длины (1-32 команды) и между ними вставить пометки - если будет время параллельно выбирай еще и отсюда. А заодно ввести семафоры прямо в проце для синхронизации. Вот тогда паралелящиеся циклы, описанные выше внезапно можно в цикле запускать друг за другом, а гадкую подмутексную часть - просто триггерить семафором. Там еще оптимизация ALU довольно свирепая, и realtime-компилятор микрокоманд из байткода, это для эмуляции х86. Это кстати будет помогать в виртуализации I/O т.к. см ниже. Байт-код маппится практически 1-в-1 в коды х86-64 за счет 2х памяти на бинарнотранслированный код. Нам и того меньше надо. Виртуализация тут обеспечивается за счет того, что выполняется всегда бинарно транслированный код, а всякие хитрые операции подменяются вызовом прерывания или подпрограммы.

Я вот тут подумал challenge: Мы живем в 90е и по условиям, денег у нас только на производство одного проца. Чипсет, всё это  - нафиг. Я попробую практически сделать ретрокомп на кастомном проце.

Процом у нас будет чип anlogic EG4S20BG256 у нас будет на плате ставящейся в socket3/socket5/socket7 чисто механически, т.к. у него Vio до 3.3 вольта. В сокет7 он кстати может и встанет но остальные это - смэрть. Это не значит, что я откажусь о т аналога четверентиума, просто там проц будет отдуваться за чипсет. А значит потребуется 4 сокета для SIMM и 4 плашки EDO 3.3v. Контроллер будет прямо на проце, т.к. мой опыт говорит что socket7 работал на 50% от своей скорости в лучшем случае. Тайминги 10-1-1-1 я сам видел на SDRAM.

В нашем случае - контроллер памяти имеет 32-64 пина данных, 48 пинов адреса(2Х12 на оба банка) чтоб 2 банка памяти работали через такт. Для этого надо будет потанцевать с OE# (4 пина) чтоб обрубать выход одному банку когда работает другой. В идеале на 66мгц и EDO-памяти мы получим цикл чтения 5-1-1-1 что будет быстрее кэша L2 на конкурентских материнках, причем последовательная выборка будет 5-1-1-1-2-1-1-1 т.к. банки независимы.

Для простоты можно сразу взять готовый tang premier с 64мб памяти чтоб не плясать вокруг SIMM прямо в чипе но так не по фэншую. Либо не разводить на плате слоты вовсе, использовать плисовую память но натыкать в слоты мусора какого нибудь для красоты. помоему идея хороша.

Также придется сделать DMA-контроллеры на проце, а к ним еще и некий универсальный контроллер. Это я умею, это фигня в общем-то. Я уже делал программируемый контроллер ввода вывода именно для видеокарты на MAX3000 причем висела она на SPI для полного страдания. Таблица в памяти наше всё оказалась. Контроллер просто должен её ">
Что по кэшу, по условиям challenge для трентиума кэша данных нет, есть очередь команд 64 штуки байткода(16х64битных слова) и буфер чтения 4х16байт(это вместокэш), и очередь записи 4 штуки. ALU FPU общее с CPU, и конвейеризированное, т.к. я его уже оптимизировал так. Квак наверно не потянет, но на уровне 4ки будет тормозить. 64 регистра общего назначения, сегменты, TLB 8x4входа. Вроде это соответствует техническим возможностям тогдашего времени. Для четверентиума кэш уже надо добавить. 4кб+4кб кода или 8+8кб для аналога dx100.

Для пня сразу скажу, что дело пахнет параллельным fpu, один или два или четыре не знаю. Вообще fpu очень мелкие. Предположим что влезет, тем более что на чипе не будет smram, большей части логики для совместимости с х86. А то что там компилятор микрокода - он простой на самом деле. Так что аналог пня будет с SSSE3 чтоб враг охуевал и шейдерами вдобавок.

Материнка напомню у нас своя. что на ней должно быть? Шина - однозначно ISA 3x16битных слота+1 порт фирменного vga(см далее). Лучше 4 слота но... места не хватит я уже прикинул т.к. далее пойдет рассыпуха.

С проца 3х8бит шины данных-одна 2х8бит(1чтение,1запись)уходит через конвертеры cmos3.3v <-> TTL5v
в одно рыло на ISA, другая рулит периферией на 580й серии(тоже через конвертеры). Почему исашная шина расщеплена на чтение-запись? Для скорости. Каждая шина имеет 8 бит данных, 6 бит адреса, и 4 бита управления и свой клок. Идея такая - к 580й периферухе мы обращаемся тупо на скорости 4 мгц(66мгц/16) через дешифратор КР1533ИД7->CS + 3 младших бита адреса напрямую, тут у нас чистый 8бит-мир.  еще один ИД7 на второй шине о которой ниже.

К ISA мы 8битную шину гоним до 33мгц, это нам дает 4 такта на каждый цикл ISA(8.33мгц). На выход с нашей шины на ISA стоят пары К1533ИР35+К1533ИР22 туда и ИР22 обратно. ИР35 захватывают значение(WE с шины управления), ИР22 стробируется общим клоком на все ISAшные ИР22шки и выдает сигнал на шину ISA синхронно с клоком ISA. Задача проца сделать так, чтоб в каждый клок подавались только правильные значения и tristatить ИР22шки на шине данных на выход.

Прерывания с ISA - КР58В
0Н59, его хватит за глаза, таймер КР580ВИ53, 2хКР580ВВ51А, клавиатура AT - хз, не нашел аналога но может быть может быть можно на рассыпухе, еще добавим кроватку для КР580ВВ79+гребенку для подключения в формате ">К1810ВГ72(+кроватка) для флопика. ATA порт можно сделать один на рассыпухе(+6 ИР22), для PIO3 хватит и DMA - так контроллер-то на проце программируемый, он и потянет.

Вроде бы всё. А нет. Видео тоже стоит денег. И монитор. А у нас можно на проц добавить еще один 8битный порт только на чтение и мы могли бы в телевизор смотреть вместо монитора. Вы кстати спросите - а контроллеры всего этого место не займут на проце? даже не на плис а мы же делаем вид что в железе сделали. Отвечаю - нет, потому что контроллер то программируемый. Надо 3 канала всего причем работать они могут через такт, ибо 66мгц внутри, 33 снаружи. Аппаратно там только чтение флешки при старте надо делать.

Кстати именно здесь играет роль порт ">
По условиям мы живем в 1992м+-. У нас есть вот такие варианты: EGA, VGA, VGA с выделенной памятью, SVGA с выделенной памятью. Что нужно: в самом худшем случае данные сэмплятся из памяти с проца. Делать руками палитру в софте мы не будем. Значит нужен RAM 3x256x8, ну или 2Кх8(КР537РУ8А). Для 640х480 надо 308Кпикселей в кадр, это 60*307к=18.5мегабайт в секунду. У нас - 33. Хватит с запасом. То есть минимальная EGA/VGA - это буквально одна КР537РУ8А, один регистр, пара счетчиков(клок с проца придёт), и аналоговая часть. переключение шлейфом в один из двух сокетов на палте.

Далее, идем в 1994+. Quake требует уже нормального видео. А наше видео, напомню, дрочит память, причем на хорошей такой скорости. EDO в режиме 5-2-2-2 в два канала на 32бита на 33мгц(5-1-1-1 по факту) нам отдаст до 16*4мб/сек=64мб. Значит в контроллере I/O уже должно быть fifo для записи байт причем довольно большое. Вот кстати я в отличии от других изобретателей процов прогоняю модельки через стресс-тест. Поэтому такие моменты выявляются даже на примитивном тесте.

Но стоп, перед этим нам понадобится sound blaster, а точнее covox. 3 канала *16бит*44100(2in 1out) не сожрут много траффика c шины  на которой сидит 580я периферуха. наверно. а нет сожрут, поэтому давайте добавим их на фирменную vga. midi там не будет по дефолту, ибо нищета но будет опция кроватка для CT1748A, и миксер в виде регистр+covox. Вот там-то дури достаточно пока еще для трентиума и четверентиумов. Дум мы скорее всего вот в такой импортозамещенной конфигурации тянем без сложностей, ибо даже без кэша мы обеспечиваем.

Для больших разрешений скорее всего потребуется хакать внешнюю импротную vga, чтобы переписывать её память между обновлениями экрана. Ну а что делать, если отечественные контроллеры(КР1810ВТ02/03) поддерживают только 7 адресных линий? 7+7=14 * 4RAS для 03го. Короче, всё, вот пока, ничего уже на рассыпухе не сделать. Просто дальше нужно реально внешний чип хотя бы для DMA и вывода данных, а по условиям задачи это ну можно сделать на рассыпухе но уже

То есть минимально трентиум мы делаем, причем конкурентный. Четверентиум... ну уже не очень получается, но очень близко к цели. ISA хотя и тормозит но тормозит параллельно процу.

Физически на плате это будет лежать так:

Если б я делал процессор в 90х
посмотрим, во что можно развить наш ретрокомп в будущем. пока 386/486.

Оставить комментарий

Архив записей в блогах:
Начала делать снимки, когда только деревья вырубили. Приближаюсь к Т-образному перекрёстку... Было похоже, что дорогу просто продолжат "в неизвестном направлении";))))) В той стороне, куда её ведут, ничего особенного на картах нет. Становится понятно, что там что-то грандиозное ...
...
...
Отличный день, я вам скажу - из плохого полицейского зима превратилась в доброго. Душа заразилась этим теплом и греет уже наружу. И не беда, что сегодня еще с лопатой отдыхать - вчера зима всыпала, как могла. Может, конечно, это вчерашние страусы со свиньями виноваты ... Но позже - служу о ...
“ они (украинцы) заигрались и вынудили Путина начать войну именно с них. Почему началась война 24 февраля 2022 года именно с Украины? Она оказалась несговорчивой. Путину ничего не оставалось при реализации его планов начать именно с Украины. " это дословный перевод на русский язык ...