Почему инструкции должны обрабатываться через определенные промежутки времени (например, с использованием часов)? Разве они не могут быть выполнены последовательно - сразу после завершения предыдущей инструкции?
Аналогия с необходимостью часов в микроконтроллерах оказалась бы особенно полезной.
Ответы:
Наглядный пример или два могут помочь здесь. Взгляните на следующую гипотетическую схему:
смоделировать эту схему - схема, созданная с использованием CircuitLab
Предположим, что для начала A и B высокие (1). Следовательно, выход AND равен 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 предшествовал У, тогда все должны это сделать. К сожалению, трудно гарантировать, что схемы в течение ограниченного времени достигнут гарантированного консенсуса относительно того, предшествует ли X букве Y, или даже достигнут консенсуса относительно того, достигли ли они консенсуса или нет. Синхронная логика может очень помочь с этим.
Добавление часов в схему позволяет гарантировать, что подсистема не будет испытывать никаких состояний гонки, если вход в систему не изменяется в очень маленьком окне относительно часов, а также гарантирует, что выход одного устройства подается в другое выход первого устройства не изменится в критическом окне второго устройства, если вход в первое устройство не изменится в еще меньшем критическом окне. Добавление другого устройства до этого первого устройства гарантирует, что вход в первое устройство не изменится в этом маленьком окне, если вход в новое устройство не изменится в действительно очень маленьком окне. С практической точки зрения, если кто-то намеренно не пытается вызвать сбой консенсуса,
Конечно, можно спроектировать полностью асинхронные системы, которые будут работать «настолько быстро, насколько это возможно», но если система не предельно проста, будет трудно не допустить, чтобы проект был сорван из-за состояния гонки. Хотя существуют способы разрешения условий гонки без использования часов, условия гонки часто могут быть решены намного быстрее и проще с использованием часов, чем было бы без них. Хотя асинхронная логика часто способна разрешать состояния гонки быстрее, чем тактовая логика, случаи, когда она не может этого сделать, представляют серьезную проблему, особенно учитывая трудность достижения частями системы консенсуса относительно того, достигли ли они консенсуса или нет., Система, которая может последовательно выполнять миллион команд в каждом разделе, как правило, будет более полезной, чем система, которая иногда может выполнять четыре миллиона команд в секунду, но потенциально может зависать на миллионы секунд (или дольше) за раз из-за условий гонки.
источник
Микроконтроллеры являются лишь одним очень сложным примером синхронной последовательной логической схемы. Простейшей формой, вероятно, является синхронизированный D-триггер (D-FF), то есть синхронный 1-битный элемент памяти.
Существуют асинхронные элементы памяти, например D-защелка, которая (в некотором смысле) является асинхронным эквивалентом D-FF. MCU - это не что иное, как группа миллионов таких базовых элементов памяти (D-FF), склеенных вместе с тоннами логических элементов (я упрощаю).
Теперь давайте перейдем к вопросу: почему микроконтроллеры используют D-FF вместо D-защелок в качестве внутренних элементов памяти? Это в основном для надежности и простоты конструкции: D-защелки реагируют, как только их входы меняются, а их выходы обновляются максимально быстро. Это учитывает неприятные нежелательные взаимодействия между различными частями логической схемы (непреднамеренные петли обратной связи и расы). Проектирование сложной последовательной схемы с использованием асинхронных строительных блоков по своей природе является более сложным и подверженным ошибкам. Синхронные схемы избегают таких ловушек, ограничивая работу строительных блоков моментами времени, когда обнаруживаются границы часов. При достижении фронта синхронная логическая схема получает данные на своих входах, но еще не обновляет свои выходы, Как только входы получены, выходы обновляются. Это позволяет избежать риска того, что выходной сигнал подается обратно на вход, который не был полностью получен, и портит ситуацию (проще говоря).
Эта стратегия «разделения» сбора входных данных от обновления выходов позволяет упростить методы проектирования, что приводит к более сложным системам для данного проекта.
источник
То, что вы описываете, называется асинхронной логикой . Это может работать, и когда это происходит, это часто быстрее и использует меньше энергии, чем синхронная (тактовая) логика. К сожалению, асинхронная логика имеет некоторые проблемы, которые мешают ее широкому использованию. Основное, что я вижу, состоит в том, что для реализации требуется гораздо больше транзисторов, поскольку вам нужно тонна независимых сигналов синхронизации. (Микроконтроллеры выполняют большую часть работы параллельно, как и процессоры.) Это приведет к увеличению затрат. Отсутствие хороших дизайнерских инструментов является серьезным препятствием.
Микроконтроллерам, вероятно, всегда будут нужны часы, поскольку их периферийные устройства обычно должны измерять время. Таймеры и ШИМ работают с фиксированными временными интервалами, частоты дискретизации АЦП влияют на их полосу пропускания, а асинхронным протоколам связи, таким как CAN и USB, требуются эталонные часы для восстановления тактовой частоты. Обычно мы хотим, чтобы процессоры работали как можно быстрее, но это не всегда так для других цифровых систем.
источник
На самом деле вы видите 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, который затем сделает каждый шлюз зависимым от другого и может привести к аппаратным сбоям. Также это убивает конвейерную обработку команд, долгую и нерегулярную. время, чтобы завершить задачу.
Так что это что-то нежелательное
источник
Основная проблема, которую решают часы, заключается в том, что транзисторы на самом деле не являются цифровыми устройствами: они используют аналоговые уровни напряжения на входах для определения выхода и занимают ограниченное время для изменения состояния. Если, как было упомянуто в другом ответе, вы попадете в квантовые устройства, будет период времени, в течение которого входной сигнал переходит из одного состояния в другое. На это время влияет емкостная нагрузка, которая будет отличаться от одного устройства к другому. Это означает, что разные транзисторы, составляющие каждый логический элемент, будут реагировать в несколько разное время. Часы используются для «фиксации» выходов компонентных устройств, как только они стабилизируются.
В качестве аналогии рассмотрим транспортный уровень связи SPI (последовательный периферийный интерфейс). Типичная реализация этого будет использовать три строки: Data In, Data Out и Clock. Чтобы отправить байт через этот транспортный уровень, мастер установит свою линию Data Out и установит линию Clock, чтобы указать, что строка Data Out имеет допустимое значение. Подчиненное устройство будет сэмплировать свою линию Data In только тогда, когда будет дано указание сделать это с помощью тактового сигнала. Если бы не было тактового сигнала, как бы ведомое устройство узнало, когда производить выборку в строке данных? Он может сэмплировать его до того, как линия будет установлена мастером, или во время перехода между состояниями. Асинхронные протоколы, такие как CAN, RS485, RS422, RS232 и т. Д., Решают эту проблему с помощью предварительно определенного времени выборки, фиксированной скорости передачи битов и (служебных) битов кадрирования.
Другими словами, существует какое-то общее знание, необходимое для определения того, когда все транзисторы в наборе вентилей достигли своего конечного состояния и инструкция завершена. В загадке (100 голубых глаз), изложенной в ссылке выше и объясненной в некоторых деталях в этом вопросе об обмене стека математики, «оракул» действует как часы для людей на острове.
источник