Таким образом, самый низкий уровень, который мы можем «запрограммировать», — это отдельные инструкции процессора, но эти инструкции должны были быть как-то запрограммированы в первую очередь. Как процессор узнает, что делать, когда выполняется инструкция?
язык ассемблера более низкого уровня? (как реализованы инструкции процессора?)
Ответы (4)
Полезные статьи:
http://www.gamezero.com/team-0/articles/math_magic/micro/ Как спроектировать простой процессор...
Примечания к лекциям к этому курсу: http://www.stanford.edu/class/ee382/ а> Дизайн процессора
Вам нужна эта книга.
Это называется «микрокод» (по крайней мере, так это называлось, когда я в последний раз смотрел на них 15+ лет назад).
Различные аппаратные функциональные механизмы в процессоре координируются с программным обеспечением «микрокода»: выборка, декодирование «машинного кода», выполнение и т. д.
Думая упрощенно, как это делали бы старые процессоры:
Если вы посмотрите на биты инструкций для большинства процессоров, вы начнете видеть закономерности. Несколько битов определяют один из входных регистров, несколько битов могут определять другой входной регистр, несколько битов могут определять регистр результата, а несколько битов определяют операцию. Таким образом, некоторые части оборудования смотрят на биты, определяющие операнд a, и используют их для подключения операнда a к alu, другое оборудование использует биты операнда b для направления операнда b на вход b на alu. Другие биты выбирают операцию, которую должен выполнять alu, сложение и/или исключающее ИЛИ и т. д. Наконец, биты результата направляют вывод alu в регистр, который должен хранить результат. Немного упрощенно, но в то же время не так уж далеко от того, как пишется логика и как работают традиционные процессоры и многие из них меньшего размера. Это буквально то, как работали самые ранние компьютеры, и их «программирование» включало в себя маршрутизацию ответа от этого alu на вход на этом alu вместе с вводом от другого, пока результат не получился в конце, который вы искали.
Некоторые из более крупных современных процессоров имеют микрокод, что означает, что на самом деле внутри есть еще один уровень инструкций, ваша операция c = a + b может превратиться в серию микрокодированных инструкций, которые запускаются, когда приходит ваша машинная инструкция, и это поможет выполнить направить входы в логику сумматора, а результат обратно в выходные типы вещей.
В наши дни логика реализуется с использованием таких языков программирования, как verilog и vhdl, которые довольно близки к существующим языкам программирования. Разница в том, что многие строки в «коде» выполняются одновременно, не обязательно в последовательном порядке, как в обычном программном обеспечении. Имея хорошо написанный hdl, нетрудно подобрать язык и понять, что происходит. Возможно, вы захотите зайти на opencores.org и получить исходный код одного из множества клонов процессора. Инструменты компилятора для hdl не сильно отличаются от тех, которые используются для программного обеспечения, вместо инструкций код сводится к логике или вентилям, этот бит объединяется с тем битом, этот бит объединяется с тем битом. Модули, которые можно легко реализовать в логике и связать вместе. И точно так же, как вы можете взять программу на C и запустить ее на многих процессорах и операционных системах, вы можете взять hdl и скомпилировать ее для типов вентилей в разных fpgas или логических модулях для разных литейных заводов.