Это о том, как работают микроконтроллеры в целом ..
Программирование, которое мы делаем, преобразуется компилятором в 1 и 0, и этот машинно понятный код затем загружается в микроконтроллер.
Как микроконтроллер реагирует на это? Я имею в виду, что эти 1 и 0 преобразуются в соответствующее логическое напряжение (5 В и 0) с помощью ЦАП? Если это так, как этот маленький кусочек кремния решает, что делать с этими различными комбинациями 5v и 0v?
Я понимаю, что каждая микросхема состоит из логических вентилей, и эти вентили состоят из транзисторов. Итак, как эти транзисторы реагируют на различные комбинации 5 В и 0 В?
Что заставляет их искать эту логику? Я имею в виду, как они следят за этими инструкциями, когда они включены?
Так что наверняка должна быть операционная система, загруженная в mcu, которая говорит ему обрабатывать, и как обрабатывать эти инструкции, не так ли? ..
Следующее, что нужно ... рассмотрим таймер ... это просто регистр, который увеличивается на единицу после каждого тактового цикла. Разве ОС не дает команду mcu увеличивать значение после каждого тактового цикла? Я прав? В таком случае, на каком языке написан весь код операционной системы?
Я могу просто приступить к работе по программированию mcu для различных задач, но сегодня мне было интересно узнать, как мой код понимается этой машиной.
Извините, что мой вопрос долго читать .. Пожалуйста, помогите мне изучить эти основные вещи ..
Заранее спасибо..
источник
Ответы:
Нет необходимости использовать ЦАП. Напряжения используются для представления единиц и нулей в соответствии с соглашением, что все, что ниже 0,8 В (AKA «низкий»), равно нулю, а все, что выше 2,4 В (AKA «высокий»), равно единице. Относительно просто построить схемы, которые выполняют логику с этими типичными напряжениями.
Например, схема может выводить что-то в диапазоне от 2,4 В до 5 В, чтобы представлять «1», если какой-либо вход превышает 2,4 В или что-то меньше 0,8 В в противном случае, и у вас есть логический элемент ИЛИ. Если для вывода 2,4 В требуются оба входа, представляющих 1, у вас есть логический элемент AND. Инвертор просто выдает высокий уровень, когда на входе низкий уровень, и наоборот. Вы можете создать простые вентили, подобные этим, используя всего несколько транзисторов, и выполнять комбинаторную логическую логику. Используя группы битов для представления чисел, вы даже можете создавать схемы для сложения чисел с помощью комбинаторной логики, программное обеспечение не требуется.
Как только вы работаете с воротами, вы можете создавать триггеры, а из них - регистры и счетчики. Триггеры позволяют хранить 1 и 0 с одного момента времени и использовать их позже. Регистры и счетчики являются схемами, которые выполняют функции над группами битов, которые представляют числа. Регистр содержит номер, пока вы не загрузите в него новый номер. Счетчик похож на регистр, но имеет другой вход, который вызывает увеличение сохраненного числа. (Возможно и снижение). Это ставит вас в область конечных автоматов и последовательной логики, но программное обеспечение не требуется.
Системы памяти - это способ хранить огромное количество битов. На уровне компонентов некоторая память создается как огромная коллекция триггеров, но чаще существует другая технология (DRAM), которая, хотя и не является триггером, делает то же самое.
В качестве дальнейшего шага вы можете создать систему последовательной и комбинаторной логики, которая может выполнять операции в зависимости от битов, хранящихся в системе памяти, включая запись новых значений в эту систему памяти. Теперь вы достигли уровня процессора, и все, что делает процессор, - это просто аппаратное обеспечение, выполняющее множество простых задач. (несмотря на микропрограммированные ядра). На этом этапе конкретные комбинации битов, которые вы помещаете в систему памяти, можно считать программным обеспечением машинного языка.
источник
Получите книгу Чарльза Петцольда «Код: скрытый язык компьютерного оборудования и программного обеспечения» . Это удивительно, легко читается и ответит на многие из этих вопросов.
Если вы не можете позволить себе книгу Петцольда, посмотрите «Как работают компьютеры» Роджера Янга . Он охватывает большую часть того же материала, а HTML и PDF-версии бесплатны.
источник
Рассмотрим NPN BJT; транзистор. Один из первых обнаружил.
Теперь вы подключаете его так, чтобы коллектор был подключен к переменному логическому входу, а эмиттер был подключен к другому логическому входу с последовательно включенным резистором. Затем резистор от эмиттера к земле.
Вы только что построили ворота И Выход только высокий, когда оба входа высоки. Он не идеален ни в коем случае, поскольку он зависит от входных данных для коллектора и потому, что он не развивается хорошо, но дает представление о том, как транзисторы можно использовать для вычисления функции.
Затем вы также можете построить НЕ ворота;
Добавление этого к выходу только что созданного вентиля AND дает нам вентиль NAND, и вы можете знать, что с вентилем NAND вы можете создать любую форму логики. Он также имеет то преимущество, что сигнал буферизуется, что увеличивает выход вентилятора и возможность цепочки.
Реальные процессоры редко используют BJT, но вместо этого применяется логика CMOS, но применяются те же принципы.
источник
Может быть, вам стоит поискать ссылки на цифровые системы или посмотреть что-то вроде VHDL. MCU в основном разработан со строительными блоками, которые могут быть различными логическими элементами и (меньшими) строительными блоками. В конечном итоге все сводится к логическим элементам, которые действительно состоят из транзисторов. Типичный простой MCU, такой как PIC18F или что-то еще, не работает под управлением операционной системы. Программа, которую вы загружаете в нее, представляет собой набор машинных инструкций, которые PIC выполняет непрерывно. Все процессы выполняются аппаратно.
У общего процессора обычно есть ALU (вычисляет результат определенной инструкции) и больше блоков вокруг него, которые загружают инструкции, управляют стеком и управляют памятью. У обработчика есть несколько регистров для работы с ним, в основном для загрузки входных данных и сохранения результатов. Вы можете увидеть не столько это на C или другом языке, сколько на ассемблере.
ALU обрабатывает инструкции с определенными кодами операций и входами. Например, типичная инструкция может быть ADD 12 1, что означает 12 + 1 = 13. Результат сохраняется в регистре на самом обработчике.
В зависимости от архитектуры, ALU, например, имеет ширину 8 бит. Простой 8-битный сумматор может быть сделан из 8x 1-битных сумматоров, соединенных вместе (используя блоки для создания большего блока). 1-битный сумматор может быть легко записан в логические элементы с помощью логической алгебры. Запись целого 8-битного сумматора вручную с использованием только логических элементов была бы безумной работой. Это похоже на написание программы без возможности использовать какую-либо функцию или подпрограмму вообще.
Для правильной работы цифровых систем большинство блоков спроектировано на основе тактовой частоты. Каждая цифровая система имеет определенное количество времени, необходимое для достижения своего конечного состояния. Это связано с задержками переключения транзисторов и состояниями, влияющими на другие состояния. Тактовый сигнал - это то, с чем вы должны быть знакомы, скорость, с которой работает процессор. Таймер может быть действительно простым устройством, которое имеет небольшой блок сумматора и увеличивает его на 1 каждый раз, когда срабатывает такт.
источник
Это большая тема, и я не могу дать простой ответ, но ...
Вы можете немного приблизиться к этому ответу, выполнив несколько разделений и побед, и, поскольку другой ответ пытается атаковать эту проблему с точки зрения hw, я попробую с точки зрения SW высокого уровня.
Если вы пишете какое-то программное обеспечение, скажем, на языке c (очень высокий уровень абстракции), вы на самом деле не видите, что происходит, на самом деле не понимаете всего того, о чем вы спрашиваете.
Но давайте все равно начнем.
Простая программа, которая просто включает переменную.
Затем нам нужно получить код на ассемблере, чтобы мы могли понять, что происходит. Этот шаг можно выполнить на любой платформе, которую вы используете, но для простоты я использую gcc на ПК (но это не имеет значения ...)
Тогда мы получим что-то вроде этого:
Затем вы пытаетесь понять каждую строку кода и то, что он делает.
И тогда вы начинаете изучать, как каждая инструкция реализуется ... Например, субл
На данный момент все по-разному на разных архитектурах и x86, arm, pic вроде бы разные ... Но так как мой пример был x86.
http://en.wikipedia.org/wiki/X86_assembly_language
subl $ 4,% esp / * выделяет 4 байта стекового пространства для локальных переменных этой функции * /
И на этом уровне, когда вы читаете копию, большинство действий будет выглядеть так, будто вы просто перемещаете числа, и в некотором смысле это то, что происходит. У нас есть предопределенная программа, которую мы выполняем, эта программа хранится в некоторой флэш-памяти, которая обычно представляет собой какую-то электронную логику, которая захватывает один логический уровень.
Если вы видите какой-то « триггер » для каждого бита, то вы как бы близки, и тогда нам нужно много таких. Здесь мы начинаем находить ваши единицы и нули.
Затем, чтобы произошло какое-то действие, мы добавляем некоторую классную логику, которая может преобразовать одно число в другое число (сам процессор).
И затем мы следуем программе по одному шагу за раз, и чтобы узнать, где мы находимся, у нас есть счетчик программ (ПК). И перемещайте числа назад и на четвертое и сохраняйте их в другой памяти, которая также является своего рода решеткой с триггерами.
Но давайте снова вернемся к какому-то конкретному примеру, чтобы немного лучше понять процессор, мы можем взглянуть на ALU и эту упрощенную картину . Вы можете видеть, что когда мы перемещаем данные в этот логический блок и выбираем какую-либо операцию с контактами OP, мы получим новый результат на выходе. Что мы в свою очередь можем вернуться в какое-то место в памяти.
И проклясть ваш ALU в вашей части CPU вашего MCU намного сложнее, чем этот, но он работает по тому же базовому принципу.
В этот момент мы можем видеть некоторую логическую схему, которая выполняет «работу» с одной стороны, и некоторое хранилище с другой стороны. И хранилище состоит из двух частей, одна для программы и одна для данных. Но как мы на самом деле «двигаемся» тогда, это должно быть каким-то образом связано ...
И здесь мы соединяем эти части с каким-то автобусом.
Шина - это просто несколько проводов, которые соединяют различные части вместе, и затем логика управления сообщает памяти, какие данные отправлять на эту шину, и какую часть ЦП следует прослушивать, чтобы эти данные были отправлены. И это делается с помощью нескольких параллельных линий управления, которые будут включать / отключать различные части.
...
Поэтому, если вы выбираете mcu по своему выбору и анализируете очень маленькую программу, и пока вы не понимаете, что происходит, вы анализируете ее еще больше, пока у вас не получится симпатичная маленькая головоломка, которую можно использовать для создания «mcu».
И не забудьте прочитать таблицу данных для вашего mcu и посмотреть, с какими частями он был сделан, например, с какой памятью, alu, bus и т. Д. И т. Д.
Надеюсь, это поможет немного ???
Удачи
источник
Вам на самом деле не нужно знать эти вещи, если вы не собираетесь сами проектировать процессоры, но все это сводится к огромному конечному автомату, реализованному аппаратно.
Самая большая проблема с такого рода вопросом заключается в том, что ответ огромен и занимает несколько лет университетских курсов, поэтому любой ответ, который вы получите здесь, будет только поверхностным.
Если вы действительно хотите узнать, что входит в процессор, взгляните на исходный код vhdl / verilog по адресу: http://opencores.org/projects
Само изучение vhdl и verilog само по себе является большой задачей, так что вы будете долго читать :)
источник
Нет, не ЦАП. 1 и 0 действительно никогда не существуют. Это просто математическая абстракция, которую мы используем для облегчения программирования. Фактическое цифровое напряжение может составлять 5 В, или 3,3 В, или 1 В, в зависимости от аппаратного обеспечения. В конечном итоге компьютер - это просто цифровая логика. Память хранит 1 и 0 как цифровую логику, цифровая логическая схема передает их из памяти в процессор, процессор представляет собой цифровую логическую схему, которая может складывать, вычитать или сравнивать двоичные числа и т. Д.
Силикон представляет собой стекло, смесь кремния и кислорода. Чипы изготовлены из чистого кремниевую на , с примесями , добавленными в определенных местах , чтобы сделать все транзисторы.
Цифровые ИС сделаны из логических элементов, а не аналоговых.
Читайте на простейшем примере, инвертор CMOS .
источник