Как работает микропроцессор

June 27, 2010 by admin Комментировать »

Для того чтобы понять, как работает микропроцессор, зададим себе во­прос — а как он должен работать? Есть теория (в основном созданная пост­фактум: после того, как первые ЭВМ были уже построены и функционирова­ли), которая указывает, как именно строить алгоритмы, и что процессор в соответствии с этим должен делать. Мы, естественно, углубляться в это не будем, просто констатируем, что любой алгоритм есть последовательность неких действий, записанных в виде набора последовательно выполняемых команд (инструкций, операторов). При этом среди таких команд могут встре­чаться команды перехода, которые в некоторых случаях нарушают исходную последовательность выполнения операторов строго друг за другом. Среди прочих должны быть также команды ввода и вывода данных (программа должна как-то общаться с внешним миром?), а также команды выполнения арифметических и логических операций.

Команды должны где-то храниться, поэтому неотъемлемой частью всей сис­темы должно быть устройство памяти программ. Где-то надо складывать и данные, как исходные, так и результаты работы программы, поэтому должно быть устройство памяти данных. Так как команды и данные, в конечном сче­те, все равно есть числа, то память может быть общая, только надо уметь от­личать, где именно у нас команды, а где — данные. Это есть один из прин­ципов фон Неймана, хотя и в микроконтроллерах, о которых мы будем говорить в дальнейшем, традиционно используют не фон-неймановскую, а так называемую гарвардскую архитектуру, когда память данных и программ разделены (это разделение, впрочем, может в определенных пределах нару­шаться). Процессор, построенный по фон Нейману, более универсален, на­пример, он позволяет без особых проблем наращивать память, строить ее ие­рархически и более эффективно ее перераспределять прямо по ходу работы. Например, в системе Windows всегда предполагается, что компьютер имеет практически неограниченный объем памяти (измеряемый в терабайтах), а если ее реально не хватает, к делу подключается своп-файл на жестком дис­ке. В то же время микроконтроллерам подобная гибкость не особенно требу­ется — на их основе, как правило, строятся узлы, выполняющие конкретную задачу и работающие по конкретной программе, так что нужную конфигура­цию системы ничего не стоит предусмотреть заранее.

МП и МК

Кстати, а почему мы все время говорим то микропроцессоры (МП), то микро­контроллеры (МК)? Микроконтроллер отличается от микропроцессора тем, что он предназначен для управления другими устройствами, и поэтому имеет встроенную развитую систему ввода-вывода, но, как правило, относительно более слабое АЛУ. Микроконтроллерам очень хорошо подходит термин, кото­рый в советское время имел, правда, несколько иное значение— «микро-ЭВМ», еще точнее звучит английское «computer-on-chip», однокристальный компьютер. В самом деле, для построения простейшего вычислительного уст­ройства, которое могло бы выполнять что-то полезное, обычный микропроцес­сор, от i4004 до Pentium и Core Duo, приходится дополнять памятью, ПЗУ с за­писанной BIOS, устройствами ввода-вывода, контроллером прерываний, тактовым генератором с таймерами и т. п. — всем тем, что сейчас стало объе­диняться в т. н. «чипсеты». «Голый» МП способен только одно: правильно включиться, ему даже программу загрузки неоткуда взять.

В то же время для МК микропроцессор — это только ядро, даже не самая большая часть кристалла. Для построения законченной системы на типовом МК не требуется вообще ничего, кроме источника питания и периферийных исполняющих устройств, которые позволяли бы человеку определить, что сис­тема работает. Обычный МК может без дополнительных компонентов общать­ся с другими МК, внешней памятью, специальными микросхемами (вроде ча­сов реального времени или флэш-памяти), управлять небольшими (а иногда — и большими) матричными панелями, к нему можно напрямую подключать дат­чики физических величин (в том числе — чисто аналоговые, АЦП тоже часто входят в МК), кнопки, клавиатуры, светодиоды и индикаторы, короче— в микроконтроллерах сделано все, чтобы приходилось как можно меньше паять и задумываться над подбором элементов. За это приходится расплачиваться пониженным быстродействием (которое, впрочем, не так-то уж и важно в ти­повых задачах для МК) и некоторым ограничением в отдельных функциях — по сравнению с универсальными, но в сотни раз более дорогими и фомоздки-ми системами на «настоящих» МП. Вы можете мне не поверить, но процессо­ры для персональных компьютеров (ПК), о которых мы столько слышим, за­нимают в общем количестве выпускаемых процессоров лишь 5—6% — остальные составляют микроконтроллеры различного назначения.

В соответствии со сказанным основной цикл работы процессора должен быть таким: выборка очередной команды (из памяти), если необходимо — выбор­ка исходных данных для нее, выполнение команды, размещение результатов в памяти (опять же если это необходимо). Вся работа в этом цикле должна происходить автоматически па командам некоторого устройства управления, содержащего тактовый генератор — системные часы, по которым все син­хронизируется. Кроме того, где-то это все должно происходить — складиро­вание данных, кода команды, выполнение действий и т. п., так что процессор должен содержать некий набор рабочих регистров (по сути — небольшую по объему сверхбыструю память), определенным образом связанных как между собой, так и с устройством управления и АЛУ, которое неизбежно должно присутствовать.

Решающую роль в работе процессора играет счетчик команд. Он автоматиче­ски устанавливается на нуль в начале работы, что соответствует первой ко­манде, и автоматически же инкрементируется (то есть увеличивается на еди­ницу) с каждой выполненной командой. Если по ходу дела порядок команд нарушается, например, встречается команда перехода (ветвления), то в счет­чик загружается соответствующий адрес команды — ее номер от начала про­граммы. Если это не просто ветвление, а выполнение подпрограммы, которое предполагает в дальнейшем возврат к основной последовательности команд (к следующей команде после вызова подпрограммы), то перед переходом к выполнению подпрограммы текущее значение счётчика команд сохраняется в специально отведенной для этой цели области памяти — стеке. По команде окончания подпрограммы сохраненный адрес извлекается из стека, и выпол­нение основной программы продолжается. К счастью, нам самим не придется иметь дело со счетчиком команд, потому что все указания на этот счет со­держатся в командах, и процессор все делает автоматически.

clip_image002

Рис. 18.2. Блок-схема простейшего микроконтроллера

Блок-схема простейшего МК, содержащего процессорное ядро и минимум компонентов для «общения» с внешней средой, показана на рис. 18.2. Здесь мы включили в состав системы память программ, которая у ПК-процессоров находится всегда отдельно (если не считать относительно небольшого объе­ма быстродействующей кэш-памяти) — сами знаете, какой объем программ бывает в персональных компьютерах. В большинстве современных микро­контроллеров постоянное запоминающее устройство (ПЗУ) для программ входит в состав чипа и обычно составляет от V—2 до 8—32 кбайт. Хотя есть модели и с 256 килобайтами встроенной памяти, но 2—8 кбайт для подав­ляющего большинства применений вполне достаточно. Встроенное опера­тивное запоминающее устройство (ОЗУ) для хранения данных в том или ином объеме также имеется во всех современных микроконтроллерах, ти­пичный размер такого ОЗУ — от 128—256 байт до 1—4 кбайт. В большинст­ве универсальных контроллеров есть и некоторое количество встроенной энергонезависимой памяти для хранения констант— обычно столько же, сколько и ОЗУ данных. Но к памяти мы еще вернемся в этой главе, а пока продолжим про процессоры.

Подробности

в первых моделях микропроцессоров (включая и интеловские процессоры для ПК — от 8086 до 80386) процессор выполнял команды строго последователь­но: загрузить команду, определить, что ей нужны операнды, загрузить эти опе­ранды (по адресу регистров, которые их должны содержать; адреса эти, как правило, хранятся сразу после собственно кода команды или определены за­ранее), потом проделать нужные действия, складировать результаты… До на­шего времени дошла архитектура суперпопулярных еще недавно микрокон­троллеров 8051, выпускающихся и по сей день различными фирмами (Atnnel, Philips), которые выполняли одну команду аж за 12 тактов (в некоторых совре­менных аналогах, впрочем, это число меньше). Для ускорения работы стали делить такты на части (например, срабатывать по переднему и заднему фрон­там), но действительный прорыв произошел с внедрением конвейера. Со вре­мен Генри Форда известно, что производительность конвейера зависит только от времени выполнения самой длинной операции — если поделить команды на этапы и выполнять их одновременно разными аппаратными узлами, то можно добиться существенного ускорения (хотя и не во всех случаях). В рас­сматриваемых далее микроконтроллерах Atmel AVR конвейер двухступенча­тый: когда очередная команда загружается и декодируется, предыдущая уже выполняется и пишет результаты. В AVR это позволило выполнять большин­ство команд за один такт (кроме команд ветвления программы).

Главное устройство в МП, которое связывает все узлы в единую систему — внутренняя шина данных. По ней все устройства обмениваются сигналами. Например, если МП требуется обратиться к внешней, дополнительной памя­ти, то при исполнении соответствующей команды на шину данных выставля­ется нужный адрес, от устройства управления поступает через нее же запрос на обращение к нужным портам ввода/вывода. Если порты готовы, адрес по­ступает на выходы портов (то есть на соответствующие выводы контролле­ра), затем по готовности принимающий порт выставляет на шину принятые из внешней памяти данные, которые загружаются в нужный регистр, после чего шина данных свободна. Для того чтобы все устройства не мешали друг другу, все это строго синхронизировано, при этом каждое устройство имеет, во-первых, собственный адрес, во-вторых, может находиться в трех состоя­ниях — работать на ввод, на вывод или находиться в третьем состоянии, не мешая другим работать.

Под разрядностью МП обычно понимают разрядность чисел, с которыми ра­ботает АЛУ, соответственно, такую же разрядность имеют и рабочие регист­ры. Например, все ПК-процессоры от 1386 до последних инкарнаций Pentkim были 32-разрядными, некоторые последние модели от Intel и AMD стали 64-разрядными. Большинство микроконтроллеров общего назначения— 8-раз­рядные, но есть и 16-, и 32-разрядные. При этом внутренняя шина данных может иметь и больше разрядов — например, чтобы одновременно переда­вать и адреса и данные.

Распределение рынка МК в первые годы тысячелетия было таким: немного меньше половины выпускаемых изделий составляют 8-разрядные кристаллы, а вторую половину поделили между собой 16- и 32-разрядные, причем доля последних неуклонно растет за счет 16-разрядных. Выпускаются даже 4-разрядные, потомки первого 14004, которые занимают не более 10% рынка, но, что любопытно, эта доля снижается очень медленно.

Заметки на полях

Обычно тактовая частота универсальных МК невелика (хотя инженеру 1980-х, когда ПК работали* на частотах не выше 6 МГц, она показалась бы огром­ной) — порядка 8—16 МГц, иногда до 20 МГц или несколько более. И это всех устраивает — дело в том, что обычные МК и не предназначены для разработ­ки быстродействующих схем. Если требуется быстродействие, то использует­ся другой класс интегральных схем — ПЛИС, «профаммируемые логические интефальные схемы». Простейшая ПЛИС представляет собой набор никак не связанных ме>кду собой логических элементов (наиболее сложные из них мо­гут включать в себя и некоторые законченные узлы, вроде триггеров и генера­торов), которые в процессе программирования такого чипа соединяются в нуж1|1ую схему. Комбинационная логика работает гораздо быстрее тактируемых контроллеров, и для построения различных логических схем в настоящее вре­мя применяют только ПЛИС, от использования дискретных элементов («рас-сыпухи») в массовых масштабах уже давно отказались. Еще одно преимуще­ство ПЛИС— статическое потребление энергии для некоторых серий составляет единицы микроватт, в отличие от МК, которые во включенном со­стоянии потребляют достаточно много (если не находятся в режиме энерго­сбережения). В совокупности с более универсальными и значительно более простыми в обращении, но менее быстрыми и экономичными микроконтролле­рами, ПЛИС составляют основу большин9твд массовых электронных изделий, которые вы видите на прилавках. В этой книге мы, конечно, рассматривать ПЛИС не будем — в любительской практике, в основном из-за дороговизны соответствующего инструментария и высо1кого порога его освоения, они не ис­пользуются, и для конструирования oди^|oчныx экземпляров приборов даже для профессиональных применений их ис111ользовать нецелесообразно.

Если подробности внутреннего функционирования МП нас волнуют не очень (центральный узел — АЛУ мы уже «изобретали» в главе 15, и этого доста­точно, чтобы понимать, что именно происходит внутри процессорного ядра), то обмен с внешней средой нас как раз интересует во всех деталях. Для этого служат порты ввода/вывода (I/0-port, от input/output). В этом термине имеет­ся некоторая неопределенность, так как те, кто программировал для ПК на ассемблере, помнят, что в ПК портами ввода/вывода (ПВВ) назывались реги­стры для управления всеми устройствами, кроме непосредственно процес­сорного ядра. В микроконтроллерах то же самое называют «регистрами вво­да/вывода» (РВВ) — это регистры для доступа ко встроенным компонентам контроллера, внешним по отношению к вычислительному ядру. А это все узлы, которыми непосредственно управляет пользователь — от таймеров и последовательных портов до регистра флагов и управления прерываниями. Кроме ОЗУ, доступ к которому обеспечивается специальными командами, все остальное в контроллере управляется через РВВ, и путать с портами вво­да-вывода их не следует.

ПВВ в МК служат для обмена с «окружающей средой» (управляются они, естественно, тоже внутренними регистрами ввода-вывода). На схеме рис. 18.2 показано 3 ПВВ — А, В и С; в реальных МК их может быть и боль­ше, и меньше. Еще важнее число выводов этих портов, которое чаще всего совпадает с разрядностью процессора (но не всегда, как это было у 8086, ко­торый имел внутреннюю 16-разрядную структуру, а внешне выглядел 8-разрядным). Если мы заставим 8-разрядные порты «общаться», например, с внешней памятью, то на двух из них можно выставить 16-разрядный адрес, а на оставшемся — принимать данные. А как быть, если портов два или вооб­ще один? (К примеру, в микроконтроллере АТхххх2313 портов формально два, но один усеченный, так что общее число линий составляет 15). Для того чтобы даже в такой ситуации это было возможно, все внешние порты в МП всегда двунаправленные. Скажем, если портов два, то можно сначала выста­вить адрес, а затем переключить порты на вход и принимать данные. Естест­венно, для этого порты должны позволять работу на общую шину — то есть либо иметь третье состояние, либо выход с общим коллектором для объеди­нения в «монтажное ИЛИ».

Варианты для обоих случаев организации выходной линии порта показаны на рис. 18.3, где приведены упрощенные схемы выходных линий микрокон­троллеров семейства 8048 — когда-то широко использовавшегося предшест­венника популярного МК 80S1 (например, 8048 был выбран в качестве кон­троллера клавиатуры в IBM PC). В современных МК построение портов несколько сложнее (в частности, вместо резистора там полевой транзистор), но для уяснения принципов работы это несущественно.

По первому варианту (рис. 18.3, а) в МК 8048 построены порты 1 и 2. Когда в порт производится запись, то логический уровень поступает с прямого выхо­да защелки на статическом D-триггере на вход схемы «И», а с инверсного — на затвор транзистора VT2. Если этот уровень равен логическому нулю, то транзистор VT1 заперт, а VT2 открыт, на выходе также логический ноль. Ес­ли уровень равен логической единице, то на время действия импульса «За­пись» транзистор VT1 открывается, а транзистор VT2 запирается (они одина­ковой полярности). Если на выходе присутствует емкость (а она всегда имеется в виде распределенной емкости проводников и емкости входов дру­гих компонентов), то через открытый VT1 протекает достаточно большой ток заряда этой емкости, позволяющий сформировать хороший фронт перехода из О в 1. Как только импульс «Запись» заканчивается, оба транзистора от­ключаются, и логическая единица на выходе поддерживается резистором R1. Выходное сопротивление открытого транзистора VT1 примерно 5 кОм, а ре­зистора — 50 кОм. Любое другое устройство, подключенное к этой шине, при работе на выход может лишь либо поддержать логическую единицу, включив свой подобный резистор параллельно R1, либо занять линию своим логическим нулем — это, как видите, и есть схема «монтажное ИЛИ». При работе на вход состояние линии просто считывается во время действия им­пульса «Запись» со входного буфера (элемент «В» на рис. 18.3, а).

Второй вариант (рис. 18.3, б), по которому устроен порт О, есть обычный вы­ходной каскад КМОП с третьим состоянием, то есть такой порт может рабо­тать на выход, только полностью занимай линию, остальные подключенные к линии устройства при этом должны смиренно внимать монополисту, воспри­нимая сигналы. Это обычно не создает особых трудностей и схемотехниче­ски даже предпочтительно ввиду симметрии выходных сигналов и высокого сопротивления для входных. Единственная сложность возникает при сопря­жении такого порта с линией, работающей по первому варианту, так как при логической единице на выходе могут возникнуть электрические конфликты, если кто-то попытается выдать в линию логический ноль (ток от источника пойдет через два распахнутых транзистора).

clip_image004

clip_image006

Рис. 18.3. Упрощенные схемы портов ввода/вывода МК 8048: а — портов 1 и 2; б — порта О

Для обеспечения работы трехстабильного порта по схеме «монтажное ИЛИ» применяют хитрый прием: всю линию «подтягивают» к напряжению питания с помощью внешнего резистора (во многих МК существует встроенный от­ключаемый резистор, установленный аналогично R1 в схеме рис. 18.3, а), и нормальное состояние всех участвующих трехстабильных портов — работа на вход в третьем состоянии. В этом режиме на линии всегда будет логиче­ская единица. На выход же линию переключают только, когда надо выдать логический ноль. В этом случае, даже при одновременной активности не­скольких портов, конфликтов не возникнет.

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

Устройство витков выходе генератора импульсов микросхемы мощности нагрузки напряжение напряжения питания приемника пример провода работы радоэлектроника сигнал сигнала сигналов сопротивление схема теория транзистора транзисторов управления усиления усилитель усилителя устройства частоты