Ничего особо интересного тут не будет, это лишь вступление с предысторией. Всё самое вкусное будет в следующих статьях.
Какое-то время назад я решил спроектировать свой собственный процессор. И мне это удалось. Делал я его в программе Logisim. Он был не самым лучшим, но это был мой первый (и пока что единственный) процессор, и он работал. Для проверки я запускал на нём программу, которая выдавала на выход последовательность Фибоначчи, а ещё программу, которая рисовала на небольшом экранчике букву "Б" в рамке. Я его уже удалил (не знаю, зачем, я часто удаляю то, что мне не нравится, а мне он не очень нравился, потому что я хотел сделать процессор получше), но у меня осталось два его скриншота.
Возможно, вы видели другие процессоры в Logisim. Тогда вы должны были заметить, что мой выглядит излишне сложным и запутанным. Ну, в своё оправдание скажу следующее:
- Это мой первый процессор, так что некоторые вещи я сделал не самым эффективным образом. Например, главная шина собирает все входы через один ИЛИ-элемент.
- Я не использовал подсхемы. Почему? Ну, во-первых, можете считать меня извращенцем, но мне нравится разводить кучи дорожек. Я считаю, что использование подсхем немного "читерно". В реальной жизни ты не можешь запихать множество элементов в одну подсхему размером с один такой элемент, чтобы сэкономить место. Так что мой подход ещё и реалистичнее. К тому же, мне хотелось видеть весь процессор разом, каждый его элемент, видеть, как сигналы прыгают по дорожкам и шинам, а если бы я использовал подсхемы, это было бы невозможно.
- Я старался сделать его максимально компактным. Многие люди, которые делают процессоры в Logisim (представьте себе, я не один такой), разносят элементы на большие расстояния, чтобы с ними было удобнее работать. Мне же кажется, что это не реалистично. Обычно процессоры стараются делать минимальных размеров.
- Я не использовал туннели. Почти все другие процессоры в Logisim используют туннельные соединения, и я понимаю, почему. Так намного проще. Но, опять же, я считаю это нереалистичным, потому что в реальной жизни вы не можете просто соединить два провода сквозь пространство через какой-то туннель. Нужно соединить — тяни дорожку, даже если далеко.
Так, я поставил себе некоторые ограничения, поэтому мой процессор может выглядеть излишне запутанным.
Что ж, зачем я всё это пишу. Я собираюсь делать новый процессор, гораздо сложнее, и буду оставлять здесь своего рода дневник. Возможно, кому-то будет просто интересно это почитать, или кто-то захочет сделать свой процессор, но ему понадобится некоторая помощь, или же кто-то захочет изучить, как работают процессоры. Да и для меня это будет мотивацией, а то я люблю запланировать новых проектов, а потом забросить их.
Здесь я не буду рассказывать, что такое двоичная система, или как работает булева логика. Я думаю, тем, кто это будет читать (если кто-то и будет это читать), это и так известно, а если нет — вам прямая дорога на Википедию, или любой другой сайт, где это описано. Я же буду рассказывать о более сложных вещах, вроде проектирования набора команд, исполнения деления на логических элементах или виртуальной страничной памяти. Да, все эти вещи я хочу видеть в моём новом процессоре. И так как это мой второй процессор, назвать я его решил "CPU-1", а тот, стало быть, "CPU-0", потому что программисты считают с нуля, всем известный факт.
Ладно, это всего лишь вступление, так что не буду затягивать. Вскоре напишу статью с более подробным разбором моего первого процессора.