Аппаратные аспекты
Основное добавление к архитектуре ARM, обеспечивающее поддержку системы команд Thumb - декомпрессор Thumb. Первым ядром ARM, оснащенным декомпрессором, стало ядро ARM7TDMI.
Рисунок 10: Конвейерная выборка, декодирование и выполнение
Декодирование и выполнение в едином цикле
И ARM7 и ARM7T ядра в одном тактовом цикле, используют 3-уровневый конвейер с фазами выборки, декодирования и выполнения. Поток команд через каждый уровень конвейера управляется высокими и низкими фазами тактового сигнала. В ядре ARM7TDMI неиспользуемая фаза тактового сигнала используется для декомпрессирования команд Thumb в каскаде декодирования. Следовательно, в одном тактовом цикле производится и декодирование и выполнение команды, не требуется никаких дополнительных непроизводительных затрат синхронизации.
Рисунок 11: Thumb декодирование и декомпрессия
Команды ARM, поступающие из каскада выборки конвейера, проходят через декодер ARM и активируют сигналы управления старшими и младшими битами операционного кода. Старшие биты опкода описывают тип выполняемой команды, тогда как младшие биты определяют детали команды типа определения регистров или операнда.
В Thumb состоянии мультиплексоры направляют Thumb команды через логику декомпрессии Thumb, разворачивающую команду Thumb в ее эквивалент ARM команды . Затем команда ARM выполняется в нормальном режиме. Это легко понять на примере:
Рисунок 12: Трансляция команды ADD Thumb в команду ADD ARM
Изящное решение
Как видно из рисунка, старший опкод команды Thumb помещается в команду ARM, а младший транслируется через справочную таблицу.
В команде ARM всегда присутствует код условия, определяемый из старшим операционным кодом.
Старший опкод определяет маршрут операнда от операционного кода Thumb до операционного кода ARM. Определители регистров расширяются дополнительным нулем от опкода Thumb (3 бита) до 4 битов, поскольку эта команда Thumb обращается только к регистрам ARM R0-R7. Значение константы также расширяется нулями, определяя 8-разрядную константу в опкоде ARM.
Это изящное решение применимо на любом ядре ARM и будет использоваться в перспективных ARM архитектурах.
|