К1801ВМ1

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

Микросхема К1801ВМ1 — однокристальный 16-разрядный микропроцессор (ОМП), предназначен для обработки цифровой информации в системах управления тех. процессами в контрольно — измерительной аппаратуре и системах связи, а также решения в составе ЭВМ инженерно — технических и экономических задач. Архитектура К1801ВМ1 очень близка к архитектуре PDP-11 и в большинстве случаев совместима с ней, но не является её точной копией.

Состав микросхемы[править | править вики-текст]

Снимок кристалла К1801ВМ1

В состав микросхемы входят следующие основные функциональные блоки:

  • 16-разрядный операционный блок, выполняющий операции формирования адресов команд и операндов, логические и арифметические, хранения операндов и результатов.
  • Блок микропрограммного управления, вырабатывающий последовательность микрокоманд на основе кода принятой команды. В нём закодирован полный набор микрокоманд для всех типов команд.
  • Блок прерываний, организующий приоритетную систему прерываний ОМП. Выполняет приём и предварительную обработку внешних и внутренних запросов на прерывание вычислительного процесса.
  • Интерфейсный блок, выполняющий обмены информацией между ОМП и устройствами, расположенными на системной магистрали. Осуществляет арбитраж при операциях прямого доступа к памяти. В интерфейсном блоке формируется последовательность управляющих сигналов системной магистрали.
  • Блок системной магистрали, связывающей внутреннюю магистраль ОМП с внешней. В нём производится управление усилителями приёма и выдачи информации на совмещённые выводы адресов и данных.
  • Схема тактирования, обеспечивающая синхронизацию внутренних блоков.

См. Раздел: Структурная схема

Основные параметры[править | править вики-текст]

Разрядность: 16 двоичных разрядов

Представление чисел: Доп. код с фиксированной запятой

Система команд: Безадресная, Одноадресная, Двухадресная

Виды адресации: Регистровая, Косвенно — регистровая, Автоникрементная, Косвенно Автоникрементная, Косвенно автодекрементная, Индексная, Косвенно индексная

Число регистров общего назначения (РОН): 8

Число линий запросов на прерывания: 4

Системная магистраль: Типа МПИ с совмещёнными шинами для передачи адреса и данных

Адресное пространство: 64К байт

Тактовая частота: От 100 кГц до 5 МГц

Максимальное быстродействие выполнения команд сложения в составе ЭВМ при регистровом методе адресации: До 500 тыс. операций/с

Потребляемая мощность: До 1,2 Вт

Назначение выводов[1][править | править вики-текст]

Вывод Обозначение Тип вывода Функциональное назначение выводов
1 CLC Вход Синхронизация
2 SACK Вход/выход Подтверждение захвата ПДП
3 DMGI Вход Вход предоставления ПДП
4 DMGO Выход Выход предоставления ПДП
5 DMR Вход Требование ПДП
6 SP Вход Недокументированная функция — внешний источник частоты для таймера[2]. Соединить с +5V
7 SEL1 Выход Выборка первого регистра ввода-вывода
8 SEL2 Выход Выборка второго регистра ввода-вывода
9-20, 22-25 AD0-AD15 Вход/Выход Разряды адреса данных
21 GND - Общий
26 PA1 Вход Номер процессора
27 PA0 Вход Номер процессора
28 BSY Выход Сигнал занятости канала
29 DCLO Вход Авария источника питания
30 ACLO Вход Авария сетевого питания
31 IRQ1 Вход Первый запрос радиального прерывания «Пульт»
32 IRQ2 Вход Второй запрос радиального прерывания (вектор 100)
33 IRQ3 Вход Третий запрос радиального прерывания (вектор 270)
34 INIT Вход/Выход Установка исходного состояния
35 VIRQ Вход Требование векторного прерывания
36 IAKO Выход Предоставление прерывания
37 DOUT Выход Вывод данных (запись данных)
38 DIN Выход Ввод данных (чтение данных)
39 RPLY Вход/Выход Синхронизация пассивного устройства (ответ)
40 WTBT Выход Вывод байта (запись/байт)
41 SYNC Выход Синхронизация активного устройства (обмен)
42 Ucc - Напряжение Питания

Подробное описание выводов[править | править вики-текст]

Структурная схема[править | править вики-текст]

    1          34        30    29    35    31    32    33
    |           |         |     |     |     |     |     |
 CLC|           |     ACLO| DCLO| VIRQ| IRQ1| IRQ2| IRQ3|
    |       INIT|         |     |     |     |     |     |
   \|/          |        \|/   \|/   \|/   \|/   \|/   \|/
    |          \|/        |     |     |     |     |     |
|___|___|      /|\      |_|_____|_____|_____|_____|_____|_|
|схема  |       |       |              Блок               |
|такти- |       |       |           Прерываний            |
|рования|       |       |_______________|_________________|
|___|___|       |                       |
    |           |                      /|\
   /|\          |                       |
    |           |                       |
    |___________________________________|____________________________________
                        |                    |          |           |
                |      \|/                  \|/         |          \|/
                |       |                    |          |           |
       |________|_______|________|  |________|________| |    |______|_____|
       | Блок микропрограммного  |  |  Операционный   | |    |            | IAKO
       |       управления        |  |      Блок       | |    |            -->>>--36
       |___________|_____________|  |________|________| |    |            |
                   |                         |          |    |            | SP
                  \|/                       \|/         |    |            --<<<--27
                  /|\                       /|\         |    |            |
                   |                         |          |    |            | SP
                   |____________|____________|          |    |            -->>>--26
                                |                       |    |            |
                               \|/                      |    |            | RPLY
                                |                       |    |            --<<<--39
                  |_____________|_____________|         |    |            |
                  |                           |         |    |            | SYNC
                  |          Системная        ----<<<---|    |            -->>>--41
                  |          магистраль       |              |            |
                  |                           ----<<<---------            | DOUT
                  |_|_______|_______|_______|_|              | бЛОК       -->>>--37
                    |       |       |       |                | управления |
                   \|/     \|/     \|/     \|/               | системной  | DIN
                   /|\     /|\     /|\     /|\               | магистралью-->>>--38
                    |       |       |       |                | и          |
                 AD0|   AD11|   AD12|   AD15|                | регистрами | WTBT
                    |-------|       |-------|                | ввода\     -->>>--40
                    |       |       |       |                | вывода     |
                                                             |            | DMR
                                                             |            --<<<--5
                                                             |            |
                                                             |            | SACK
                                                             |            --<<<--2
                                                             |            |
                                                             |            | DMGO
                                                             |            -->>>--4
                                                             |            |
                                                             |            | SP
                                                             |            --<<<--3
                                                             |            |
                                                             |            | SEL1
                                                             |            -->>>--7
                                                             |            |
                                                             |            | SEL2
                                                             |            -->>>--8
                                                             |            |
                                                             |            | BSY
                                                             |            -->>>--28
                                                             |____________|

Команды[править | править вики-текст]

Код команды указан восьмеричным числом. Именно такой вид удобен для наглядного восприятия команд данного процессора.

Обозначение команды Код команды Команда
HALT 000000 Остановка
WAIT 000001 Ожидание
RTI 000002 Возврат из прерывания
BPT 000003 Командное прерывание для отладки
IOT 000004 Командное прерывание для ввода-вывода
RESET 000005 Сброс внешних устройств
RTT 000006 Возврат из прерывания
JMP 0001DD Безусловный переход по абсолютному адресу, закодированному в DD. Например последовательность
000137  JMP @#7000
007000

указывает процессору взять адрес из ячейки, следующей за командой перехода, и перейти по указанному адресу (в данном случае это восьмеричный адрес 7000).

RTS 00020R Возврат из подпрограммы
JSR 004RDD Обращение к подпрограмме
EMT 104000-104377 Командное прерывание для системных программ. Например, EMT 16 имеет код 104016. Для всех EMT-команд прерывание имеет один и тот же вектор, по адресу которого должна находиться подпрограмма, выделяющая номер (в нашем примере это 16) из команды и находящая по зашитой в ПЗУ таблице адрес подпрограммы, обслуживающей конкретную EMT-команду.
TRAP 104400-104777 Командное прерывание. Например, TRAP 4 имеет код 104404. Для всех TRAP-команд прерывание имеет один и тот же вектор, по адресу которого должна находиться подпрограмма, выделяющая номер (в нашем примере это 4) из команды и находящая по зашитой в ПЗУ таблице адрес подпрограммы, обслуживающей конкретную TRAP-команду.

Никакой принципиальной разницы между EMT и TRAP нет. Принято команду ЕМТ использовать в системных программах (для компьютера БК - это монитор и система диагностики), а команду TRAP - в программах пользователя.

NOP 000240 (10100000) Нет операции
CLC 000241 (10100001) Очистка флага С (carry = перенос)
CLV 000242 (10100010) Очистка флага V (oVerflow = переполнение)
CLZ 000244 (10100100) Очистка флага Z (zero = ноль)
CLN 000250 (10101000) Очистка флага N (negative = отрицательное значение)
CCC 000257 (10101111) Очистка всех разрядов
SEC 000261 (10110001) Установка флага C (carry = перенос)
SEV 000262 (10110010) Установка флага V (oVerflow = переполнение)
SEZ 000264 (10110100) Установка флага Z (zero = ноль)
SEN 000270 (10111000) Установка флага N (negative = отрицательное значение)
SCC 000277 (10111111) Установка всех разрядов
Фактически вышеприведённые команды с кодами от 240 до 277 это одна команда изменения флагов в слове состояния процессора:

101PNZVC

где:
101xxxxx - код команды
P - операция над флагами: 0 = сброс, 1 = установка
N,Z,V,C - единица в соответствующем разряде означает, что операция затронет данный флаг, ноль означает, что на данный флаг операция не будет иметь никакого влияния.

Например:
263 10110011 Установка одновременно и флага C, и флага V.

NOP (240) это частный случай данной команды, когда не затрагивается ни один флаг.
Также есть ещё один вариант NOP:
260 10110000 NOP

SWAB 0003DD Перестановка байтов местами в 16-разрядном слове, на которое указывает значение DD.
BR 000400 Безусловный переход по смещению относительно ячейки, следующей за командой. Например, код 000400 означает переход на ячейку, следующую за командой BR, код 000401 — перепрыгнуть через одну 16-разрядную ячейку, 000402 — через две и т. д. Строго говоря, эту команду и все команды перехода по смещению, лучше рассматривать в двоичном или шестнадцатиричном виде. Тогда она будет иметь вид 1NNNNNNNN(bin) или 1NN(hex), где N — значение смещения. То есть команда записывается в старшем байте слова, а смещение — в младшем. Отрицательные значения смещения записываются в дополнительном коде. Это значит, что смещение −1 будет закодировано как FF (hex), и команда будет иметь вид 1FF (hex) или, что то же самое, 777 (oct). При коде 777 будет произведён переход на одну 16-разрядную ячейку назад, то есть на саму команду BR, и произойдёт зацикливание. При коде 776 — на 2 ячейки назад, 775 — на три. и т. д.
BNE 001000 Переход по смещению, если не равно. Код команды — 2NN (hex) — см. описание команды BR. Переход срабатывает, если флаг Z процессора равен 0.
Адрес   Команда        Текст программы на ассемблере
1000:  020104                 CMP R1,R4
1002:  001001                 BNE MET
1004:  010102                 MOV R1,R2
1006:  010103          MET:   MOV R1,R3

Здесь команда сравнения CMP производит сравнение содержимого регистров общего назначения R1 и R4 и устанавливает флаги процессора C, V, Z, N согласно результатам сравнения, а команда BNE осуществляет переход на +1 шестнадцатиразрядное слово вперёд, если флаг Z=0.

CLR(B) *050DD Очистка битов слова, на которое указывает DD. Команда 0050DD имеет мнемонику CLR, а 1050DD мнемонику CLRB.
COM(B) *051DD Инвертирование битов слова, на которое указывает DD.
INC(B) *052DD Прибавление 1 в слове, на которое указывает DD.
DEC(B) *053DD Вычитание 1 из слова, на которое указывает DD.
NEG(B) *054DD Изменение знака
ADC(B) *055DD Прибавление переноса
SBC(B) *056DD Вычитание переноса
TST(B) *057DD Проверка слова и установка флагов процессора C, V, Z, N по результатам такой проверки.
ROR(B) *058DD Циклический сдвиг вправо
ROL(B) *059DD Циклический сдвиг влево
ASR(B) *060DD Арифметический сдвиг вправо
ASL(B) *061DD Арифметический сдвиг влево
MARK *062DD Восстановление указателя стека (УС)
SXT *063DD Расширение знака
MTPS 0061NN Запись слова состояния процессора (ССП)
MFPS 0067DD Чтение ССП
MOV(B) *1SSDD Пересылка
CMP(B) *2SSDD Сравнение
BIT(B) *3SSDD Проверка разрядов
BIC(B) *4SSDD Очистка разрядов
BIS *5SSDD Логическое сложение
XOR 074RDD Исключающее ИЛИ
ADD 06SSDD Сложение
SUB 16SSDD Вычитание
BR 0004XXX Ветвление безусловное
BNE 0010XXX Ветвление, если не равно 0
BEQ 0014XXX Ветвление, если равно 0
  •  — на месте звёздочки может быть либо ноль, либо единица. Соответственно, при 0 команда работает с 16-разрядными словами, при 1 — с 8-разрядными (байтами). При байтовой команде берётся младший байт 16-разрядного машинного слова.

Методы адресации[править | править вики-текст]

Операнд задаётся значениями SS (source — источник) и DD (destination — приёмник), при этом первая цифра задаёт режим адресации, а вторая — номер регистра общего назначения (РОН) у процессора. Например, если SS=27, то здесь 2 это метод адресации, а 7 — номер регистра.

Процессор имеет 8 шестнадцатиразрядных РОН: R0, R1, R2….R7. При этом R0-R5 используются для хранения операндов команд.

R6 является указателем стека (SP, Stack Pointer) и содержит адрес вершины стека. При каждой записи в стек, значение SP уменьшается, при затребовании значения из стека SP увеличивается. На использование SP рассчитаны специальные команды, такие как RTI.

Регистр R7 обозначается «PC» (Program Counter — счётчик команд) содержит адрес следующей команды, котроую должен выполнить процессор. Запись числа в регистр R7 равносильна переходу по указанному адресу.

Методы адресации:

Цифра Метод Пояснение Примеры
0 Регистровый Операндом является содержимое регистра. Например, команда 10304 (1SSDD) копирует содержимое регистра R3 в регистр R4 и записывается как MOV R3, R4. 10102 MOV R1, R2
1 Косвенно-регистровый Регистр содержит адрес операнда 005011 CLR (R1)

005011 CLR @R1

2 Автоинкрементный регистр содержит адрес операнда. Содержимое регистра после его использования в качестве адреса увеличивается на 2 (для команд над словами) или на 1 (для байтовых команд) 005022 CLR (R2)+
3 Косвенно-автоинкрементный регистр содержит адрес адреса операнда. Содержимое регистра после его использования в качестве адреса увеличивается на 2 005032 CLR @(R2)+
4 Автодекрементный содержимое регистра уменьшается на 2 (для команд над словами) или на 1 (для байтовых команд) и используется как адрес операнда 005042 CLR -(R2)
5 Косвенно-автодекрементный содержимое регистра уменьшается на 2 и используется как адрес адреса операнда. 005052 CLR @-(R2)
6 Индексный содержимое регистра складывается с числом, записанным после команды, и полученная сумма используется в качестве адреса операнда 005062 CLR 2(R2)

000002

7 Косвенно-индексный содержимое регистра складывается с числом, записанным после команды и полученная сумма используется в качестве адреса адреса операнда 005072 CLR @22(R2)

000022

При адресации через регистр РС данные способы адресации называются специальным образом:

Способ адресации Код Пояснение Примеры
непосредственный 27 Операнд хранится в слове, следующем за командой. Фактически это автоинкрементный способ адресации с использованием регистра PC, т.е. PC содержит адрес операнда, а это всегда адрес ячейки, следующей за командой. После происходит инкремент регистра на 2, что в случае использования PC равносильно "перепрыгиванию" на следующий адрес, через ячейку с данными, и число, хранящееся в ней, не исполняется как команда. 012703 MOV #21, R3

000021

012700 MOV #IN,R0

xxxxxx IN:

абсолютный 37 адрес операнда хранится в слове, следующем за командой CLR @#7000

JMP @#BEN

относительный 67 содержимое РС складывается со словом, записанным в памяти за командой, и полученная сумма используется как адрес операнда. JMP TV

CLR 5554

косвенно-относительный 77 содержимое РС складывается со словом, следующим за командой, полученная сумма используется как адрес адреса операнда. CLR @MET

INC @15342

См. также[править | править вики-текст]

Примечания[править | править вики-текст]