Почему инструкции должны обрабатываться через заданные промежутки времени (т. е. с использованием часов)? Разве они не могут выполняться последовательно - сразу после завершения предыдущей инструкции?
Аналогия с необходимостью часов в микроконтроллерах оказалась бы особенно полезной.
Наглядный пример или два могут помочь здесь. Взгляните на следующую гипотетическую схему:
смоделируйте эту схему - схема, созданная с помощью CircuitLab
Предположим, что для начала и A, и B высокие (1). Таким образом, на выходе операции И 1, а поскольку оба входа XOR равны 1, на выходе 0.
Логические элементы не меняют свое состояние мгновенно — существует небольшая, но значительная задержка распространения, когда обрабатывается изменение входных данных. Предположим, что B становится низким (0). XOR мгновенно видит новое состояние на своем втором входе, но первый вход все еще видит «устаревшую» 1 из логического элемента AND. В результате выход ненадолго становится высоким, но только до тех пор, пока сигнал не пройдет через логический элемент И, установив низкий уровень на обоих входах XOR и заставив выход снова стать низким.
Сбой не является желательной частью работы схемы, но подобные сбои будут происходить каждый раз, когда есть разница в скорости распространения через разные части схемы из-за количества логики или даже просто из-за длины проводов. .
Один действительно простой способ справиться с этим — поместить триггер, запускаемый фронтом, на выходе вашей комбинаторной логики, например:
Теперь любые происходящие сбои скрыты от остальной части схемы триггером, который обновляет свое состояние только тогда, когда тактовый сигнал переходит от 0 к 1. Пока интервал между передними фронтами тактового сигнала достаточно велик для распространения сигналов по всем при прохождении комбинаторных логических цепочек результаты будут надежно детерминированными и безошибочными.
Я чувствую, что многие из этих ответов не совсем соответствуют основному вопросу. Микроконтроллер имеет часы просто потому, что он выполняет (и управляется) последовательной логикой .
В теории цифровых схем последовательная логика — это тип логической схемы, выходной сигнал которой зависит не только от текущего значения его входных сигналов, но и от последовательности прошлых входов, истории ввода. Это отличается от комбинационной логики, выход которой является функцией только текущего входа. То есть последовательная логика имеет состояние (память), а комбинационная логика — нет. Или, другими словами, последовательная логика — это комбинационная логика с памятью.
Также:
Основным преимуществом синхронной логики является ее простота. Логическим элементам, которые выполняют операции с данными, требуется конечное количество времени, чтобы отреагировать на изменения на их входах. Это называется задержкой распространения. Интервал между тактовыми импульсами должен быть достаточно длинным, чтобы все логические элементы успели отреагировать на изменения и их выходы «установились» на стабильные логические значения до того, как произойдет следующий тактовый импульс. Пока это условие соблюдается (без учета некоторых других деталей), схема гарантированно будет стабильной и надежной. Это определяет максимальную рабочую скорость синхронной цепи.
Краткий ответ: менеджеры хотят получить простое, проверяемое, ДОКАЗАТЕЛЬСТВО функционирования, прежде чем тратить миллионы (или более) долларов на разработку. Текущие инструменты просто не дают асинхронным проектам таких ответов.
Микрокомпьютеры и микроконтроллеры обычно используют схему синхронизации для обеспечения управления синхронизацией. Все углы процесса должны поддерживать синхронизацию при всех воздействиях напряжения, температуры, процесса и т. д. на скорость распространения сигнала. Текущие логические вентили не меняются мгновенно: каждый вентиль переключается в зависимости от подаваемого на него напряжения, привода, который он получает, нагрузки, которую он управляет, и размера устройств, которые используются для его создания (и, конечно, узла процесса). (размер устройства), в котором он сделан, и насколько быстро ЭТОТ процесс на самом деле выполняется --- ЭТО проходит через производство). Чтобы перейти к «мгновенному» переключению, вам придется использовать квантовую логику, а это предполагает, что квантовые устройства могут переключаться мгновенно; (Я не уверена).
Тактовая логика ДОКАЗЫВАЕТ, что синхронизация всего процессора работает с ожидаемым напряжением, температурой и переменными обработки. Существует множество доступных программных инструментов, которые помогают измерить это время, и сетевой процесс называется «закрытием времени». Тактирование может (и, по моему опыту, потребляет ) от 1/3 до 1/2 мощности, используемой микропроцессором.
Итак, почему бы не асинхронный дизайн? Существует несколько инструментов закрытия времени, поддерживающих этот стиль дизайна, если они вообще есть. Есть несколько автоматизированных инструментов размещения и маршрутизации, которые могут работать с большими асинхронными проектами и управлять ими. Во всяком случае, менеджеры НЕ одобряют ничего, что не имеет прямого, сгенерированного компьютером, ДОКАЗАТЕЛЬСТВА функциональности.
Комментарий о том, что асинхронный дизайн требует «тонны» синхронизирующих сигналов, что требует «гораздо большего количества транзисторов», игнорирует затраты на маршрутизацию и синхронизацию глобальных часов, а также стоимость всех триггеров, которые требуются системе синхронизации. Асинхронные конструкции меньше и быстрее своих аналогов с тактовой частотой (или должны быть такими). (Один просто выбирает ОДИН самый медленный путь сигнала и использует его для возврата «готового» сигнала к предыдущей логике).
Асинхронная логика работает быстрее, потому что ей никогда не приходится ждать тактового генератора, который должен быть расширен для другого блока где-то еще. Это особенно верно в функциях «регистр-в-логику-в-регистр». Асинхронная логика не имеет множественных проблем «настройки» и «удержания», поскольку эти проблемы возникают только у конечных структур приемника (регистров), в отличие от конвейерного набора логики с триггерами, перемежающимися для распределения задержек распространения логики до тактирования. границы.
Можно ли это сделать? Конечно, даже на миллиардной конструкции транзистора. Это сложнее? Да, но только потому, что ДОКАЗАТЕЛЬСТВО того, что это работает на всем чипе (или даже в системе), гораздо сложнее. Получить время на бумаге достаточно просто для любого блока или подсистемы. Контролировать это время в автоматизированной системе мест и маршрутов намного сложнее, потому что инструментарий НЕ настроен для обработки гораздо большего потенциального набора временных ограничений.
Микроконтроллеры также имеют потенциально большой набор других блоков, которые взаимодействуют с (относительно) медленными внешними сигналами, что добавляет ко всей сложности микропроцессора. Это делает время немного более сложным, но не намного.
Достижение механизма сигнала «блокировки» «первого прибытия» - это проблема проектирования схемы, и существуют известные способы решения этой проблемы. Условия гонки являются признаком 1). плохая практика проектирования; или 2). внешние сигналы, поступающие в процессор. Синхронизация фактически вводит состояние гонки сигнала и тактовой частоты, которое связано с нарушениями «настройки» и «удержания».
Я лично не понимаю, как асинхронный дизайн мог зайти в тупик или в любое другое состояние гонки. Это вполне может быть моим ограничением, но если это не происходит при вводе данных в процессор, это НИКОГДА не должно быть возможным в хорошо спроектированной логической системе, и даже тогда, поскольку это может произойти при поступлении сигналов, вы проектируете, чтобы справиться с этим.
(Надеюсь, это поможет).
Все это говорит о том, что если у вас есть деньги...
Микроконтроллеры должны использовать часы, потому что они должны иметь возможность реагировать на события, которые могут произойти в любое время, в том числе почти одновременно с другими внешними событиями или событиями, генерируемыми самими контроллерами, и часто будут иметь несколько схем, которым необходимо знать, одно событие X предшествует другому событию Y. Может быть неважно, решат ли все такие схемы, что X предшествует Y, или все такие схемы решат, что X не предшествовало Y, но часто будет критически важно, чтобы, если какая-либо из схем решит, что X предшествовало Y, Y, то все должны сделать так. К сожалению, трудно гарантировать, что схемы в течение ограниченного времени достигнут гарантированного консенсуса относительно того, предшествует ли X Y, или даже достигнуть консенсуса относительно того, достигли они консенсуса или нет. Синхронная логика может очень помочь в этом.
Добавление часов в схему позволяет гарантировать, что подсистема не будет испытывать каких-либо условий гонки, если только входные данные системы не изменятся в очень маленьком окне относительно часов, а также гарантировать, что выход одного устройства подается в другое. , выход первого устройства не изменится в критическом окне второго устройства, если только вход первого устройства не изменится в пределах еще меньшего критического окна. Добавление другого устройства перед этим первым устройством гарантирует, что входные данные для первого устройства не изменятся в этом маленьком окне, если только входные данные для нового устройства не изменятся в очень маленьком окне. С практической точки зрения, если кто-то намеренно не пытается вызвать отказ от консенсуса,
Конечно, можно спроектировать полностью асинхронные системы, которые работают «как можно быстрее», но если система не является чрезвычайно простой, будет трудно избежать того, что проект споткнется из-за состояния гонки. Хотя существуют способы разрешения условий гонки без использования часов, условия гонки часто могут быть решены намного быстрее и проще с использованием часов, чем без них. Хотя асинхронная логика часто может разрешать условия гонки быстрее, чем тактовая логика, случаи, когда она не может этого сделать, представляют собой серьезную проблему, особенно с учетом сложности достижения консенсуса частей системы относительно того, достигли они консенсуса или нет .. Система, которая может последовательно выполнять один миллион инструкций на секцию, как правило, будет более полезной, чем система, которая иногда может выполнять четыре миллиона инструкций в секунду, но потенциально может останавливаться на миллисекунды (или дольше) за раз из-за условий гонки.
Микроконтроллеры — это только один очень сложный пример синхронной последовательной логической схемы. Простейшей формой, вероятно, является синхронизируемый D-триггер (D-FF), то есть синхронный 1-битный элемент памяти.
Есть элементы памяти, которые являются асинхронными, например D-защелка, которая является (в некотором смысле) асинхронным эквивалентом D-FF. MCU — это не что иное, как куча миллионов таких базовых элементов памяти (D-FF), склеенных вместе с кучей логических элементов (я упрощаю).
Теперь давайте перейдем к сути: почему микроконтроллеры используют D-FF вместо D-защелки в качестве элементов памяти внутри? В основном это сделано для надежности и простоты конструкции: D-защелки реагируют, как только их входы изменяются, а их выходы обновляются как можно быстрее. Это допускает неприятные нежелательные взаимодействия между различными частями логической схемы (непреднамеренные петли обратной связи и гонки). Разработка сложной последовательной схемы с использованием асинхронных строительных блоков по своей природе более сложна и подвержена ошибкам. Синхронные схемы избегают таких ловушек, ограничивая работу строительных блоков моментами времени, когда обнаруживаются фронты тактовых импульсов. Когда приходит фронт, синхронная логическая схема получает данные на своих входах, но еще не обновляет свои выходы.. Как только входы получены, выходы обновляются. Это позволяет избежать риска того, что выходной сигнал будет возвращен на вход, который не был полностью получен, и все испортится (просто говоря).
Эта стратегия «отделения» сбора входных данных от обновления выходных данных позволяет использовать более простые методы проектирования, что приводит к созданию более сложных систем для заданных усилий по проектированию.
То, что вы описываете, называется асинхронной логикой . Он может работать, и когда он работает, он часто быстрее и потребляет меньше энергии, чем синхронная (тактовая) логика. К сожалению, у асинхронной логики есть некоторые проблемы, препятствующие ее широкому использованию. Главное, что я вижу, это то, что для реализации требуется гораздо больше транзисторов, так как вам нужна масса независимых сигналов синхронизации. (Микроконтроллеры выполняют большую часть работы параллельно, как и центральные процессоры.) Это приведет к увеличению стоимости. Отсутствие хороших инструментов для проектирования — большое препятствие.
Микроконтроллерам, вероятно, всегда будут нужны часы, поскольку их периферийные устройства обычно должны измерять время. Таймеры и ШИМ работают с фиксированными интервалами времени, частота дискретизации АЦП влияет на их полосу пропускания, а асинхронные протоколы связи, такие как CAN и USB, нуждаются в эталонных тактовых частотах для восстановления тактовой частоты. Обычно мы хотим, чтобы процессоры работали как можно быстрее, но это не всегда так для других цифровых систем.
На самом деле вы видите MCU как законченный блок, но правда в том, что он сам состоит из разных вентилей и логики TTL и RTL, часто массива FF, всем нужен тактовый сигнал по отдельности.
Чтобы быть более конкретным, подумайте о простом доступе к адресу. из памяти, эта простая задача сама по себе может включать в себя несколько операций, таких как обеспечение доступности BUS для линий данных и адресных линий.
Лучший способ сказать, что сами инструкции выполняются в небольших единицах работы, которые требуют тактов, которые объединены для машинных циклов , которые учитывают различные свойства MCU, такие как скорость (FLOPS ** в сложных MCU), футеровка трубы и т. д.
Ответ на Комментарий ОП.
Чтобы быть точным, я привожу вам пример, есть чип под названием ALE .(включение защелки адреса) обычно с целью мультиплексирования нижней адресной шины для передачи адреса и данных на одних и тех же контактах мы используем генераторы (intel 8051 использует локальный генератор 11,059 МГц в качестве часов) для получения адреса, а затем данных.
Как вы, возможно, знаете, основными частями MCU являются CPU, ALU, внутренний регистр и т. д. CPU (управляющий s/g) отправляет адрес на все адресные контакты 16 в случае 8051, это происходит в момент времени T1 и после него. адрес соответствует соответствующей матрице хранения конденсатора (заряд как сигнал) ( *отображение памяти * ) активируется и выбирается.
После выбора активируется сигнал ALE, т. е. вывод ALE становится высоким на следующем такте, скажем, T2 ( обычно высокий сигнал, но изменяется в соответствии с конструкцией процессорного блока ), после этого шины нижнего адреса действуют как линии данных, и данные записываются или считываются. (в зависимости от выхода на выводе RD/WR микроконтроллера).
Вы можете четко видеть, что все события своевременной последовательности
Что произойдет, если мы не будем использовать часы . Тогда нам придется использовать асинхронный метод синхронизации ASQC , это сделает каждый вентиль зависимым от другого и может привести к аппаратным сбоям. время выполнить задание.
Так что это что-то нежелательное
Фундаментальная проблема, которую решают часы, заключается в том, что транзисторы в действительности не являются цифровыми устройствами: они используют аналоговые уровни напряжения на входах для определения выходного сигнала, и для изменения состояния требуется конечное время. Если, как уже упоминалось в другом ответе, вы не попадете в квантовые устройства, будет период времени, в течение которого вход переходит из одного состояния в другое. На время, необходимое для этого, влияет емкостная нагрузка, которая будет отличаться от одного устройства к другому. Это означает, что разные транзисторы, составляющие каждый логический вентиль, будут реагировать в несколько разное время. Часы используются для «фиксации» выходов компонентных устройств после того, как они все стабилизируются.
В качестве аналогии рассмотрим транспортный уровень связи SPI (Serial Peripheral Interface). Типичная реализация этого будет использовать три линии: Data In, Data Out и Clock. Чтобы отправить байт через этот транспортный уровень, мастер установит свою линию вывода данных и установит линию синхронизации, чтобы указать, что линия вывода данных имеет допустимое значение. Ведомое устройство будет производить выборку своей линии Data In только в том случае, если это будет проинструктировано тактовым сигналом. Если бы не было тактового сигнала, как ведомое устройство узнало бы, когда производить выборку данных в строке? Он мог сэмплировать его до того, как линия была установлена мастером или во время перехода между состояниями. Асинхронные протоколы, такие как CAN, RS485, RS422, RS232 и т. д., решают эту проблему, используя предопределенное время выборки, фиксированную скорость передачи данных и (служебные) биты кадрирования.
Другими словами, требуется какое-то общее знание , чтобы определить, когда все транзисторы в наборе вентилей достигли своего конечного состояния и инструкция завершена. В головоломке (100 голубых глаз), указанной в ссылке выше и подробно объясненной в этом вопросе на Maths Stack Exchange, «оракул» действует как часы для людей на острове.
Леон Хеллер
пользователь 253751
пользователь52386