Оглавление
§ Воспоминания
Прошло 10 лет с момента первого моего запуска ПЛИС модели Cyclone III на 10240 логических элементов (Logic Element – LE) с 46k внутрисхемной блочной памяти. Я начал с малого: создал простейший видеоадаптер, выдающий сигнал VGA, 640 на 480 точек для 25 Мгц тактового генератора. С тех прошло чуть больше 10 лет, и можно так выразиться, сегодня это юбилей.
До того как приобрести свою первую ПЛИС, я создавал, а точнее говоря, я пытался создавать эмуляторы на языке программирования Си, который изучил не так давно, с момента появления у меня Arduino. С помощью ардуино я и смог освоить этот язык программирования, стоит заметить, в весьма в позднем возрасте 27 лет. Обычно, программисты уже вовсю знают этот язык, применяют и даже на нем работают, но только не я. У меня совсем всё иначе было.
§ О планах
Так или иначе, я совершал десятки попыток создать процессор, и раз за разом стирал начатое, возвращаясь к самому началу. Будучи подгоняемый перфекционизмом и страхом переступить важный порог, я начинал и начинал заново проекты и никогда не завершил до логического конца. Мне жаль, что это так, поскольку именно таким методом можно никогда ничего не завершить. Я хочу поставить точку на этом вопросе и потому с сегодня объявляю для самого себя: важно не просто завершить проект, а именно написать о нем серию или даже не серию, а огромный цикл статей, в которых бы я максимально детально бы разобрался со всеми аспектами и принципами работы именно 32х битного процессора, подобного 386. Задача крайне сложна и она осложнена тем, что я хочу ввести также поддержку защищенного режима.
Можно задать такой вопрос: что именно я буду считать завершением проекта? Ответ однозначен: полностью работоспособный процессор, поддерживающий инструкции 386 процессора и умеющего работать в защищенном режиме. И более ничего! То есть только это. Без операционной системы, без биоса, без софта – только процессор.
§ Дизайн процессора
Языком программирования для RTL я выберу verilog c элементами system verilog, поскольку он не такой высокоуровневый, как VHDL и не такой сложный для разработки. Да, я понимаю, что стандартом является именно VHDL, но я его фактически не знаю, да и не изучал, поскольку не видел никакой в этом необходимости.
Не знаю, насколько мне стоит повторять тот материал, который уже ранее мной был рассказан. Процессор архитектуры x86 достаточно сложный, у него очень большая система инструкции, каждая из инструкции весьма непроста сама по себе и представляет из себя длинную серию микро-операции. Процессор, грубо говоря, это модуль, который принимает на вход программу (это просто разновидность данных) и другие данные из памяти, обрабатывает их и записывает обратно в память. Своего рода, процессор – черный ящик, обрабатывающий информацию.
У процессора есть внутренняя память, которая называется "регистры". У разных процессоров, имеющих разную архитектуру, разное количество регистров и их разрядность. В приставке Денди, которая использовала процессор модели 6502, всего один регистр общего назначения (A), два индексных регистра (X,Y), один регистр флагов (P), программный счетчик (PC) и регистр стека (S). Почти все регистры, кроме программного счетчика, восьмибитные. У процессора 8086, который являлся предшественником процессора 80386, больше регистров, чем у 6502, и все они являются 16-битными, но несмотря на то что регистров больше, их не так и много: всего лишь 4 регистра общего назначения (AX,BX,CX,DX), индексные регистры и регистры стека (SP,BP,SI,DI), четыре сегментных регистра (ES,CS,SS,DS), регистр указателя исполняемой инструкции – программный счетчик (IP) и регистр флагов (FLAGS).
У процессора 386 добавилось несколько регистров, таких как отладочные регистры DRx (8 штук), регистры контроля CRx (4 штуки), регистр TR (Task Register), два сегментных регистра (FS,GS). Помимо добавления регистров, сами по себе увеличилась их разрядность. Если ранее, до 80286 процессора, все регистры были 16-разрядными, то теперь они стали 32-х битными. Несмотря на то, что это так, старые регистры вроде AX, BX, CX, DX, SP, BP, SI, DI, IP, FLAGS сохранились и сохранили свою функциональность на 100%. Просто их сверху увеличили вдвое. Теперь они стали регистрами EAX, EBX, ECX, EDX, ESP, EBP, ESI, EDI, EIP, EFLAGS.
Стоит отметить тот факт, что переход с 80286 на 80386 процессор был настоящей революцией, потому что ни до, ни после такого кардинального изменения больше не было. Всё далее касалось лишь улучшения, оптимизации, а также увеличения разрядности, но такой основательной переработки больше никогда не было.
§ Сложность темы
Создать процессор с нуля на верилоге: это большой и сложный вызов, под силу немногим. Процессор имеет очень большое количество инструкции, каждую из которых необходимо разработать, встроить, протестировать. Возможно что написание этого цикла займёт очень длительное время, но я не хочу больше торопиться, это ни к чему больше. По мере возможности я буду объяснять простым языком то, о чем говорю и то чего разрабатываю. Спешка в этом деле все равно ни к чему хорошему не приведет.
Я надеюсь, что со временем мне удастся все доделать до конца, разобрать каждую мелочь и создать рабочий код. Необходимо только не останавливаться на этом пути.