Встраиваемые системы (в англ. embedded systems) является сердцем большинства современных электронных продуктов. Мы окружены миром встроенных/встраиваемых систем с мини-компьютерами в биометрических дверных замках, самолетах, автомобилях, кардиостимуляторах и т. д. Эти небольшие, умные и мощные системы с ограниченными ресурсами помогают нам в наших повседневных задачах.
Вы когда-либо задумывались о том, как функционирует наше тело, нервная система, мозг и способность к многозадачности. Если объединить все эти функции, вы получите примерное представление о встроенной биологической системе. Наш мозг скрывает сложные детали своего функционирования, происходящие внутри него, но при этом позволяет нам максимально контролировать его. Та же сложность касается процессора или контроллера, используемого во встроенных системах. Они скрывают сложные детали и предоставляют нам высокоуровневый интерфейс для работы. На уровне абстракции можно объяснить, как код сложения двух чисел на языке программирования высокого уровня заставляет регистры в микросхемах обрабатывать биты и возвращать выходные данные пользователю.
Архитектуры процессоров
Центральный процессор (ЦП), относящийся как к микропроцессору, так и к микроконтроллеру , выполняет конкретные задачи с помощью блока управления (CU) и арифметико-логического устройства (АЛУ). Поскольку инструкции доставляются из оперативного запоминающего устройства (ОЗУ), ЦП действует с помощью двух своих вспомогательных модулей, создавая переменные и присваивая им значения и память. Очень важно знать, как ЦП выполняет все эти действия с помощью своей архитектуры.
С каждым процессором связана память для хранения программы и данных. Программа и данные работают с процессором для получения выходных данных. Программа предоставляет инструкции, а данные предоставляют информацию, над которой нужно работать. Для доступа к программе и данным ЦП использует шины, эти шины представляют собой провода, точнее, это следы проводов, которые вы, возможно, видели на печатных платах. За эти годы микроконтроллеры и микропроцессоры развивались путем адаптации различных архитектур, в зависимости от требований применения или дизайна, на выбор микроконтроллера влияет тип используемой в нем архитектуры. Давайте посмотрим на популярные архитектуры.
Фон-Нейман / Принстонская архитектура
Способ, которым ЦП получает доступ к программе и данным, говорит об архитектуре ЦП. Раньше для доступа к программе и данным использовалась одна шина. Этот тип архитектуры известен как архитектура фон Неймана или, проще говоря, архитектура Принстона. Единая шина для получения кода и данных означает, что они мешают друг другу и замедляют скорость обработки ЦП, поскольку каждому приходится ждать, пока другой завершит выборку. Это ограничение также известно как условие узкого места архитектуры Фон-Неймана .
Гарвардская архитектура
Чтобы ускорить процесс, была предложена Гарвардская архитектура. В этой архитектуре присутствуют отдельные шины данных для данных и программы. Значит, эта архитектура предполагала использование четырех шин
- Набор шин данных, передающих данные в ЦП и из него.
- Набор адресной шины для доступа к данным.
- Набор шин данных для передачи кода в ЦП.
- Адресная шина для доступа к коду.
Использование отдельной адресной шины и шины данных означало сокращение времени выполнения ЦП, но это происходило за счет сложности проектирования архитектуры. Архитектура фон Неймана может показаться немного «ленивой», но ее преимуществом является простота конструкции.
Гарвардскую архитектуру гораздо проще реализовать, когда ЦП и блоки памяти занимают одно и то же пространство или ОЗУ и ПЗУ встроены (встроены) в процессор, например, в микроконтроллере, где расстояния измеряются в микронах и миллиметрах. Однако ту же архитектуру трудно реализовать, если память, содержащая код, является внешней по отношению к процессору, например, в x86 IBM PC. Набор отдельных дорожек для данных и адреса на материнской плате сделал бы плату сложной и дорогой. Давайте разберемся в этом на примере процессора.
Процессору с 64-битной шиной данных и 32-битной адресной шиной потребуется около 100 шин (96 для шины данных и адреса и несколько других для сигналов управления) для реализации архитектуры Фон-Неймана. Та же самая структура, если бы она была реализована с использованием гарвардской архитектуры, потребовала бы двойных проводных дорожек (что вылилось бы в дополнительные примерно 200 долларов США стоимости) с большим количеством выводов, выходящих из процессора. По той же причине мы не видим чистой Гарвардской архитектуры, реализованной для ПК и рабочих станций. Вместо этого используется модифицированная Гарвардская архитектура, в которой для разделения программы и данных используется иерархия памяти с кэш-памятью ЦП. Иерархия памяти разделяет хранилище на основе иерархии времени отклика процессов.
Архитектура набора команд
Когда программа (код) загружается в память системы (ОЗУ), она загружается ЦП (имеется в виду как микропроцессор, так и микроконтроллер) для воздействия на данные. Это очень похоже на то, как мы даем инструкции, когда тренируем собаку. определенные действия и команды. Когда эти инструкции воздействуют на определенные транзисторы, они переходят с одного логического уровня на другой. Итак, в основном с помощью инструкций человек-программист общается с процессором. Каждый процессор имеет свой собственный набор инструкций, основанный на его архитектуре и возможностях.
ЦП понимает эти инструкции в комбинации 0 и 1, которые также известны как код операции. Программисту-человеку действительно сложно запомнить комбинацию нулей и единиц для каждой инструкции, связанной с процессором. Чтобы упростить работу программиста-человека, нам предоставляются высокоуровневые интерфейсы этих инструкций, и компилятор преобразует их в форму 0 и 1 для обработки. Кроме того, в наборе инструкций каждого процессора имеется ограниченное количество инструкций, которые он может понять.
Производительность процессора
Возможно, вы слышали термин «тактовая частота ЦП» , связанный с производительностью ЦП. Процессоры обычно имеют тактовую частоту в МГц (мегагерцах) или ГГц (гигагерцах), например, тактовую частоту 25 ГГц. Число, связанное с тактовой частотой, показывает, сколько раз часы внутри ЦП тикают в циклах в секунду. Практичность тактовой частоты можно понять из того факта, что инструкции выполняются на основе тактовых циклов ЦП, которые пропорциональны количеству программ, которые ЦП может выполнять одновременно.
Производительность ЦП зависит от количества инструкций, записанных в программе: чем больше инструкций, тем больше времени требуется ЦП на их выполнение. Это также зависит от количества тактов, в которых выполняется каждая инструкция: некоторым инструкциям требуется больше тактов для выполнения, чем другим, поэтому они отстают от производительности ЦП. Инструкции в программе и циклы, необходимые для выполнения каждой инструкции, обратно пропорциональны друг другу. Изменение одного влияет на другое. Это точка разделения индустрии процессоров.
Архитектура набора команд RISC и CISC
Как было сказано выше, выполнение программы и производительность ЦП зависят от количества инструкций в программе, в которой инструкции предлагаются этому конкретному ЦП как часть набора команд, а вторым фактором является количество тактовых циклов в котором выполняется каждая инструкция. На основе этих двух факторов в настоящее время доступно два набора команд. Самый ранний из них — это вычисления со сложным набором команд (CISC), а другой — вычисления с сокращенным набором команд (RISC). Давайте подробно обсудим каждую из этих архитектур чтобы понять разницу между ними.
Вычисления со сложным набором команд (CISC)
CISC (Complex Instruction Set Computing) означает «Вычисления со сложным набором команд». Основной целью CISC является сокращение количества инструкций, выполняемых программой. Это достигается путем объединения множества простых инструкций, таких как режим адреса, загрузка и т. д., и формирования одной сложной инструкции. Инструкция CISC включает в себя серию простых инструкций, а также некоторые специальные инструкции, выполнение которых занимает более одного такта. Инструкции CISC могут напрямую работать с памятью без вмешательства регистров, что означает, что они устраняют необходимость в некоторых базовых инструкциях, таких как загрузка значений и требования к памяти (ОЗУ). В инструкциях CISC больше внимания уделяется аппаратному обеспечению, чем программному обеспечению, а это означает, что вместо нагрузки на компиляторы CISC использует транзисторы в качестве аппаратного обеспечения для декодирования и реализации инструкций. Однако, поскольку инструкция сложна и состоит из нескольких шагов, они выполняются за большее количество тактов.
Простая аналогия: вам говорят открыть книгу и прочитать вторую страницу третьей главы. В этой серии упражнений вы выполняете несколько шагов, например, находите книгу в сумке, затем перетасовываете страницу до главы 3, затем переходите ко второй странице главы и затем начинаете читать. Последовательность шагов, если объединить ее в одну инструкцию чтения страницы 44 (это номер 2-й страницы 3-й главы), мы получим инструкцию CISC.
Вычисления с сокращенным набором команд (RISC)
Первый интегрированный чип был разработан Джеком Килби в 1958 году и представлял собой генератор, а в 1970-х годах от Intel вышел первый коммерческий микропроцессор. Хотя на старте процессоров CISC не было. Но из-за высоких требований к вычислительным ресурсам архитектура CISC становилась все более сложной и трудной в использовании. Полная переработка архитектуры CISC, известная как RISC, была предложена в IBM Джоном Коуком. Таким образом, чтобы различать две архитектуры, были введены термины RISC и CISC.
RISC означает вычисление с сокращенным набором команд. Основным мотивом RISC было обеспечение единообразия в размере и выполнении инструкций. Это было сделано за счет введения простого набора команд, который мог выполняться как одна инструкция за такт. Это достигается путем разделения сложных инструкций, таких как загрузка и сохранение, на разные инструкции, где выполнение каждой инструкции занимает примерно один такт. Архитектура RISC включает простые инструкции одинакового размера, которые могут выполняться за один такт. Машинам на базе RISC требуется больше оперативной памяти, чем CISC, для хранения значений при загрузке каждой инструкции в регистры. Выполнение одной инструкции за цикл дает машинам на базе RISC преимущество конвейерной обработки (конвейерная обработка — это процесс, в котором следующая инструкция загружается до выполнения первой инструкции, это повышает эффективность выполнения). Архитектура RISC больше внимания уделяет программному обеспечению, чем аппаратному обеспечению, и требует написания более эффективного программного обеспечения (компиляторов, кодов) с меньшим количеством инструкций. Реализация RISC может показаться сложной из-за множества инструкций, но это оправдано размером инструкции и тем фактом, что каждая инструкция выполняется за один такт.
Простая аналогия, чтобы понять, когда нужно выполнить каждый шаг для чтения книги: найти книгу, затем найти страницу, затем главу и, наконец, начать читать.
Сравнение архитектур RISC и CISC
Когда мы сравниваем архитектуры RISC и CISC, между ними нет победителя, все зависит от приложения и сценария использования. RISC подчеркивает эффективность, принимая во внимание количество циклов на инструкцию, тогда как CISC подчеркивает эффективность количеством инструкций в программе. Для большей эффективности CISC зависит от нескольких строк кода, в то время как RISC сокращает время выполнения каждой инструкции. Честно говоря, сравнивать микроконтроллеры и микропроцессоры на основе этих двух архитектур на общих основаниях невозможно.
Если взять пример инструкции умножения двух 8-битных чисел, то процессор на базе CISC займет примерно 70-80 тактов, тогда как процессор на базе RISC примерно 30-40 тактов, что делает его в 2 раза быстрее, чем CISC. Кроме того, поскольку ЦП на базе CISC требуется больше тактовых циклов для выполнения, конвейерная обработка инструкций является гораздо более сложной задачей по сравнению с обработкой за один цикл в ЦП на базе RISC.
Где используются архитектуры CISC и RISC?
На заре процессоров и контроллеров присутствовала только архитектура CISC, хотя официального названия этой архитектуры еще не было.Но с появлением такого программного обеспечения, как компиляторы, архитектура на основе RISC начала стремительно развиваться. Intel с самого начала зависела от архитектуры CISC.
Несколькими компаниями, которые были готовы пойти на риск в отношении архитектуры RISC, были Apple, Atmel и т. д. Через несколько лет CISC стал немного устаревшим и непопулярным из-за трудностей с усовершенствованием. Однако Intel так и не покинула CISC и продолжила улучшения этой архитектуры.
В настоящее время разница между архитектурой RISC и CISC очень мала. Устройства ARM, устройства на базе AVR компании Atmel, такие как Arduino, PIC и почти все производители смартфонов используют архитектуру RISC, поскольку они намного быстрее, потребляют меньше ресурсов и более энергоэффективны. Устройства, основанные исключительно на CISC, все еще существуют в серии Intel x86 и микроконтроллерах 8051. Такой производитель, как AMD, использует гибрид RISC и CISC из серии K5 5-го поколения. В зависимости от приложения CISC предпочтителен для устройств автоматизации, а RISC — для устройств обработки видео и изображений.