4.3 Архитектура MISC M17
==61
4.3.1 Введение
MISC M17 был создан фирмой Minimum Instruction Set Computer, Inc. в качестве дешёвого процессора для встраиваемых применений. Для снижения стоимости системы, стеки M17 располагаются в системной памяти с буферами для нескольких верхних элементов внутри кристалла. Все остальные проектные решения принимались с учётом сохранения низкой стоимости как самого процессора, так и общей стоимости системы, при сохранении достаточно высокой производительности.
MISC M17 предназначается для крупнотиражных встраиваемых приложений, где требуется недорогой процессор с достаточной ( при сравнении с другими стековыми машинами, а для обычных микроконтроллеров - очень высокой ) производительностью.
4.3.2 Блок-схема
Блок-схема M17 показана на рис. 4.4 .
Рис. 4.4 Блок-схема M17
Стек данных и стек адресов возврата расположены в системной памяти. Для увеличения быстродействия верхние элементы обоих стеков хранятся во внутренних регистрах. Для стека данных это регистры X , Y и Z , причём в X расположен верхний элемент. Регистры подключены к мультиплексору, что позволяет им обмениваться данными между собой за один цикл, и одновременно регистр Z может обмениваться данными со стеком в памяти системы. Таким образом, при удалении элемента из стека ( слово «DROP» языка FORTH ) одновременно происходит загрузка регистра Z из памяти, копирование Z в Y и копирование Y в X . Аналогично, при сохранении данных в стеке ( например, слово «DUP» в FORTH ) содержимое X копируется в Y , при сохранении значения в X , Y копируется в Z , а Z записывается в память.
При выборке очередной инструкции в регистре LASTX можно записать значение X , сохраняя тем самым значение верхушки стека, изменяющееся в процессе выполнения команды, что весьма удобно для многих последовательностей команд.
АЛУ в M17 сконструировано таким образом, чтобы выполнять все возможные операции одновременно, только в последний момент выбирая выход нужной функции для записи в регистр X и/или Y . Такая техника позволяет совместить разбор инструкции с вычислениями, и к моменту завершения декодирования остаётся только выбрать нужный результат среди посчитанных.
==62
==63
У M17 есть 8-разрядная шина ввода-вывода, позволяющая проводить вычисления в АЛУ одновременно с передачей данных. Эта опция имеется во всех описываемых здесь 16-разрядных моделях FORTH-машин и позволяет проводить высокоскоростные операции ввода-вывода, не занимая шину данных.
Так же, как и стек данных, стек адресов возврата расположен в системной памяти. Его верхний элемент буферируется в регистре INDEX , каковой регистр может работать как обратный счётчик и использоваться в программных циклах или при повторе инструкций.
Указатель инструкций ( IP ) - обычный счётчик адресов программы, который может быть загружен из регистра инструкций ( IR ) для вызова подпрограммы, с шины данных при условном переходе или из регистра INDEX для возврата из подпрограммы. При вызовах подпрограмм значение IP сохраняется в регистре INDEX .
Указатель стека возврата - реверсивный счётчик, хранящий адрес верхнего элемента стека возврата в системной памяти ( который на самом деле второй элемент сверху, как его видит программист, так как верхний элемент находится в регистре INDEX ). Аналогично, указатель стека данных смотрит на верхний элемент стека данных в системной памяти, который на самом деле четвёртый сверху, так как три верхних элемента буферируются в регистрах X , Y и Z . Стек данных растёт от старших адресов памяти к младшим, а стек возврата в обратном направлении. При такой организации свободное пространство между верхними элементами обоих стеков используется эффективнее.
M17 может прямо адресовать пять сегментов памяти объёмом до 64K 16-разрядных слов. Имеются инструкции обмена, упаковки и распаковки байтов, что позволяет работать с 8-разрядными величинами. Активный уровень на одном из пяти специальных выводов процессора указывает, какой именно адрес выставлен на шине: из стека данных, стека возврата, программной памяти, «A»-буфера или «B»-буфера. В простых системах эти выводы можно не использовать. В более сложных каждый вывод может управлять своей собственной микросхемой памяти, обеспечивая работу пяти независимых банков памяти объёмом до 64K слов. При использовании сопроцессора управления памятью можно расширить адресное пространство до 16M слов.
M17 использует два такта на каждую инструкцию: один на выборку инструкции из программной памяти и один на выполнение команды, совмещённое с операцией над одним из стеков. Двухтактное выполнение позволяет сохранять постоянную загрузку шины и использовать в простых системах всего две микросхемы 8-разрядной памяти.
В M17 есть шесть регистров кэша команд. Они образуют короткий буфер, хранящий цепочку инструкций в порядке их выполнения. Если с помощью специальной директивы будет запущено повторение последовательности, то из запомненных команд ( общим числом до шести ) будет сформирован цикл, повторяющийся до появления условий выхода. В отличие от обычного исполнения цикл тратит один такт на инструкцию, потому что её не надо считывать из внешней памяти. В порядке упрощения логики управления и прерываний, такие циклы должны быть выровнены по границе восьми слов. Последовательность может быть прервана, но обработчик прерывания должен позаботиться о сохранении специального флага, если намерен сам воспользоваться буфером.
==64
Последней особенностью M17 является возможность иметь циклы тактирования переменной длины в асинхронном режиме интерфейса памяти. В таком режиме M17 выдаёт сигнал запроса в каждом цикле памяти. Внешняя схема должна возвратить сигнал готовности, когда данные действительны. Такая процедура квитирования делает ненужным тактовый генератор и переводит систему в асинхронный режим работы. Одно из преимуществ подобной схемы является то, что память с разным быстродействием может использовать различную величину задержки сигнала готовности, а не выравнивать скорость обмена по самому медленному устройству. Другим преимуществом является очень небольшая задержка для циклов, в которых не происходит обращения к памяти, позволяющая проводить внутренние операции быстрее, чем циклы работы с памятью. В условиях жёстких требований к снижению стоимости устройства для тактирования всей системы могут использоваться простейшие генераторы.
4.3.3 Обзор системы команд
Команды в M17 выполняются за два такта: один для выборки инструкции и один для обработки данных и обмена со стеком. Все элементарные операции «Классической Стековой Машины», перечисленные в табл. 3.1 , исполняются за один цикл ( два такта ). Детали исполнения некоторых команд в M17 слегка изменены, чтобы уместиться в один цикл. Например, процедура сохранения данных в памяти не выталкивает значение и адрес из стека, потому что это требует двух дополнительных обращений к памяти.
На рис. 4.5a показан формат вызова подпрограмм. Он состоит из выровненного по границе чётного слова адреса, по которому передаётся управление, и нулевого младшего бита, как признака операции. Такой формат требует, чтобы адрес был чётным, но позволяет иметь доступ ко всему адресному пространству в 64K слов.
Рис. 4.5a Формат инструкций M17 -- вызов подпрограмм
В M17 есть три условных инструкции: «SET», «RETURN» и «JUMP». На рис. 4.5b показан их обобщённый формат. В битах 6..15 выбираются доступные условия для последующего объединения по «ИЛИ». Например, если установлены бит_15 и бит_13 , то выбрано условие «МЕНЬШЕ ИЛИ РАВНО НУЛЮ». Установленный бит_5 инвертирует выбранное условие. Например, если установлены бит_15 , бит_13 и бит_5 , то выбрано условие «БОЛЬШЕ НУЛЯ». Бит_4 управляет работой регистра INDEX . Для директивы «RETURN» он позволяет управлять удалением элемента из стека возврата. Для «SET» и «JUMP» он выбирает уменьшение регистра INDEX и проверку его содержимого на равенство нулю. Таким образом, можно создать в одной инструкции множество условий, базирующихся на значениях регистров X , Y , Z или INDEX .
Рис. 4.5b Формат инструкций M17 -- шаблон инструкций с условием
==65
==66
==67
Очень важно отметить, что инструкции с условиями в M17 не изменяют содержимое стека. Они просто собирают код условия из имеющихся в системе данных и выполняют нужную операцию. Например, при выборе признака переноса ( бит_9 ) условием становится перенос от как бы сложенных X и Y , но сами X и Y остаются при этом в неприкосновенности. Результат выбранного условия не сохраняется, кроме случая использования инструкции «SET».
На рис. 4.5c показан формат условной инструкции «SET». Эта команда устанавливает «флаг пользователя» в соответствии с результатами проверки заданного условия, которое выбирается битами 4..15 . Значение флага можно проверять в других инструкциях. Бит_3 управляет удалением из стека верхнего элемента ( эквивалент слова «DROP» языка FORTH ) после вычисления условия.
Рис. 4.5c Формат инструкций M17 -- установка флага пользователя ( user flag )
Рис. 4.5d показывает формат инструкции возврата из подпрограммы по условию «RETURN». Если бит_4 сброшен в ноль, то инструкция выполняется как возврат с условием. Другими словами, если условие истинно, то выполняется возврат и выталкивание адреса возврата с вершины стека возврата ( это регистр INDEX ) [* в противном случае, возврат не выполняется ] . Если же бит_4 установлен в единицу, то переход по адресу на вершине стека возврата выполняется [* в любом случае ] , но сам адрес удаляется, только если условие ложно. Это общепринятый способ реализации управляющей структуры с условием «BEGIN...UNTIL_FALSE», которая сохраняет начальный адрес циклического кода в регистре INDEX и использует состояние вершины стека данных как условие завершения цикла.
Рис. 4.5d Формат инструкций M17 -- возврат по условию
==68
Формат условной директивы перехода «JUMP» показан на рис. 4.5e . Инструкция вычисляет условие и делает переход, если оно истинно. Адрес назначения хранится в памяти сразу после самой инструкции. Если условие ложно, то M17 пропускает адрес назначения и выполняет директиву из следующего слова программной памяти ( второе слово после инструкции «JUMP» ). Если бит_4 установлен, команда работает как цикл с обратным отсчётом, используя в качестве счётчика регистр INDEX .
Рис. 4.5e Формат инструкций M17 -- переход по условию
На рис. 4.5f показан формат инструкции «PROCESS». В нём есть несколько независимых управляющих полей, напоминающих горизонтальный микрокод CPU/16. Биты 3..5 управляют регистром Z , бит_6 , бит_7 - регистром Y , бит_13 - разрешает защёлкивание LASTX , а бит_14 - защёлкивание X . Биты 8..12 выбирают функцию АЛУ/сдвигового устройства. И, наконец, бит_15 разрешает изменение указателя стека данных в инструкции.
Рис. 4.5f Формат инструкций M17 -- вычисления
Формат инструкции «ACCESS» представлен на рис. 4.5g . Он очень похож на формат директивы «PROCESS». Основное отличие - биты 8..11 определяют источник или, в случае направления данных в обход АЛУ, пару источник-приёмник. Бит_12 и бит_14 управляют режимом обновления регистров источника и приёмника, позволяя выполнять обмен между внутренними регистрами.
Рис. 4.5g Формат инструкций M17 -- обмен данными
M17 трактует прерывания, как аппаратный вызов подпрограммы по адресу «0x0000». Устройство-источник прерывания может предоставить иной адрес. Кроме того, имеется регистр, позволяющий сохранять контекст процессора в момент получения прерывания [* для чего достаточно одного единственного регистра ] .
4.3.4 Возможности архитектуры
Основным отличием M17 от «Классической Стековой Машины» заключается в единой шине доступа к стекам и программной памяти в M17 и возможности их размещения в общем устройстве хранения. Для поддержания достаточно высокой производительности три верхних элемента стека данных и один элемент стека возврата буферируются во внутренних регистрах.
Вместо единой внутренней шины «Классической Стековой Машины» в M17 организована обширная система межрегистровых связей. Эти связи не только позволяют перемещать данные в цепочке регистров LASTX/X/Y/Z при сохранении и удалении данных, но и позволяют маршрутизацию для выполнения весьма сложных действий со стеком в пределах одного двухтактного цикла декодирования и исполнения команды.
Стеки располагаются в общей памяти, поэтому для работы адресной шины требуются мультиплексоры. Преимуществом такого решения является уменьшение объёма внутрипроцессорной информации, требующей сохранения на внешнем носителе при переключении контекста. Вместо копирования содержимого внутренних стеков в системную память, нужно лишь сбросить в память буфера верхних элементов и переназначить указатели стеков на адреса, соответствующие новой задаче.
==69
4.3.5 Реализация и область применения
M17 построен с использованием 6600 вентилей по 2.0µm HCMOS технологии и упакован в 68-выводный корпус PLCC. Выбор технологии определяется желанием получить хорошую производительность при сохранении низкой стоимости проектирования и производства. Основным необходимым для работы внешним компонентом является банк 16-разрядной памяти для программы и стеков.
При использовании памяти со временем доступа 30 ns максимальная тактовая частота M17 составляет 15 MHz и 6 MHz при использовании 120ns памяти. Каждая инструкция выполняется за два такта. Последовательности инструкций, сохранённые в шестиэлементном кэше, выполняются со скоростью один такт на инструкцию.
Некоторые особенности MISC M17 адресованы разработчикам малотиражных устройств с высокими параметрами. Области возможного использования охватывают удалённые измерения для дымовых труб, шахт, зон повышенной опасности и необслуживаемое оборудование. Размещение стеков в системной памяти уменьшило сложность и стоимость системы. Асинхронный протокол шины памяти позволяет совмещать быструю обработку и передачу информации без усложнения интерфейса с медленными устройствами сбора данных.
Информация для этого раздела взята из «MISC M17 Technical Reference Manual» ( MISC 1988 ).
==69