16-разрядный RISC-микропроцессор Дофин-1620 СОДЕРЖАНИЕ 1. Назначение. 1.1. Назначение выводов микропроцессора. 2. Архитектура микропроцессора. 2.1. Особенности архитектуры. 2.2. Стек данных. 2.3. Стек возвратов. 2.4. Внутренние регистры. 2.4.1. Указатель стеков JK. 2.4.2. Регистр вершины стека возвратов I. 2.4.3. Счетчик команд P. 2.4.4. Регистр TRUE. 2.4.5. Регистр умножения/деления MD. 2.4.6. Регистр границ стеков SLR. 2.4.7. Регистр квадратного корня SR. 2.4.8. Регистр конфигурации CR. 2.4.9. Регистр запросов QINT. 2.4.10. Регистр маски прерываний MASK. 2.4.11. Регистры порта P. 2.4.12. Регистр вершины стека данных T. 2.4.13. Следующий регистр стека данных N. 3. Описание функционирования. 3.1. Синхронизация МП. 3.2. Сброс МП. 3.3. Организация прерываний. 3.4. Выборка команды. 4. Система команд МП. 4.1. Однотактные команды. 4.1.1. Команда CALL. 4.1.2. Команда RETURN. 4.1.3. Команды ветвлений. 4.1.4. Арифметические команды. 4.1.5. Команды математических функций. 4.1.6. Операции с регистрами. 4.1.7. Операции с коротки литералом. 4.2. Двухтактные команды. 4.2.1. Операции с локальной памятью. 4.2.2. Операции с 16-битным литералом. 4.2.3. Операции с внешней глобальной памятью. 4.3. Признаки операции. 4.4. Потоковая обработка. 1. НАЗНАЧЕНИЕ Микросхема Дофин-1620 представляет собой однокристальный шестнадца- тиразрядный микропроцессор (МП), выполненный по КМОП-технологии. Кристалл микросхемы с геометрическими размерами 8.0 * 8.0 мм содержит около 50000 транзисторов и потребляет менее 0.1 Вт от источника питания +5 В. Микросхема изготавливается в 100-выводном корпусе, синхронизиру- ется однофазными импульсами с частотой повторения 5 МГц от внешнего так- тового генератора. Все команды МП выполняются за один или два такта, что обеспечивает быстродействие 5 млн. оп/с для регистровых операций и 2.5 млн. оп/с для операций с памятью. Микропроцессор Дофин-1620 (далее обозначается ДН1620) является усо- вершенствованным вариантом МП Дофин-160 (ДН160). Архитектуры обоих МП принципиально не отличаются. ДН1620 (в отличие от ДН160) имеет два внут- ренние стека объемом 16 слов каждый, аппаратный умножитель 16*16 бит, несколько дополнительных регистров, более развитую систему прерываний. Преемственность этих микропроцессоров выражается в программной совмести- мости снизу вверх, благодаря которой для ДН1620 можно использовать прог- раммное обеспечение ДН160. Хотя машинные коды ДН160 не могут непосредс- твенно выполняться ДН1620, они достаточно просто переводятся с языка ас- семблера одного МП на язык ассемблера другого. МП осуществляет обработку данных и управление обменом по внешним ма- гистралям. Алгоритмы обработки данных определяются системой команд. Условно-графическое обозначение МП приведено на рис. 1, расположение выводов на корпусе приведено на рис. 2, назначение выводов в таблице 1. 1.1. Назначение выводов микропроцессора. CLK - вход синхронизации(тактирования). Сигнал синхронизации от внешнего генератора тактовых импульсов предназначен для синхронизации МП. Частота подачи импульсов может изменяться от 0 Гц до 5 МГц. RESET - вход сброса. Переводит МП в определенное состояние, в кото- ром сброшены некоторые регистры, все флаги, триггера в устройстве управ- ления. Во время действия сигнала RESET все двунаправленные выводы пере- водятся в состояние приема информации. Минимальная продолжительность сигнала RESET должна составлять не менее одного такта, т. е. за время действия сброса сигнал CLK должен переключиться из низкого уровня в высокий не менее одного раза. WAIT - вход ожидания. Переводит МП в состояние, в котором вход синх- ронизации CLK не оказывает никакого воздействия на МП. Выходной сигнал PCLK при этом всегда имеет низкий уровень до окончания действия сигнала WAIT. Использование входа ожидания позволяет синхронизировать работу МП с медленными устройствами, когда обмен с последними не может быть выпол- нен в течение одного такта. HOLD - захват шины. Переводит шину данных D[15:0] и шину адреса А[15:0] в высокоимпедансное состояние, что позволяет внешнему устройству осуществить доступ к памяти микроЭВМ. Сигнал HOLD должен подаваться только одновременно с активным сигналом WAIT, т. е. последовательность захвата шины должна быть следующей: а) WAIT=0 - останов МП; б) НOLD=0 - захват шины; в) выполнение ВУ циклов обмена; г) HOLD=1 - освобождение шины; д) WAIT=1 - продолжение работы МП. INT - прерывание. Отрицательный фронт сигнала INT вызывает установку внутреннего триггера запроса прерывания и если это прерывание не за- маскировано, то произойдет его обработка. IRQ0, IRQ1 - прерывание. В отличие от сигнала INT, прерывание по входам IRQ0 и IRQ1 вызывается отрицательным фронтом этого сигнала, но должно поддерживаться низким уровнем этого сигнала пока не будет выпол- нен цикл подтверждения прерывания. Прерывание по входам IRQ0 и IRQ1 мо- жет быть замаскировано. IRQ2 - захват шины адреса GA. Активный уровень сигнала IRQ2 вызывает перевод шины GA[8:0] в отключенное состояние. Вход IRQ2 может использо- ваться и как вход запроса прерывания, подобно IRQ0. Функции сигнала IRQ2 задаются во время сброса МП. Если во время активного RESET вход SUP име- ет низкий уровень, то вход IRQ2 будет вызывать перевод шины GA в третье состояние и одновременно прерывание МП. Если же SUP имеет высокий уро- вень во время сброса, то IRQ2 используется только как вход запроса пре- рывания. IRQ3 - захват шины данных GD. Сигнал IRQ3 абсолютно идентичен сигна- лу IRQ2, но управляет шиной GD[15:0]. TXD - вход данных приемника последовательного интерфейса. К выводу TXD подключается выход передатчика последовательного интерфейса пассив- ного устройства, подключаемого к МП. SUP - блокировка прерываний. Активный уровень сигнала SUP блокирует прохождение запросов на прерывание к МП. Во время сброса МП сигнал SUP определяет режим работы входов IRQ2 и IRQ3. PCLK - выходной синхросигнал. Сигнал PCLK повторяет входной сигнал CLK с некоторой фиксированной задержкой, если отсутствует активный уро- вень на входе WAIT. При активном WAIT выход PCLK будет иметь низкий уро- вень, независимо от значения CLK. BOOT - начальная загрузка. Выход BOOT является копией [3] разряда регистра конфигурации. Этот разряд очищается во время сброса и в даль- нейшем может быть загружен программно. READY - готовность обмена. Сигнал READY является копией [4] разряда регистра конфигурации. В остальном он аналогичен сигналу BOOT. MIO - обмен по шине D[15:0]. Низкий уровень сигнала MIO указывает на выполнение по шине данных основной памяти цикла обмена. MR/W - чтение/запись. Во время обмена по шине D сигнал определяет тип обмена: чтение (1) или запись (0). MODE - режим работы. Уровень сигнала определяет один из двух возмож- ных режимов работы МП. MODE=0 означает, что МП выполняет программу обра- ботки прерывания или программу начальной загрузки. MODE=1 соответствует выполнению программы пользователя. Значение MODE=0 устанавливается аппа- ратно во время сброса системы сигналом RESET или при возникновении пре- рывания. MODE=1 можно установить только программно. NEW - выбор команды. Во время цикла чтения по шине данных (MIO=0 & MR/W=1) сигнал NEW определяет тип принимаемой информации: NEW=0 - коман- да или длинный литерал, NEW=1 - операнд двухтактной команды обмена с па- мятью. USER - выбор локальной памяти. Активный уровень сигнала USER опреде- ляет первый такт двухтактной команды обращения к локальной памяти, когда происходит чтение или запись операнда. A15:A00 - шина адреса. В каждом такте на шину адреса A[15:0] выда- ется адрес, определяющий нахождение требуемой в следующем такте информа- ции. Поскольку МП имеет 16-разрядный адрес, причем в МП принята словная (16 бит) организация данных, то максимально возможный обьем адресуемой памяти составляет 64К слов. D15:D00 - шина данных основной памяти. На данную шину помещается ин- формация из ОЗУ при чтении в МП, или из МП при записи в ОЗУ. GIO - обмен по шине GD. В МП предусмотрена специальная шина GD[15:0] для подключения устройств расширяющих (дополняющих) архитектуру МП. При необходимости выполнения обмена по этой шине, вырабатывается сигнал GIO. GR/W - чтение/запись по шине GD. Сигнал определяет тип обмена по специальной шине - чтение (1) или запись (0). STEX - выбор внешнего стека. В архитектуре МП предусмотрена возмож- ность подключения внешнего стека данных и/или стека возвратов. Выбор ра- боты с внутренним или внешним стеком осуществляется разрядами [6] и [5] регистра конфигурации ([6] - стек данных внешний (1) или внутренний (0), [5] - стек возвратов). Если хотя бы один из этих разрядов равен 1, то сигнал STEX=0. GA8:GA0 - специальная шина адреса. Используется для адресации внеш- них устройств или/и для адресации внешнего стека. GD15:GD00 - специальная шина данных. Используется для передачи дан- ных между МП и подключаемыми внешними устройствами. CLXD - синхронизация последовательного обмена. Сигнал управляет внешним устройством, подключенным к последовательному интерфейсу МП, при необходимости выполнить обмен. TXD - выход данных передатчика последовательного интерфейса. P7:P0 - порт обмена. Каждый из выводов порта может быть запрограмми- рован на прием или выдачу информации. 2. АРХИТЕКТУРА МИКРОПРОЦЕССОРА 2.1. Особенности архитектуры. МП Дофин-1620 относится к вычислительным устройствам со стековой ар- хитектурой. В таких устройствах обрабатываемые данные находятся в стеке и большинство команд использует в качестве операндов один или два верх- них элемента стека. Особенность архитектуры МП Дофин-1620 состоит в том, что он содержит два стека - данных и возвратов, которые могут работать параллельно. Стек данных содержит обрабатываемые данные. Стек возвратов содержит адреса возвратов из подпрограмм. Структурная схема микропроцессора приведена на рис. 3. В состав мик- ропроцессора входят следующие функциональные блоки: L - регистр команд, Т - верхний регистр стека данных, N - следующий регистр стека данных, I - верхний регистр стека возврата, P - счетчик команд, JК - объединенный указатель стеков данных и возврата, SLR - регистр границы стека, MD, SR - рабочие регистры расширенной арифметики, CR - регистр конфигурации, QINT - регистр запросов прерываний, MASK - регистр маскирования прерываний, РDir, PDat - регистры управления портом Р, ALU - арифметико-логическое устройство, MUL - аппаратный умножитель, PS, RS - стек данных и стек возвратов. 2.2. Стек данных. Стек данных состоит из внутренней памяти PS и из регистров N и Т. Данные, выгружаемые в память стека, всегда берутся из регистра N, а дан- ные, загружаемые из памяти стека, записываются в N или игнорируются. При загрузке из стека, N помещается в Т через АЛУ. При выгрузке в стек, Т может непосредственно записываться в N. Операции пересылки данных между T и N и между N и стеком независимы и позволяют выполнить комбинированные действия, что увеличивает эффек- тивность использования стека без дополнительных затрат времени. 2.3. Стек возвратов. Стек возвратов состоит из внутренней памяти RS и регистра I. Все об- ращения к стеку возвратов осуществляются через регистр I. I может быть прочитан без загрузки из стека нового значения, но при записи в I преж- нее значение всегда выгружается в стек RS. 2.4. Внутренние регистры. 2.4.1. Указатель стека JK. Регистр JK является указателем для стека возвратов и стека данных. Старшая часть (J) адресует стек возврата, а младшая (К) - стек данных. Регистр доступен по чтению и записи. 2.4.2. Регистр вершины стека возвратов I (Index). Регистр I хранит верхний элемент стека возвратов. При чтении регист- ра I возможно продвижение стека возвратов вверх. При записи в I стек возвратов всегда продвигается вниз. Регистр I используется в следующих случаях: - по команде CALL адрес возврата (P+1) записывается в I, а по коман- де Return читается из I; - команды цикла (NEXT) и потоковой обработки используют I, как счет- чик количества тактов повторного выполнения команды; - для хранения локальных переменных. 2.4.3. Счетчик команд P (Program Counter). 15-битный регистр P содержит адрес текущей команды плюс 1. Он досту- пен только по чтению. Запись информации по адресу P не изменяет его зна- чения. Однако возможна косвенная запись информации в P. Последовательное выполнение действий: Т => I, Return вызовет прием команды по адресу (Т) и запись в P значения (Т)+1. 2.4.4. Регистр TRUE. Регистр True доступен только по чтению и при чтении всегда возвраща- ет значение FFFFh. 2.4.5. Регистр умножения/деления MD (Multiplier/Divisor). Регистр MD выполняет несколько функций. При базовом алгоритме умно- жения MD содержит множитель, который добавляется к произведению, когда соответствующий бит в множимом имеет значение 1. Когда используется алгоритм деления, MD содержит делитель, который условно вычитается из делимого. При вычислении квадратного корня MD содержит делитель, и использу- ется специальная логика для условного изменения самого MD. MD имеет доступ по чтению/записи и может использоваться как рабочий регистр, ког- да не используются команды арифметических функций. 2.4.6. Регистр границы стека SLR (Stack Limit Register). Значение, содержащееся в регистр SLR, используется контроллером сте- ка для определения ситуации переполнения стека. Старший байт относится к стеку возвратов, младший - к стеку данных. При выключенном контроллере стеков регистр SLR может использоваться как регистр общего назначения. 2.4.7. Регистр квадратного корня SR (Square Root). Алгоритм вычисления квадратного корня требует одного дополнительного регистра по сравнению с делением. Регистр SR содержит информацию, кото- рая сдвигается при вычислении квадратного корня. В силу этого SR имеет возможность сдвига данных без участия АЛУ. Если SR не занят при вычисле- нии квадратного корня, он может быть использован, как рабочий регистр. Кроме того регистр SR используется как буферный регистр при работе со встроенным последовательным интерфейсом. 2.4.8. Регистр конфигурации CR (Configuration Register). 16-разрядный регистр CR управляет использованием ресурсов МП, а так- же отражает состояние некоторых внутренних триггеров МП. Он не может быть использован как регистр общего назначения. Ниже описаны разряды ре- гистра конфигурации: [15] - CARRY r/w флажок переноса [14] - INT r/o запрос на прерывание по входу INT [13] - IRQ0 r/o запрос на прерывание по входу IRQ0 [12] - IRQ1 r/o запрос на прерывание по входу IRQ1 [11] - IRQ2 r/o запрос на прерывание по входу IRQ2 [10] - IRQ3 r/o запрос на прерывание по входу IRQ3 [9] - PSer r/o запрос на прерывание по ошибке стека данных [8] - RSer r/o запрос на прерывание по ошибке стека возвратов [7] - ASIC r/w управляет шиной GA [6] - PS r/w внешний стек данных [5] - RS r/w внешний стек возвратов [4] - READY r/w выход READY [3] - BOOT r/w выход BOOT [2] - SIGN r/w управляет работой последовательного интерфейса [1] - RG1 r/w выбор "7-го" регистра [0] - RG0 r/w -"- 2.4.9. Регистр запросов прерываний QINT (Interrupt Query). Регистр отражает текущее состояние триггеров запросов прерываний от каждого из возможных источников прерываний (см. ниже). Установка запроса на прерывание выполняется только аппаратно. Программно можно выполнить только сброс триггера. 2.4.10. Регистр маски прерываний MASK. Регистр используется для разрешения прерывания работы МП от разных источников прерываний (см. ниже). Каждый из битов регистра разрешает или запрещает прерывание от одного источника. 2.4.11. Регистры порта Р (Port). Управление 8-разрядным портом Р осуществляется двумя регистрами, доступными по записи: регистр данных (РData), регистр направления (РDir). Каждый бит этих регистров выполняет определенную функцию соот- ветствующего бита порта. Если некоторый бит регистра направления имеет единичное значение, то значение соответствующего бита регистра данных выдается на внешний контакт порта. В противном случае соответствующий вывод будет находиться в отключенном состоянии. При сбросе регистр PDir принимает значение 00H. 2.4.12. Регистр вершины стека данных Т (Top). Верхний элемент стека данных располагается в регистре Т. Т по умол- чанию является источником АЛУ и результат операции всегда помещается в Т. Каждый раз при изменении Т в отдельном триггере запоминается условие "Т=0". Это позволяет быстро выполнить команду условного перехода. Кроме этого Т содержит адрес для команд чтения/записи основной памяти. 2.4.13. Следующий регистр стека данных N (Next). Регистр N хранит второй сверху элемент стека данных. Он используется для арифметических операций, во время длинных сдвигов (когда Т и N обра- зуют 32-битный регистр), а для команды записи в память регистр N хранит данные. 3. ОПИСАНИЕ ФУНКЦИОНИРОВАНИЯ Порядок функционирования МП следующий. По положительному фронту сиг- нала CLK в регистр команды L записывается команда. Блок CU осуществляет дешифрацию команды и определяет код операции ALU, а также тип обмена со стеками. В следующем такте в регистр команд записывается новая команда. Если необходим прием операнда из ЗУ, то команда выполняется за 2 такта: в первом - прием данного, во втором - выполнение операции на ALU. 3.1. Синхронизация МП. МП требует для тактирования одного вывода - CLK и частоты, равной базовому времени выполнения команды. Выполнение команд можно представить последовательностью циклов шины (циклов обмена), в течение которых МП обращается к памяти за командами или обменивается данными. Цикл обмена ДН1620 выполняется в течение одного такта, т. е. по положительному фрон- ту сигнала CLK на шину адреса с некоторой задержкой выставляется адрес, производиться чтение памяти и данные выдаются на шину данных. По следую- щему положительному фронту эти данные защелкиваются во внутреннем ре- гистре и на шину адреса выдается новая информация. При записи в память одновременно с выдачей адреса МП выставляет на шину данных записываемые данные. Во втором полупериоде сигнала CLK происходит их запись в память. За время одного такта должны быть выполнены все операции обмена по внеш- ним шинам. Если этого не произошло (т. е. МП совершает обмен с медленным устройством), то внешняя (!) логическая схема должна определить эту си- туацию и остановить тактирование МП, подав на вход WAIT низкий уровень, и дать возможность ему начаться заново при готовности устройства. Анализируя во время цикла обмена (MIO=0) сигналы NEW, USER, MR/W можно определить тип обмена: NEW USER MR/W 1 1 - - обмен данными с основной памятью, 1 0 - - -"- с локальной памятью, 0 1 1 - чтение команды или литерала. 3.2. Сброс МП. СБИС имеет асинхронный вход сброса RESET, который осуществляет: - установку регистра команд в состояние 1000Н; - сброс триггеров запроса прерывания, разрешения прерывания, потоко- вой обработки; Во время сброса МП осуществляет обращение за командой по адресу 1000Н. После завершения сброса МП фиксирует содержимое памяти по адресу 1000Н в регистре команд и начинает обычное функционирование. В процессе работы, после приема очередной команды в регистр команд, счетчик команд увеличивается на единицу и начинается выборка следующей команды, параллельно с выполнением текущей. 3.3. Организация прерываний. МП имеет эффективную систему прерываний. Прерывания могут иницииро- ваться: а) внешними устройствами посредством сигналов INT, IRQ0, IRQ1, IRQ2, IRQ3; б) внутренним контроллером стеков: PSer - ошибка стека данных, RSer - ошибка стека возвратов; в) программно, путем установки старшего бита SWI регистра маски пре- рываний Mask. Для эффективного управления обработкой прерываний в ДН1620 предус- мотрен регистр маски прерываний, позволяющий заблокировать запрос на прерывание от любого источника прерываний. Разряды регистра: [15] - программное прерывание, [14] - маскирование запроса прерывания по входу INT, [13] - -"- IRQ0, [12] - -"- IRQ1, [11] - -"- IRQ2, [10] - -"- IRQ3, [9] - -"- от стека данных, [8] - -"- от стека возвратов, [7:0] - не используемые разряды, доступны только по чтению. Считы- ваемая информация заранее не определена. При возникновении прерывания МП выполняет обращение за командой по адресу 20Н, где должна быть расположена программа обработки прерываний. После выхода на программу обработки возникает вопрос: от какого источни- ка получено прерывание? Для получения ответа на этот вопрос в ДН1620 предусмотрен регистр запросов прерываний. Он доступен по чтению при об- ращении к регистру конфигурации CR. Разряды CR[14:8] отражают наличие запросов на прерывание. Проанализировав эти разряды можно определить источник прерывания. Если их несколько, то пользователь сам может назна- читьочередность их обслуживания. Возникновение прерывания сопровождается установкой триггера режима работы MODE и соответствующий внешний вывод микросхемы примет значение MODE=0. После обработки запроса на прерывание необходимо очистить соот- ветствующий бит регистра запроса прерываний. Для этого необходимо обну- лить два младших разряда регистра CR[1:0] и произвести запись по адресу регистров порта. Для очистки запроса на прерывание соответствующий бит константы должен быть установлен. Сброс триггера MODE осуществляется при записи в регистр запросов прерываний или в регистр маски константы с установленным младшим битом. При записи в регистр запросов прерываний константы с битом [15]=1, МП переходит в состояние ожидания, из которого его можно вывести только подав запрос на прерывание. Выход из программы обработки прерывания осуществляется аналогично возврату из подпрограммы. Но здесь есть одна особенность. Во время воз- никновения прерывания, в регистр команд насильно записывается команда CALL по адресу 20Н, а принимаемая до этого команда теряется и счетчик команд P увеличивается на 1. Поэтому при вызове подпрограммы обработки прерывания, на стек возврата (в регистр I) ложиться адрес возврата, уве- личенный на 1. Чтобы правильно выйти из обработки прерывания необходимо выполнить действия а) I => T; б) T-1 => T; в) T => I; г) Return. Для приведения стека возвратов в нормальное состояние дополнительно тра- титься три такта. 3.4. Выборка команды. Когда необходимо выбрать следующую команду, ее адрес берется из од- ного из четырех источников, определяемого текущей выполняемой командой: - регистра P для последовательного исполнения, - регистра I для выхода из подпрограммы, - регистра L для команды CАLL, - конкатенация четырех старших битов P и 11-битного поля из L для команды перехода (это дает переход внутри страницы). Новая команда передается в регистр L в конце такта. 4. СИСТЕМА КОМАНД МП 4.1. Однотактные команды. 4.1.1. Команда CАLL. 0aaa aaa aaa aaa aaa "CАLL" МП осуществляет вызов подпрограммы по адресу "0aaa aaa aaa aaa", загружая при этом адрес возврата в стек возвратов. Бит переноса С сохра- няется в старшем бите адреса возврата. Выполняемые действия: I => RS [C,P] => I 0aaa aaa aaa aaa aaa+1 => P (0aaa aaa aaa aaa aaa) => L Все перечисленные действия выполняются параллельно в течение одного такта. Cтек данных не изменяется. 4.1.2. Команда RETURN. Команда RETURN (или EXIT) осуществляет выход из подпрограммы и пере- дает управление по адресу, находящемуся в регистре I. Выполняемые при этом действия (I[14:0]) => L - прием новой команды I[14:0] + 1 => P - новое значение P I[15] => C - бит переноса RS => I - выталкивание стека возвратов Все перечисленные действия выполняются параллельно, в течение одного такта. Выполнение команды RETURN управляется битом ";" для команд в ко- торых этот бит присутствует (смотри ниже). Если при этом команда двух- тактная, то перечисленные выше действия выполняются во втором такте па- раллельно с выполнением основной команды. Если команда с установленным битом ";" выполняется в потоковом режиме, то перечисленные выше действия будут выполняться в последнем, завершающем такте выполнения команды. 4.1.3. Команды ветвлений. При ветвлении управление передается в следующем такте команде по ад- ресу "pp ppp ppp ppp" внутри текущей страницы. Старшие четыре бита P определяют номер страницы. 1001 0pp ppp ppp ppp "IF_T" "IF_T" - команда условного перехода. Выполняемые действия, если Т=0: PS => N => T P[15:11] pp ppp ppp ppp + 1 => P (P[15:11] pp ppp ppp ppp) => L если Т~=0: PS => N => T " P + 1 => P " (P) => L При выполнении команды, независимо от значения регистра Т, стек дан- ных всегда выталкивается и содержимое Т замещается новым значением. 1001 1pp ppp ppp ppp "IF_С" "IF_С" - команда условного перехода. Выполняемые действия, если С=1: P[15:11] pp ppp ppp ppp + 1 => P (P[15:11] pp ppp ppp ppp) => L если С=0: P + 1 => P " (P) => L 1010 1pp ppp ppp ppp "IF_V" "IF_V" - команда условного перехода. Выполняемые действия, если (Т[15] xor C)=1: P[15:11] pp ppp ppp ppp + 1 => P (P[15:11] pp ppp ppp ppp) => L если (Т[15] xor C)=0: P + 1 => P " (P) => L 1010 0pp ppp ppp ppp "NEXT" "NEXT" - команда цикла. Выполняемые действия, если I~=0: I - 1 => I P[15:11] pp ppp ppp ppp + 1 => P (P[15:11] pp ppp ppp ppp) => L если I=0: RS => I " P + 1 => P " (P) => L Переход выполняется, если I не равен 0. При этом I уменьшается на 1. Если I=0, то стек возвратов выгружается в I и исполняется команда следу- ющая за командой NEXT. Цикл выполняется I+1 раз. 1011 0pp ppp ppp ppp "GOTO" "GOTO" - команда безусловного перехода. Выполняемые действия P[15:11] pp ppp ppp ppp + 1 => P (P[15:11] pp ppp ppp ppp) => L 1011 1xx xxx xxx xxx Зарезервированная команда, требует для выполнения двух тактов. 4.1.4. Арифметические команды. 1000 fff 0ct ;sh hhh - общий формат команды. Данный класс команд выполняет операцию над Т и N, помещая результат в Т. Код операции задается полем "fff", битом "с", полем "hhhh". Биты "t" и "s" управляют операциями над стеком данных, бит ";" управляет сте- ком возврата. АЛУ ДН1620 имеет три ступени обработки операндов. а) выполнение операции в соответствии с кодом "fff": 000 копировать Т 001 Т AND Ybus 010 Т - Ybus 011 Т OR Ybus 100 Т + Ybus 101 Т XOR Ybus 110 Ybus - T 111 копировать N При выполнении операции формируется сигнал переноса из старшего раз- ряда АЛУ, обозначаемый далее как Сf. б) инверсия результата первой ступени если бит "с"=1 и код операции "fff" не соответствует сложению или вычитанию (т. е. выполняется логи- ческая операция или копирование). В случае операции сложения или вычита- ния бит "с"=1 вызывает использование триггера переноса в качестве вход- ного переноса АЛУ (при "с"=0 входной перенос равен при сложении нулю, а при вычитании единице, т. к. А+~В+1), инверсия результата в данном слу- чае не выполняется. в) сдвиг результата операции второй ступени в соответствии с битами "hhhh". При выполнении сдвига формируется бит переноса Сh, который запо- минается в триггере переноса Сt. -------T-------T---------T-----T----------------T----------------¬ ¦ ¦обозна-¦ ¦пере-¦ TOP регистр ¦ NEXT регистр ¦ ¦ hhhh ¦ чение ¦ функция ¦ нос +-----T-----T----+-----T-----T----+ ¦ ¦ ¦ ¦ Сh ¦ T15 ¦ Tn ¦ T0 ¦ N15 ¦ Nn ¦ N0 ¦ +------+-------+---------+-----+-----+-----+----+-----+-----+----+ ¦ 0000 ¦ ¦ ¦ Cf ¦ Z15 ¦ Zn ¦ Z0 ¦ N15 ¦ Nn ¦ N0 ¦ ¦ 0001 ¦ 0< ¦ sign ex.¦ Cf ¦ Z15 ¦ Z15 ¦ z15¦ N15 ¦ Nn ¦ N0 ¦ ¦ 0010 ¦ 2* ¦ A _ L ¦ Z15 ¦ Z14 ¦ Zn-1¦ 0 ¦ N15 ¦ Nn ¦ N0 ¦ ¦ 0011 ¦ 2*c ¦ R _ L ¦ Z15 ¦ Z14 ¦ Zn-1¦ Cf ¦ N15 ¦ Nn ¦ N0 ¦ ¦ 0100 ¦ cU2/ ¦ C _ R ¦ 0 ¦ Cf ¦ Zn+1¦ Z1 ¦ N15 ¦ Nn ¦ N0 ¦ ¦ 0101 ¦ c2/ ¦ R_C_R ¦ Z0 ¦ Cf ¦ Zn+1¦ Z1 ¦ N15 ¦ Nn ¦ N0 ¦ ¦ 0110 ¦ U2/ ¦ L _ R ¦ 0 ¦ 0 ¦ Zn+1¦ Z1 ¦ N15 ¦ Nn ¦ N0 ¦ ¦ 0111 ¦ 2/ ¦ A _ R ¦ Z15 ¦ Z15 ¦ Zn+1¦ Z1 ¦ N15 ¦ Nn ¦ N0 ¦ ¦ 1000 ¦ N2* ¦ A_L_N ¦ Cf ¦ Z15 ¦ Zn ¦ Z0 ¦ N14 ¦ Nn-1¦ 0 ¦ ¦ 1001 ¦ N2*c ¦ R_L_N ¦ Cf ¦ Z15 ¦ Zn ¦ Z0 ¦ N14 ¦ Nn-1¦ Cf ¦ ¦ 1010 ¦ D2* ¦ A _ L ¦ Z15 ¦ Z14 ¦ Zn-1¦ N15¦ N14 ¦ Nn-1¦ 0 ¦ ¦ 1011 ¦ D2*c ¦ R _ L ¦ Z15 ¦ Z14 ¦ Zn-1¦ N15¦ N14 ¦ Nn-1¦ Cf ¦ ¦ 1100 ¦ cUD2/ ¦ C _ R ¦ 0 ¦ Cf ¦ Zn+1¦ Z1 ¦ Z0 ¦ Nn+1¦ N1 ¦ ¦ 1101 ¦ cD2/ ¦ R_C_R ¦ N0 ¦ Cf ¦ Zn+1¦ Z1 ¦ Z0 ¦ Nn+1¦ N1 ¦ ¦ 1110 ¦ UD2/ ¦ L _ R ¦ 0 ¦ 0 ¦ Zn+1¦ Z1 ¦ Z0 ¦ Nn+1¦ N1 ¦ ¦ 1111 ¦ D2/ ¦ A _ R ¦ Z15 ¦ Z15 ¦ Zn+1¦ Z1 ¦ Z0 ¦ Nn+1¦ N1 ¦ L------+-------+---------+-----+-----+-----+----+-----+-----+----- Параллельно с выполнением операции на АЛУ производятся операции над стеком данных и стеком возвратов. При этом соответствующие биты задают "t"=1 - копированиe Т в N; "s"=1 - активность стека данных; ";"=1 - возврат из подпрограммы; "t" "s" 0 1 PS => N 1 1 N => PS. 4.1.5. Команды математических функций. 1000 fff 1qt ;sd hhh Для данного набора команд кодирование кода команды осуществляется битами "q" и "d", при этом код сдвига "hhhh" всегда равен "1hhh", неза- висимо от значения бита "d". Бит "с", рассмотренный выше, в данном слу- чае всегда равен нулю независимо от значения бита "q". 1000 100 10t ;s0 100 - шаг кодового умножения. 1000 100 10t ;s0 111 - шаг знакового умножения. При этом множитель в MD, множимое в N, начальное значение произведе- ния в Т. В шаге умножения выполняется операция: shift[T + MD] => T при N0=1 shift[T] => T при N0=0 ДН1620 выполняет несколько вариантов аппаратного умножения: 1000 111 111 ;00 000 - кодовое умножение 1000 111 111 ;00 001 - знаковое умножение 1000 111 111 ;00 010 - кодовое умножение с накоплением 1000 111 111 ;00 011 - знаковое умножение с накоплением При этом выполняется операция умножения над регистрами T и N, а ре- зультат операции запоминается: младшая часть в T, старшая часть в N. При выполнении умножения с накоплением результат операции помещается в Т и N, а также суммируется со значением регистров MD и SR, которые образуют 32-разрядный накапливающий регистр, где SR - cтаршая часть, MD - млад- шая. 1000 010 10t ;s1 011 - шаг деления. При этом делимое в паре [T,N], делитель в MD. В каждом такте про- исходит выполнение операции Т - МD. При этом если перенос Сf из АЛУ: 0 - происходит сдвиг [T,N] влево; 1 - >> [результат операции,N] влево. В обоих случаях в младший разряд N помещается значение переноса Cf. 1000 010 11t ;s1 011 - шаг квадратного корня. При этом аргументы в паре [T,N], в MD ноль и в SR значение 8000Н. Каждый шаг похож на деление, но Ybus равна логическому выражению (SR ! (MD*2)). Если в шаге возник перенос, то (SR ! MD) помещается в MD. В каждом такте SR сдвигается вправо. В конце операции результат - в MD и в N, а остаток - в Т. 1000 x0x 11x ;x1 hhh - команда последовательной передачи. "hhh" 00x RXD --> SR[15:0] --> TXD 010 RXD --> f(SR[15:0]) --> TXD 1x0 RXD --> f(SR[15:0]) --> TXD x11 T15 --> f(SR[15:0]) --> TXD 101 N0 --> f(SR[15:0]) --> TXD f(x) = 1 + x^7 + x^9 + x^12 + x^16 4.1.6. Операции с регистрами. В добавление к тому, что регистры неявно используются в некоторых командах, большинство регистров доступны как элементы регистрового файла "внутренняя память": iii r/s CR[1:0] обозначение 0 - - JK 1 - - I 2 - - P 3 - - True 4 - - MD 5 - - SLR 6 - - SR 7 0 - CR 7 1 0 QInt 7 1 1 Mask 7 1 2 PDir 7 1 3 PDat Команды REG@, REG! и REG@! читают, пишут и обменивают Т и значение внут- реннего регистра, номер которого записан в литеральном поле команды . REG@ "чтение регистра" 1110 fff 0c0 ;r0 iii T -fff- (iii) => T 1110 fff 0c1 ;r0 iii T -fff- (iii) => T => N => PS Содержимое регистра "iii" помещается на шину Ybus и производится операция "fff" на АЛУ. Бит "r"=1 означает, что производится выгрузка стека возвратов, т. е. RS=>I. REG! "запись регистра" 1110 fff 100 ;s0 iii T-fff-N => T => (iii) 1110 fff 101 ;s0 iii T-fff-N => T => (iii) " PS => N REG@! "обмен с регистром" 1110 fff 110 ;s0 iii T-fff-(iii) => T => (iii) 1110 fff 111 ;s0 iii T-fff-(iii) => T => (iii) " PS => N Бит "s"=1 вызывает установку в следующем такте триггера потоковой обработки и следующая за данной команда будет выполняться в потоковом режиме (описан ниже). Выше было отмечено, что ДН1620 имеет в своем интерфейсе специальную шину для подключения внешних устройств, расширяющих архитектуру МП. С программной точки зрения эти ВУ представляют собой внешний набор регист- ров с которыми можно работать используя следующие коды команд. 1110 fff 0c1 ;i1 iii - чтение внешнего регистра При этом выполняются операции: T -fff- N => T " (iiii) => N 1110 fff 1c1 ;i1 iii - запись внешнего регистра При этом выполняются операции: T -fff- N => T " N => (iiii) Кроме того следующие команды обеспечивают прямой доступ к ячейкам внутреннего стека данных: 1110 fff 0c0 ;i1 iii T -fff- N => T " (iiii) => N чтение 1110 fff 1c0 ;i1 iii T -fff- N => T " N => (iiii) запись 4.1.7. Операции с коротким литералом. Значение литерала ddddd помещается на шину Ybus и выполняется опера- ция "fff". Cтаршие биты литерала заполняются нулями. "короткий литерал" 1101 fff 1с0 ;dd ddd T -fff- ddddd => T 1101 fff 1c1 ;dd ddd T -fff- ddddd => T => N => PS 4.2. Двухтактные команды. Двухтактные команды выполняют cледующие действия в тактах: первый - МП осуществляет доступ к внешней памяти для чтения или за- писи данного. Возможно выполнение операции на АЛУ. второй - выполнение операции на АЛУ и выборка следующей команды. 4.2.1. Операции с внешней локальной памятью. Данный класс двухтактных команд осуществляет операции с внешней па- мятью в диапазоне адресов от 0000Н до 001FН, т. е. первыми 32 словами памяти. Адрес ячейки памяти содержится в поле aaaaa кода команды "локальное чтение" 1100 fff 0с0 ;aa aaa такт 1 (aaaaa) => N => PS такт 2 T -fff- N => T " PS => N 1100 fff 0с1 ;aa aaa такт 1 (aaaaa) => N => PS такт 2 T -fff- N => T => N "локальная запись" 1101 fff 0с0 ;aa aaa такт 1 T => (aaaaa) такт 2 T -fff- N => T " PS => N 1101 fff 0c1 ;aa aaa такт 1 T => (aaaaa) такт 2 T -fff- N => T => N 4.2.2. Операции с 16-битным литералом. Данный класс команд содержит операнд в ячейке памяти, следующей за кодом команды. 1100 fff 1c0 ;xh hhh такт 1 (Literal) => N => PS такт 2 T -fff- N => T " PS => N 1100 fff 1c1 ;xh hhh такт 1 (Literal) => N => PS такт 2 T -fff- N => T => N 4.2.3. Операции с внешней глобальной памятью. Данный класс двухтактных команд осуществляет операции с внешней па- мятью в диапазоне адресов от 0000Н до FFFFН, т. е. со всей внешней па- мятью. Адрес ячейки памяти содержится в регистре Т. 1111 fff 0c0 ;0h hhh "чтение" такт 1 (Т) => N => Т такт 2 T -fff- N => T => N 1111 fff 0c0 ;1h hhh такт 1 (Т) => N => Т такт 2 T -fff- N => T " PS => N 1111 fff 0c1 ;dd ddd такт 1 (Т) => N => PS " T -fff- ddddd => T такт 2 нет операции 1111 fff 1c0 ;0h hhh "запись" такт 1 PS => N => (T) " N => T такт 2 T -fff- N => T => N 1111 fff 1c0 ;1h hhh такт 1 PS => N => (T) " N => T такт 2 PS => N " T -fff- N => T 1111 fff 1c1 ;dd ddd такт 1 PS => N => (T) " T -fff- ddddd => T такт 2 нет операции 4.3. Признаки операции. Как и во всех традиционных МП, выполнение операции на АЛУ в Форт-микропроцессоре приводит к установке признаков результата операции. К таким признакам относятся - триггер переноса С; - триггер нулевого результата в Т. К сожалению в МП нет прямого доступа к этим признакам, как, к приме- ру, к PSW в других МП. Однако признаки можно проанализировать косвенно. Признак нулевого результата можно проанализировать командой ветвле- ния "IF_T", признак переноса командой ветвления "IF_С", признак перепол- нения командой "IF_V". Используемый часто признак "знак результата" содержится в старшем бите регистра Т. Для анализа знака требуется один дополнительный такт DUP 0< размножение знака IF_T ветвление. Tаким образом можно проанализировать и другие, более сложные, признаки результата операции. 4.4. Потоковая обработка. МП поддерживает специальный режим выполнения команд, называемый "по- токовая обработка". Суть потоковой обработки состоит в циклическом (пов- торном) выполнении команды, которая была принята в регистр команд после установки "триггера потоковой обработки". Установка триггера выполняется командой REG! или REG@! когда бит "s"=1. В этом случае следующая за REG! (REG@!) команда будет выполняться в потоковом режиме. Количество повтор- ных выполнений команды определяется значением регистра I. В каждом такте осуществляется уменьшение I на 1 и проверка на равенство нулю. Потоковый режим выполнения для одно- и двухтактных команд различен. Для однотактных команд в начале каждого такта проверяется I. Если I не 0, он уменьшается на 1 и потоковый режим продолжается. При этом МП приостанавливает увеличение P и выборку следующей команды в конце так- та. Когда в начале такта I оказывается равным 0, МП производит выгрузку из стека возвратов, замещая I на новое значение. На этом потоковый режим завершается и продолжается обычное выполнение команд. Однотактная коман- да выполняется на два такта больше, чем значение счетчика в регистре I. Двухтактные команды начинают выполняться так же, как и однотактные, но в потоковом режиме выполняются только действия первого такта. При об- наружении в начале такта 0 в I стек возвратов выгружается и выполняются действия второго такта двухтактной команды. При том же значении I, двух- тактная команда будет выполняться столько же тактов, как и однотактная, но первый такт выполняется на 1 меньше, чем у однотактных команд, т. е. на 1 больше, чем значение в регистре I. Отметим, что поскольку установка триггера потоковой обработки блоки- рует наращивание счетчика команд, варианты использования команд с длин- ным литералом в потоковом режиме ограничены. ПРИЛОЖЕНИЕ Назначение выводов микросхемы Дофин-1620 -----T----------------T---------T-------T------------------------------¬ ¦ N ¦ N ¦ Имя ¦ Вх/ ¦ Функциональное ¦ ¦п/п ¦ к. п. ¦ вывода ¦ Вых ¦ назначение ¦ +----+----------------+---------+-------+------------------------------+ ¦ 1 ¦ 63 ¦ CLK ¦ Вх ¦ внешний сигнал синхронизации ¦ ¦ 2 ¦ 64 ¦ RESET ¦ Вх ¦ сброс ¦ ¦ 3 ¦ 62 ¦ WAIT ¦ Вх ¦ ожидание ¦ ¦ 4 ¦ 61 ¦ HOLD ¦ Вх ¦ захват шины памяти ¦ ¦ 5 ¦ 70 ¦ INT ¦ Вх ¦ прерывание ¦ ¦ 6 ¦ 69 ¦ IRQ0 ¦ Вх ¦ прерывание ¦ ¦ 7 ¦ 68 ¦ IRQ1 ¦ Вх ¦ прерывание ¦ ¦ 8 ¦ 67 ¦ IRQ2 ¦ Вх ¦ прерывание (захват шины GA) ¦ ¦ 9 ¦ 66 ¦ IRQ3 ¦ Вх ¦ прерывание (захват шины GD) ¦ ¦ 10 ¦ 65 ¦ RXD ¦ Вх ¦ вход данных приемника ¦ ¦ 11 ¦ 57 ¦ SUP ¦ Вх ¦ блокировка прерываний ¦ ¦ 12 ¦ 54 ¦ BOOD ¦ Вых ¦ начальная загрузка ¦ ¦ 13 ¦ 53 ¦ READY ¦ Вых ¦ готовность обмена ¦ ¦ 14 ¦ 52 ¦ MIO ¦ Вых ¦ строб обмена по шине D ¦ ¦ 15 ¦ 51 ¦ GIO ¦ Вых ¦ строб обмена по шине GD ¦ ¦ 16 ¦ 50 ¦ PCLK ¦ Вых ¦ выходной синхросигнал ¦ ¦ 17 ¦ 49 ¦ MR/W ¦ Вых ¦ чтение/запись по шине D ¦ ¦ 18 ¦ 48 ¦ GR/W ¦ Вых ¦ чтение/запись по шине GD ¦ ¦ 19 ¦ 47 ¦ MODE ¦ Вых ¦ режим работы ¦ ¦ 20 ¦ 46 ¦ NEW ¦ Вых ¦ выборка команды ¦ ¦ 21 ¦ 45 ¦ USER ¦ Вых ¦ выборка локальной памяти ¦ ¦ 22 ¦ 59 ¦ CLXD ¦ Вых ¦ синхронизация послед. обмена ¦ ¦ 23 ¦ 58 ¦ TXD ¦ Вых ¦ выход данных передатчика ¦ ¦ 24 ¦ 60 ¦ STEX ¦ Вых ¦ выбор внешнего стека ¦ ¦ 25 ¦ 42:27 ¦ A[15:0] ¦ Вых ¦ шина адреса памяти ¦ ¦ 26 ¦ 80-83,85-89 ¦ GA[8:0] ¦ Вых ¦ шина адреса стека ¦ ¦ 27 ¦ 9-17,19-25 ¦ D[15:0] ¦ Вх/Вых¦ шина данных памяти ¦ ¦ 28 ¦ 92-100,1-4,6-8 ¦ GD[15:0]¦ Вх/Вых¦ шина данных стека ¦ ¦ 29 ¦ 79:77,75:71 ¦ P[7:0] ¦ Вх/Вых¦ порт обмена ¦ +----+----------------+---------+-------+------------------------------+ ¦ 30 ¦5,26,43,55,76,91¦ GND ¦ ¦ общий ¦ ¦ 31 ¦18,44,56,84,90 ¦ VDD ¦ ¦ питание ¦ L----+----------------+---------+-------+------------------------------- Условно-графическое обозначение микросхемы Дофин-1620 ----------T--------------T---------¬ --+ CLK ¦ ¦ PCLK +-- --+ RESET ¦ ¦ BOOT +-- --+ WAIT ¦ ¦ READY +-- +---------+ ¦ MODE +-- --+ HOLD ¦ +---------+ +---------+ CPU ¦ MIO +-- --+ INT ¦ ¦ MR/W +-- --+ IRQ0 ¦ +---------+ --+ IRQ1 ¦ ¦ NEW +-- --+ IRQ2 ¦ ¦ USER +-- --+ IRQ3 ¦ +---------+ +---------+ ¦ A[15:0] +-- --+ SUP ¦ ¦ D[15:0] +-- +---------+ +---------+ --+ RXD ¦ ¦ GIO +-- +---------+ ¦ GR/W +-- ¦ ¦ ¦ STEX +-- ¦ ¦ +---------+ ¦ ¦ ¦ GA[8:0] +-- ¦ ¦ ¦ GD[15:0]+-- ¦ ¦ +---------+ ¦ ¦ ¦ CLXD +-- +---------+ ¦ TXD +-- --+ VDD ¦ +---------+ --+ GND ¦ ¦ P[7:0] +-- L---------+--------------+----------