Зачем микроконтроллерам нужны часы

31

Почему инструкции должны обрабатываться через определенные промежутки времени (например, с использованием часов)? Разве они не могут быть выполнены последовательно - сразу после завершения предыдущей инструкции?

Аналогия с необходимостью часов в микроконтроллерах оказалась бы особенно полезной.

МИСТЕР
источник
6
Есть асинхронные процессоры.
Леон Хеллер
6
Как бы вы определили «когда предыдущая инструкция завершена»? Если вы думаете об этом, вам нужно знать, когда «Закончилась ли предыдущая инструкция?» вычисление завершилось, и когда вычисление «завершило ли« предыдущая инструкция? »вычисление» завершилось, и ........ Гораздо проще просто сказать: «Для выполнения инструкции требуется 0,4 наносекунды».
user253751
4
Логические ворота не говорят, когда они сделаны. Сигнал просто неопределенный в течение некоторого периода времени, прежде чем установить устойчивое значение. По сути, часы позволяют дизайну знать, когда логика установила правильное значение. Расширенные стратегии, такие как микроинструкции, помогают разбивать машинные инструкции на более мелкие части, поэтому ADD может занимать 4 такта, а доступ к памяти может занимать сотни тактов.

Ответы:

31

Наглядный пример или два могут помочь здесь. Взгляните на следующую гипотетическую схему:

схематический

смоделировать эту схему - схема, созданная с использованием CircuitLab

Предположим, что для начала A и B высокие (1). Следовательно, выход AND равен 1, и, поскольку оба входа в XOR равны 1, выход равен 0.

Логические элементы не изменяют свое состояние мгновенно - существует небольшая, но значительная задержка распространения, поскольку обрабатывается изменение на входе. Предположим, что B понижается (0). XOR мгновенно видит новое состояние на своем втором входе, но первый вход все еще видит «устаревший» 1 из логического элемента AND. В результате выходной сигнал кратковременно повышается - но только до тех пор, пока сигнал не пройдет через логический элемент И, в результате чего оба входа снизятся до XOR, и выход снова станет низким.

Сбой не является желательной частью работы схемы, но такие сбои будут происходить каждый раз, когда есть разница в скорости распространения в разных частях схемы, из-за количества логики или даже просто длины проводов. ,

Один из действительно простых способов справиться с этим - поставить триггер с триггером на выходе вашей комбинаторной логики, например так:

схематический

смоделировать эту схему

Теперь любые возникающие глюки скрыты от остальной части схемы триггером, который обновляет свое состояние только тогда, когда часы переходят с 0 на 1. Пока интервал между нарастающими фронтами тактового генератора достаточно велик для распространения сигналов всеми через комбинаторные логические цепочки, результаты будут надежно детерминированными и без сбоев.

Ник Джонсон
источник
6
Спасибо за фактическое упоминание о задержке распространения почти сразу, это, вероятно, 99% ответа.
1
Рабочий пример этого в действии можно наблюдать на периферийных цифровых микроконтроллерах микрочипа (и других). Если вы используете регистры PORT для обновления выходов (а не LATCH) с использованием последовательных инструкций Read-Modify-Write, можно прочитать состояние вывода, пока оно меняет состояние. См. Раздел 10.2.2 документации dsPIC33E / 24E для более подробной информации.
Пирог злой собаки
Правильно ли я понимаю, что последовательные схемы критически нуждаются в тактировании не только потому, что они получат сбои, но также и потому, что из-за этого сбоя некоторый триггер может в итоге сохранить неправильное значение?
Озеро
20

Я чувствую, что многие из этих ответов не совсем совпадают с основным вопросом. Микроконтроллер имеет часы просто потому, что он выполняет (и управляется) последовательную логику .

В теории цифровых схем последовательная логика представляет собой тип логической схемы, выход которой зависит не только от текущего значения ее входных сигналов, но и от последовательности прошлых входов, истории входов. Это в отличие от комбинационной логики, выход которой является функцией только текущего ввода. То есть последовательная логика имеет состояние (память), а комбинационная логика - нет. Или, другими словами, последовательная логика - это комбинационная логика с памятью.

Также:

Основным преимуществом синхронной логики является ее простота. Логические элементы, которые выполняют операции с данными, требуют ограниченного времени для реагирования на изменения их входных данных. Это называется задержкой распространения. Интервал между тактовыми импульсами должен быть достаточно большим, чтобы все логические элементы имели время, чтобы отреагировать на изменения, и их выходы «установились» на стабильные логические значения, прежде чем произойдет следующий тактовый импульс. Пока это условие выполняется (без учета некоторых других деталей), цепь гарантированно будет стабильной и надежной. Это определяет максимальную рабочую скорость синхронного контура.

Питер
источник
15

Короткий ответ: менеджеры хотят простой, проверяемой, ДОКАЗАТЕЛЬНОЙ функции, прежде чем тратить миллионы (или более) долларов на дизайн. Текущие инструменты, просто не дают асинхронным проектам такие ответы.

Микрокомпьютеры и микроконтроллеры обычно используют схему синхронизации для обеспечения контроля времени. Все технологические углы должны поддерживать синхронизацию всех влияний напряжения, температуры, процесса и т. Д. На скорость распространения сигнала. Там нет ни одного тока логических вентилей изменяются мгновенно: каждые ворота переключаются в зависимости от напряжения она поставляется, привод он получает, нагрузку он управляет, и размер устройств, которые используются , чтобы сделать это, (и, конечно , узел процесса (размер устройства), в котором он сделан, и насколько быстро этот процесс выполняется на самом деле - ЭТО ПРОХОД через ФАБ). Чтобы перейти к «мгновенному» переключению, вы должны использовать квантовую логику, и это предполагает, что квантовые устройства могут переключаться мгновенно; (Я не уверен).

Тактовая логика подтверждает, что синхронизация по всему процессору работает в зависимости от ожидаемого напряжения, температуры и переменных обработки. Есть много доступных программных инструментов, которые помогают измерить это время, и сетевой процесс называется «закрытием времени». Синхронизация может (и, по моему опыту, делает ) потреблять от 1/3 до 1/2 мощности, используемой в микропроцессоре.

Итак, почему не асинхронный дизайн? Есть немного, если таковые имеются, инструменты закрытия времени для поддержки этого стиля дизайна. Существует немного, если таковые имеются, автоматических средств определения местоположения и маршрутов, которые могут работать с большой асинхронной конструкцией и управлять ею. Если ничего другого, менеджеры НЕ одобряют ничего, что не имеет прямой, сгенерированной компьютером, ДОКАЗАТЕЛЬСТВА функциональности.

Комментарий о том, что асинхронный дизайн требует «тонны» синхронизирующих сигналов, что требует «намного больше транзисторов», игнорирует затраты на маршрутизацию и синхронизацию глобальных тактовых импульсов и стоимость всех триггеров, которые требует система синхронизации. Асинхронные конструкции (или должны быть) меньше и быстрее, чем их синхронизированные аналоги. (Один просто берет ОДИН самый медленный путь сигнала и использует его для передачи сигнала «готовности» к предыдущей логике).

Асинхронная логика работает быстрее, потому что она никогда не должна ждать часов, которые должны были быть расширены для другого блока где-то еще. Это особенно верно в функциях «от регистра к логике к регистру». Асинхронная логика не имеет множественных проблем «установки» и «удержания», поскольку эти проблемы имеют только конечные структуры приемников (регистры), в отличие от конвейерного набора логики с триггерами, чередующимися с пространством, распространение логики задерживает тактирование границы.

Это можно сделать? Конечно, даже на миллиарде транзисторов. Это сложнее? Да, но только потому, что доказать, что он работает на всем чипе (или даже системе), гораздо сложнее. Получение сроков на бумаге достаточно прямолинейно для любого блока или подсистемы. Управлять этим временем в автоматизированном месте и системе маршрутов гораздо сложнее, потому что инструмент НЕ настроен для обработки гораздо большего потенциального набора временных ограничений.

Микроконтроллеры также имеют потенциально большой набор других блоков, которые взаимодействуют с (относительно) медленными внешними сигналами, что увеличивает сложность микропроцессора. Это делает время немного более сложным, но не намного.

Достижение механизма «блокировки» «первым прибывшим» является проблемой проектирования схемы, и существуют известные способы решения этой проблемы. Расовые условия являются признаком 1). плохая практика проектирования; или 2). внешние сигналы, поступающие в процессор. Синхронизация фактически вводит состояние гонки сигнал-тактовая частота, которое связано с нарушениями «установки» и «удержания».

Лично я не понимаю, как асинхронный проект мог зайти в тупик или в любое другое состояние гонки. Это вполне может быть моим ограничением, но если это не произойдет при вводе данных в процессор, это НИКОГДА не должно быть возможным в хорошо спроектированной логической системе, и даже тогда, так как это может произойти при поступлении сигналов, вы решаете с ними справиться.

(Надеюсь, это поможет).

Все, что сказал, если у вас есть деньги ...

Джон Бек
источник
Конечно, это зависит от чипа, который вы создаете - например, аппаратные средства нейронных сетей имеют тенденцию быть асинхронными, потому что это на самом деле самая простая вещь - то, что они эмулируют, является асинхронным . В основном мы создаем синхронное последовательное оборудование, потому что программное обеспечение / прошивка также в основном синхронные и последовательные (особенно в «последовательной» части - асинхронный код используется все чаще и чаще). На самом деле, намного проще обернуть голову вокруг последовательной, синхронной системы, особенно когда большая часть программирования выполняется на языках, которые поддерживают последовательный код.
Луаан
События в реальном мире происходят в непредсказуемые времена. Если на устройстве есть кнопка, и предполагается, что он выполняет один путь кода, если он был нажат «достаточно быстро», и выполняет другой путь кода, если его нет, то в отсутствие квантово-механических ограничений между моментом нажатия кнопки где нажатие кнопки должно произойти достаточно скоро, чтобы вызвать альтернативный путь кода, и момент, когда нажатие кнопки будет «слишком поздним», будет некоторый точный момент, когда нажатие кнопки вызовет некоторое поведение «между» этими двумя (например, вызывая изменение некоторых битов счетчика программы ...
суперкат
... но не другие). В отсутствие квантово-механических ограничений время между последним моментом, когда толчок вызовет ветвление, и первым моментом, когда толчок явно не сможет этого сделать, можно сделать сколь угодно малым, но не уменьшить до нуля. Квантово-механические ограничения могут привести к тому, что любое нажатие кнопки произойдет либо достаточно рано, чтобы зарегистрироваться, либо достаточно поздно, чтобы полностью потерпеть неудачу, но доказательство того, что никогда не будет квантового состояния, которое позволило бы нажатие кнопки в смертельно опасное промежуточное время, обычно неосуществимым.
суперкат
Использование синхронной логики значительно упрощает анализ ситуаций, когда система должна будет реагировать на действительно асинхронное событие, гарантируя, что условия гонки будут иметь очень низкую вероятность выхода из очень маленькой части всего устройства. Анализ этой небольшой части устройства на предмет вероятности того, что условия гонки вряд ли могут выйти из-под контроля, скорее всего, станет гораздо более серьезной проблемой, чем возможность возникновения условий гонки практически везде, и попытка проанализировать их влияние, чтобы доказать, что они приемлемо вряд ли вызовут проблемы.
суперкат
10

Микроконтроллеры должны использовать часы, потому что они должны быть в состоянии реагировать на события, которые могут произойти в любое время, включая почти одновременно с другими внешними событиями или событиями, генерируемыми самими контроллерами, и часто будут иметь несколько цепей, которые должны знать, одно событие X предшествует другому событию Y. Может не иметь значения, решают ли все такие схемы, что X предшествовал Y, или все такие схемы решают, что X не предшествовал Y, но часто будет критично, что, если какая-либо из цепей решит, что X предшествовал У, тогда все должны это сделать. К сожалению, трудно гарантировать, что схемы в течение ограниченного времени достигнут гарантированного консенсуса относительно того, предшествует ли X букве Y, или даже достигнут консенсуса относительно того, достигли ли они консенсуса или нет. Синхронная логика может очень помочь с этим.

Добавление часов в схему позволяет гарантировать, что подсистема не будет испытывать никаких состояний гонки, если вход в систему не изменяется в очень маленьком окне относительно часов, а также гарантирует, что выход одного устройства подается в другое выход первого устройства не изменится в критическом окне второго устройства, если вход в первое устройство не изменится в еще меньшем критическом окне. Добавление другого устройства до этого первого устройства гарантирует, что вход в первое устройство не изменится в этом маленьком окне, если вход в новое устройство не изменится в действительно очень маленьком окне. С практической точки зрения, если кто-то намеренно не пытается вызвать сбой консенсуса,

Конечно, можно спроектировать полностью асинхронные системы, которые будут работать «настолько быстро, насколько это возможно», но если система не предельно проста, будет трудно не допустить, чтобы проект был сорван из-за состояния гонки. Хотя существуют способы разрешения условий гонки без использования часов, условия гонки часто могут быть решены намного быстрее и проще с использованием часов, чем было бы без них. Хотя асинхронная логика часто способна разрешать состояния гонки быстрее, чем тактовая логика, случаи, когда она не может этого сделать, представляют серьезную проблему, особенно учитывая трудность достижения частями системы консенсуса относительно того, достигли ли они консенсуса или нет., Система, которая может последовательно выполнять миллион команд в каждом разделе, как правило, будет более полезной, чем система, которая иногда может выполнять четыре миллиона команд в секунду, но потенциально может зависать на миллионы секунд (или дольше) за раз из-за условий гонки.

Supercat
источник
Стоит отметить, что выбираемые состояния в равной степени могут быть внутренними - например, в результате арифметической операции. Задержки из-за длины линии могут привести к тому, что одна часть MCU увидит результат - и без такта, воздействующего на него - раньше других частей.
Ник Джонсон
@NickJohnson: Если последовательность, в которой выполняются операции, никогда не зависит от того, что еще не вычислено, эти проблемы могут быть легко решены, если каждый раздел, например, ALU, имеет «действительные» входы и «действительный» выход, и может быть организовано так, чтобы происходить в детерминированной последовательности. Колеса отваливаются, когда порядок выполнения операций должен зависеть от времени (например, если у вас есть несколько параллельных операций, для которых требуется использовать шину общей памяти, и две из них выдают почти одновременные запросы, арбитраж которых один должен идти первым ...
суперкат
... и то, что нужно ждать, может быть неразрешимым. Если кто-то заранее решит, какой из них пойдет первым, таких проблем можно избежать, но если окажется, что устройство, которое было назначено первым, не готово к работе в течение долгого времени после другого, производительность может серьезно пострадать. ,
суперкат
Вот почему полет в космос настолько сложен, что вероятности меняются неблагоприятно.
Волшебный дым
6

Микроконтроллеры являются лишь одним очень сложным примером синхронной последовательной логической схемы. Простейшей формой, вероятно, является синхронизированный D-триггер (D-FF), то есть синхронный 1-битный элемент памяти.

Существуют асинхронные элементы памяти, например D-защелка, которая (в некотором смысле) является асинхронным эквивалентом D-FF. MCU - это не что иное, как группа миллионов таких базовых элементов памяти (D-FF), склеенных вместе с тоннами логических элементов (я упрощаю).

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

Эта стратегия «разделения» сбора входных данных от обновления выходов позволяет упростить методы проектирования, что приводит к более сложным системам для данного проекта.

Лоренцо Донати поддерживает Монику
источник
5

То, что вы описываете, называется асинхронной логикой . Это может работать, и когда это происходит, это часто быстрее и использует меньше энергии, чем синхронная (тактовая) логика. К сожалению, асинхронная логика имеет некоторые проблемы, которые мешают ее широкому использованию. Основное, что я вижу, состоит в том, что для реализации требуется гораздо больше транзисторов, поскольку вам нужно тонна независимых сигналов синхронизации. (Микроконтроллеры выполняют большую часть работы параллельно, как и процессоры.) Это приведет к увеличению затрат. Отсутствие хороших дизайнерских инструментов является серьезным препятствием.

Микроконтроллерам, вероятно, всегда будут нужны часы, поскольку их периферийные устройства обычно должны измерять время. Таймеры и ШИМ работают с фиксированными временными интервалами, частоты дискретизации АЦП влияют на их полосу пропускания, а асинхронным протоколам связи, таким как CAN и USB, требуются эталонные часы для восстановления тактовой частоты. Обычно мы хотим, чтобы процессоры работали как можно быстрее, но это не всегда так для других цифровых систем.

Адам Хаун
источник
3

На самом деле вы видите MCU как единое целое, но правда состоит в том, что он сам состоит из разных логических элементов и логики TTL и RTL, часто массива FF, все они нуждаются в тактовом сигнале индивидуально,

чтобы быть более конкретным, подумайте о простом доступе к адресу из памяти эта простая задача сама по себе может включать в себя несколько операций, таких как предоставление шины доступной для линий данных и адресных линий.
Лучший способ сказать, что сами инструкции выполняются в небольших единицах работы, которые требуют тактовых циклов, которые объединяются для машинных циклов , которые учитывают различные свойства MCU, такие как скорость (FLOPS ** в сложных MCU), футеровка трубопровода и т. Д.

Реакция на Комментарий ОП

Чтобы быть очень точным, я приведу пример, есть чип под названием ALE(Включение фиксации адреса), обычно с целью мультиплексирования нижней адресной шины для передачи как адреса, так и данных на одни и те же контакты, мы используем осцилляторы (Intel 8051 использует локальный генератор 11.059 МГц в качестве тактового генератора) для получения адреса и затем данных.

Поскольку вы, возможно, знаете, что основными частями MCU являются CPU, ALU и внутренний регистр и т. Д., CPU (управляющий s / g) отправляет адрес на все контактные выводы 16 в случае 8051, это происходит в момент времени T1 и после адрес - соответствующая матрица хранения конденсатора (заряд в качестве сигнала) ( * отображение памяти * ) активируется и выбирается.

После выбора активируется сигнал ALE, т. Е. Вывод ALE становится высоким на следующих тактах, скажем, T2 ( обычно это высокий сигнал, но изменяется в соответствии с конструкцией блока обработки ), после этого нижние адресные шины действуют как линии данных, а данные записываются или читаются. (в зависимости от выхода на выводе RD / WR MCU).
Вы можете четко видеть, что все события являются своевременными последовательными

Что произойдет, если мы не будем использовать часы? Тогда нам нужно будет использовать метод асинхронного тактирования ASQC, который затем сделает каждый шлюз зависимым от другого и может привести к аппаратным сбоям. Также это убивает конвейерную обработку команд, долгую и нерегулярную. время, чтобы завершить задачу.
Так что это что-то нежелательное

мамба
источник
Это имеет смысл. Но зачем этим различным отсекам MCU нужен тактовый сигнал для работы? Что теоретически произошло бы, если бы они не использовали часы?
М.Р.
1
@Martin, логические вентили меняют состояние сразу же после изменения их входа. Синхронизированная, последовательная логика только оценивает свои входы во время события синхронизации. Это основной принцип, который управляет цепями цифровой памяти. Это дает нам возможность выборочно перемещать данные из одного места в другое с абсолютным контролем, позволяя создавать аппаратное обеспечение общего назначения, которое можно программировать с помощью программного обеспечения - ну что угодно.
Шон Бодди
3
@SeanBoddy: логические элементы не могут сразу определить состояние, имеется короткое запаздывание, которое можно увидеть на осциллографе. Если бы мы не использовали часы, различия в этих временах между компонентами могли привести к гонкам, приводящим к неправильным результатам.
BlueRaja - Дэнни Пфлугхофт
@BlueRaja - хорошо, хорошие леденцы, как насчет этого. Может быть, я вернусь к 4 годам заметок по силовой электронике и 8 годам обучения военно-морскому флоту, чтобы узнать, где я пропустил одну вещь.
Шон Бодди
2

Основная проблема, которую решают часы, заключается в том, что транзисторы на самом деле не являются цифровыми устройствами: они используют аналоговые уровни напряжения на входах для определения выхода и занимают ограниченное время для изменения состояния. Если, как было упомянуто в другом ответе, вы попадете в квантовые устройства, будет период времени, в течение которого входной сигнал переходит из одного состояния в другое. На это время влияет емкостная нагрузка, которая будет отличаться от одного устройства к другому. Это означает, что разные транзисторы, составляющие каждый логический элемент, будут реагировать в несколько разное время. Часы используются для «фиксации» выходов компонентных устройств, как только они стабилизируются.

В качестве аналогии рассмотрим транспортный уровень связи SPI (последовательный периферийный интерфейс). Типичная реализация этого будет использовать три строки: Data In, Data Out и Clock. Чтобы отправить байт через этот транспортный уровень, мастер установит свою линию Data Out и установит линию Clock, чтобы указать, что строка Data Out имеет допустимое значение. Подчиненное устройство будет сэмплировать свою линию Data In только тогда, когда будет дано указание сделать это с помощью тактового сигнала. Если бы не было тактового сигнала, как бы ведомое устройство узнало, когда производить выборку в строке данных? Он может сэмплировать его до того, как линия будет установлена ​​мастером, или во время перехода между состояниями. Асинхронные протоколы, такие как CAN, RS485, RS422, RS232 и т. Д., Решают эту проблему с помощью предварительно определенного времени выборки, фиксированной скорости передачи битов и (служебных) битов кадрирования.

Другими словами, существует какое-то общее знание, необходимое для определения того, когда все транзисторы в наборе вентилей достигли своего конечного состояния и инструкция завершена. В загадке (100 голубых глаз), изложенной в ссылке выше и объясненной в некоторых деталях в этом вопросе об обмене стека математики, «оракул» действует как часы для людей на острове.

Пирог злой собаки
источник