Общая информация | |
---|---|
Запущен | 1977 ( 1977 ) |
Обычный производитель | |
Производительность | |
Макс. тактовая частота ЦП | до 250 кГц |
Ширина данных | 4 (ОЗУ), 8 (ПЗУ) |
Ширина адреса | 7 (ОЗУ), 11 (ПЗУ) |
Архитектура и классификация | |
Приложение | Встроенный |
Набор инструкций | КС400 |
Количество инструкций | 40 |
Физические характеристики | |
Упаковка |
|
История | |
Предшественник | MM5799 (PMOS COP) |
Преемник | КС8 |
COP400 или COP II — это семейство 4-битных микроконтроллеров, представленное в 1977 году компанией National Semiconductor в качестве последующего продукта для их оригинального микроконтроллера PMOS COP. [1] Члены семейства COP400 — это полноценные микрокомпьютеры, содержащие внутреннюю синхронизацию, логику, ПЗУ, ОЗУ и ввод-вывод, необходимые для реализации специализированных контроллеров. [2] Некоторые устройства COP400 были вторично получены компанией Western Digital как семейство WD4200. [3] [4] В Советском Союзе несколько микроконтроллеров COP400 выпускались как серия 1820 (например, COP402 с обозначением КР1820ВЕ1 ). [5]
COP400 реализован в технологии CMOS или N-канального кремниевого затвора MOS. Обычно он был упакован в 24- или 28-контактные DIP- корпуса. Время цикла инструкции более быстрых членов семейства составляет 4 микросекунды. Семейство COP400 предлагало несколько конфигураций памяти и выводов.
Известные продукты, в которых использовались чипы семейства COP400, включают Apple Lisa , электронные игры Milton Bradley и Mattel , баскетбольную приставку Coleco Head to Head, Grundy Newbrain и другие.
COP400 использует отдельные области памяти для ПЗУ и ОЗУ . Адреса ПЗУ имеют максимальную длину 11 бит, а адреса данных — максимальную длину 7 бит.
Память программ состоит из 512, 1024 или 2048 × 8-битного ПЗУ. Байты ПЗУ могут быть инструкциями программы, данными программы или указателями адреса перехода. Из-за особых характеристик, связанных с инструкциями JP и JSRP, ПЗУ часто следует рассматривать как организованную в страницы по 64 байта каждая. Кроме того, из-за уникальных операций, выполняемых инструкциями LQID и JID, страницы ПЗУ иногда следует рассматривать как организованные в блоки по 256 байт.
Память данных состоит из 32, 64 или 128 × 4-битной RAM, организованной как несколько регистров данных из 16 4-битных цифр. Адресация RAM реализуется 6- или 7-битным регистром B, используемым в качестве указателя. Верхние 2 или 3 бита регистра B (Br) выбирают один из 4 или 8 регистров данных, а нижние 4 бита (Bd) выбирают одну из 16 4-битных цифр в выбранном регистре данных. 4-битное содержимое цифры RAM, на которую указывает регистр B, обычно загружается в регистр A, обменивается с ним или работает с ним.
|
Конфигурация регистров, показанная на схеме, предназначена для членов семейства COP400 с максимальным объемом ПЗУ (2048 × 8 бит) и ОЗУ (128 × 4 бит). Члены семейства, имеющие только 512 или 1024 байт ПЗУ, будут иметь только 9- или 10-битный ПК. Те, у кого 64 или 32 ячейки ОЗУ, будут иметь только 2-битный регистр Br. Некоторые младшие члены семейства не имеют регистра стека SC. [6]
4-битный регистр A (аккумулятор) является исходным и целевым регистром для большинства арифметических, логических операций и операций доступа к памяти данных. Его также можно использовать для загрузки частей Br и Bd регистра B, для загрузки и ввода 4 бит 8-битных данных защелки Q, для ввода 4 бит 8-битного порта L и для выполнения обмена данными с регистром SIO.
4-битный АЛУ выполняет арифметические и логические функции, сохраняя результаты в A. Операции ASC и CASC выводят перенос в 1-битный регистр C, который чаще всего используется для индикации арифметического переполнения.
Вся адресация ПЗУ выполняется через 9-, 10- или 11-битный регистр PC. Его двоичное значение выбирает один из байтов, содержащихся в ПЗУ, обычно следующую инструкцию программы. Значение PC автоматически увеличивается на 1 перед выполнением текущей инструкции, чтобы указать на следующую последовательную ячейку ПЗУ, если только текущая инструкция не является инструкцией передачи управления. В последнем случае PC загружается соответствующим непоследовательным значением для реализации операции передачи управления. PC автоматически переходит к указанию на следующую 64-байтную страницу или 256-байтный блок памяти программы. Верхние 1, 2 или 3 бита PC также используются в инструкциях JID и LQID.
Три уровня подпрограммы реализуются регистрами сохранения подпрограммы SA, SB и SC, обеспечивая стек аппаратных подпрограмм «последним пришел, первым вышел» (LIFO). Некоторые реализации не имеют SC.
Нет номеров портов или адресов памяти, связанных с устройствами ввода-вывода COP400. Все физические регистры ввода-вывода и порты напрямую ссылаются на язык ассемблера COP400 по имени.
Почти все устройства семейства COP400 реализуют следующее: [6]
Есть несколько высококлассных членов семейства COP400, таких как COP440 и COP2440, которые имеют 40 контактов. Они имеют дополнительные регистры и порты: [7]
Семейство COP400 разработано для очень компактного кода. Все инструкции имеют длину один или два байта. Наиболее часто используемые инструкции имеют длину один байт. В некоторых случаях существуют специальные однобайтовые формы двухбайтовых инструкций. Некоторые функции, которые можно использовать для того, чтобы сделать объектный код более компактным, следующие:
Набор инструкций для семейства COP400 | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Код операции | Операнд | Мнемонический | Описание | Пропускать | |||||||
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | — | КЛРА | А ← 0 | — |
0 | 0 | 0 | б 0 | 0 | 0 | б 1 | 1 | — | СКМБЗ б | — | ОЗУ(Б) б = 0 |
0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | — | XOR | A ← A ⊻ ОЗУ(Б) | — |
0 | 0 | г | 0 | 1 | 0 | 0 | — | XIS г | А ↔ РАМ(Б), Бр ← Бр ⊻ р, Бд ← Бд + 1 | Бд = 0 | |
0 | 0 | г | 0 | 1 | 0 | 1 | — | ЛД р | A ← RAM(B), Br ← Br ⊻ r | — | |
0 | 0 | г | 0 | 1 | 1 | 0 | — | Х р | А ↔ РАМ(Б), Бр ← Бр ⊻ р | — | |
0 | 0 | г | 0 | 1 | 1 | 1 | — | XDS-р | А ↔ РАМ(Б), Бр ← Бр ⊻ р, Бд ← Бд - 1 | Бд = 15 | |
0 | 0 | г | 1 | г | — | LBI р,д | Бр ← г, Бд ← (д + 9) ^ 15 (Бр = 0-3, Бд = 9-15, 0) | следующий LBI | |||
0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | — | КАСК | A ← ~A + RAM(B) + C, C ← Перенос | С = 1 |
0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | — | XABR | А ↔ Бр, А 3 ← 0 | — |
0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | — | СКЦ | — | С = 1 |
0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | — | СКЕ | — | А = ОЗУ(Б) |
0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | — | СК | С ← 1 | — |
0 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 0rrrdddd | ЛДД р,д | A ← ОЗУ(р,д) | — |
0 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 1рррддд | XAD г,д | А ↔ RAM(р,д) | — |
0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | — | АСК | A ← A + RAM(B) + C, C ← Перенос | С = 1 |
0 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | — | ДОБАВЛЯТЬ | A ← A + ОЗУ(Б) | — |
0 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | — | РК | С ← 0 | — |
0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | код операции | Префикс 33H | Инструкции с этим префиксом см. в таблице ниже. | — |
0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | — | КОМП | А ← ~А | — |
0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | — | СКТ | Пропустить при переполнении таймера | таймер |
0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | — | 2 юаня | ОЗУ(Б) 2 ← 0 | — |
0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | — | 3 юаня | ОЗУ(Б) 3 ← 0 | — |
0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | — | НОП | Нет операции | — |
0 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | — | 1 юань | ОЗУ(Б) 1 ← 0 | — |
0 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | — | МСБ 2 | ОЗУ(Б) 2 ← 1 | — |
0 | 1 | 0 | 0 | 0 | 1 | 1 | 1 | — | МСБ 1 | ОЗУ(Б) 1 ← 1 | — |
0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | — | РЕТ | Поп ПК (ПК ← SA, SA ← SB, SB ← SC) | — |
0 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | — | РЕТСК | Поп-ПК | всегда |
0 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | — | АДТ | А ← А + 10 | — |
0 | 1 | 0 | 0 | 1 | 0 | 1 | 1 | — | МСБ 3 | ОЗУ(Б) 3 ← 1 | — |
0 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | — | 0 юаней | ОЗУ(Б) 0 ← 0 | — |
0 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | — | МСБ 0 | ОЗУ(Б) 0 ← 1 | — |
0 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | — | ЦБ | А ← Бд | — |
0 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | — | XAS | А ↔ СИО, СК ← С | — |
0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | — | ТАКСИ | Бд ← А | — |
0 | 1 | 0 | 1 | у | — | AISC г | A ← A + y (1 ≤ y ≤ 15, C неизменен) | нести | |||
0 | 1 | 1 | 0 | 0 | аддхи | добавить | СПМ а | ПК[10:8] ← addhi, ПК[7:0] ← addlo | — | ||
0 | 1 | 1 | 0 | 1 | аддхи | добавить | JSR а | Нажмите ПК, ПК[10:8] ← addhi, ПК[7:0] ← addlo | — | ||
0 | 1 | 1 | 1 | у | — | СТИИ у | RAM(B) ← y, Bd ← Bd + 1 | — | |||
1 | 0 | адрес | — | JSRP а | Если PC[10:6] ≠ 00010: Нажмите PC, PC[10:6] ← 00010, PC[5:0] ← адрес | — | |||||
1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | — | LQID | Q ← ПЗУ(ПК[10:8], А, ОЗУ(Б)), SC ← СБ | — |
1 | 1 | адрес | — | JP а | Если PC[10:6] ≠ 00010: PC[5:0] ← адрес | — | |||||
1 | адрес | — | JP а | Если PC[10:7] = 0001: PC[6:0] ← адрес | — | ||||||
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | — | JID | ПК[7:0] ← ПЗУ(ПК[10:8], А, ОЗУ(Б)) | — |
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Операнд | Мнемонический | Описание | Пропускать |
коды операций с префиксом 33H | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
Код операции | Мнемонический | Описание | Пропускать | Типы поддерживается | ||||||||
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |||||
0 | 0 | 0 | б 0 | 0 | 0 | б 1 | 1 | СКГБЗ б | — | Г б = 0 | Все | |
0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | КСАН | А[1:0] ↔ Н, А[2:3] ← 0 | — | 3 | |
0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | CEMA | RAM(B) ← EN[7:4], A ← EN[3:0] | — | 3 | |
0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | КРЫШКА | ОЗУ(Б), А ← ПЗУ(ПК[10:8], А, ОЗУ(Б)) | — | 3 | |
0 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | ИЛИ | А ← А ∨ ОЗУ(Б) | — | 3 | |
0 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | СКСЗ | — | СИО = 0 | 3 | |
0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | ПРИШЕЛ | EN[7:4] ← A, EN[3:0] ← RAM(B) | — | 3 | |
0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | СКГЗ | — | Г = 0 | Все | |
0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | ИНИН | А ← В | — | 2, 3 | |
0 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | ИНИЛ | A ← IL 3 , 1, 0, IL 0 или A ← IL 3 , CKO, 0, IL 0 | — | 2, 3 | |
0 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | ИНГ | А ← Г | — | Все | |
0 | 0 | 1 | 0 | 1 | 0 | 1 | 1 | ИНГ | А ← Н | — | 3 | |
0 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | CQMA | RAM(B) ← Q[7:4], A ← Q[3:0] | — | 2, 3 | |
0 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | индийская рупия | RAM(B) ← R[7:4], A ← R[3:0] | — | 3 | |
0 | 0 | 1 | 0 | 1 | 1 | 1 | 0 | ИНЛ | RAM(B) ← L[7:4], A ← L[3:0] | — | Все | |
0 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | CTMA | RAM(B) ← T[7:4], A ← T[3:0] | — | 3 | |
0 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | ОСТАНОВИТЬ | Остановить операцию | — | КМОП | |
0 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | ЭТО | Остановитесь, пока таймер не переполнится | — | КМОП | |
0 | 0 | 1 | 1 | 1 | 0 | 1 | 0 | МОЙ БОГ | G ← ОЗУ(Б) | — | Все | |
0 | 0 | 1 | 1 | 1 | 0 | 1 | 1 | ОМХ | H ← ОЗУ(Б) | — | 3 | |
0 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | CAMQ | Q[7:4] ← A, Q[3:0] ← ОЗУ(Б) | — | Все | |
0 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | КАМР | R[7:4] ← A, R[3:0] ← ОЗУ(Б) | — | 3 | |
0 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | БД | Д ← Бд | — | Все | |
0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | КАМТ | T[7:4] ← A, T[3:0] ← RAM(B) | — | 3 | |
0 | 1 | 0 | 1 | у | ОГИ у | Г ← у | — | 2, 3 | ||||
0 | 1 | 1 | 0 | у | ЛЕЙ у | RU ← y | — | Все | ||||
1 | г | г | LBI р,д | Бр ← р, Бд ← г | следующий LBI | 2, 3 | ||||||
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Мнемонический | Описание | Пропускать | Типы поддерживается |
Поддерживаемые типы: Тип 1 — очень бюджетный, например COP410. Тип 2, например COP420, является наиболее распространенным. Тип 3 обычно имеет ресурсы для поддержки 40 контактов, даже если корпус не имеет 40 контактов. Тип 4 не показан, поскольку нет никаких доказательств того, что тип 4 производился. CMOS включает COP424C, COP425C, COP426C, COP444C, COP445C, COP404C.
В этом примере кода демонстрируется несколько функций экономии места в наборе инструкций:
040 09 041 19 042 2Ф 043 15 044 14 045 С3 046 48 | ; Копирование блока памяти из одного места в другое. ; ; Существует три точки входа: copyA, copyB и copyC. ; Значения инструкций LBI выражаются как ; LBI Br, Bd. ; copyA: LBI 0 , 10 ;Копирование 6 полубайтов, начиная с 0,10 по 1,10 copyB: LBI 1 , 10 ;Копирование 6 полубайтов, начиная с 1,10 по 0,10 copyC: LBI 2 , 0 ;Копирование 16 полубайтов, начиная с 2,0 по 3,0 loop: LD 1 ;Загрузить src в A. XOR Br с 1, чтобы получить dest XIS 1 ;Сохранение A в dest. Inc Bd. XOR Br с 1, чтобы получить src JP loop ;цикл, пока Bd не пройдет последнюю цифру RET |
Ранние устройства COP400, имеющие 28 контактов или более, поддерживают одно прерывание . Линия IN 1 используется в качестве входа прерывания. Прерывание включается установкой бита 1 регистра EN в 1 с помощью инструкции LEI. В ответ на низкоуровневый импульс длиной не менее двух циклов инструкций на IN 1 завершаются все передачи инструкций управления, таких как JP, и выполняются все последовательные инструкции LBI. Затем PC помещается в стек подпрограмм, и управление передается обработчику прерываний по адресу 0xFF. В подпрограмме обслуживания прерываний на устройствах с аппаратным стеком нельзя вызывать подпрограммы. [6] Любопытно, что более поздние устройства, такие как COP440, поддерживают четыре источника прерываний и две подпрограммы обслуживания, но одновременно можно выбрать только один источник прерывания. Подпрограммы поддерживаются внутри подпрограмм обслуживания прерываний на устройствах с указателем стека.
Хотя большинство устройств COP400 были нацелены на низкоуровневые приложения, было создано несколько расширений архитектуры для решения более требовательных приложений. К 1985 году к некоторым устройствам были добавлены двойной ЦП, более глубокий стек в ОЗУ и большие адресные пространства. [7]
|
Версии COP400 с «Dual CPU» были анонсированы National Semiconductor в 1981 году. Эти однокристальные процессоры-баррели содержат два якобы независимых CPU, которые совместно используют инструкции, память и большинство устройств ввода-вывода. На самом деле CPU не являются полностью независимыми и совместно используют аппаратные ресурсы, аналогичные процессорам Intel с технологией Hyper-Threading (HTT). Как и HTT, версия с двумя CPU работает путем дублирования определенных разделов процессора — тех, которые хранят архитектурное состояние , — но не дублирования основных ресурсов выполнения, таких как ALU , шины и память. Отдельные архитектурные состояния для каждого из двух виртуальных процессоров устанавливаются с дублированными A (аккумуляторами), B (регистрами указателей), C (флагами переноса), N (указатели стека) и PC (счетчиками программ). [6]
Когда сброс отменяется, оба процессора начинают работу с ячейки 0, содержащей инструкцию CLRA, затем один процессор переходит к ячейке 401 (шестнадцатеричная), после чего второй процессор на один цикл инструкций выполняет ячейку 1. Затем процессоры поочередно выполняют по одному байту кода каждый.
При максимальной тактовой частоте время выполнения инструкции (однобайтовой инструкции) для каждого процессора составляет 4 микросекунды, следовательно, время цикла инструкции для любого процессора в два раза больше и составляет 8 микросекунд.
Некоторые версии с двумя ЦП включают 40-контактный COP2440N, 28-контактный COP2441N и 24-контактный COP2442N.
Ранние устройства COP400 включали двух- или трехуровневый выделенный аппаратный стек возврата. Более поздние устройства, такие как COP440, имеют 4-уровневый стек возврата, реализованный с 2-битным указателем стека и ОЗУ. Версии с двумя ЦП имеют два отдельных 4-уровневых стека возврата, реализованных с двумя 2-битными указателями стека и двумя различными областями ОЗУ.
Базовый набор инструкций COP400 поддерживает адреса ПЗУ до 11 бит (2048 байт), в то время как адреса данных составляют максимум 7 бит (128 ячеек). Так называемые устройства группы 4 расширили предел памяти, добавив трехбайтовые инструкции JMP, JSR и LBI с большим количеством адресных бит. Они поддерживают адреса ПЗУ максимум 15 бит (32 768 байт), в то время как адреса данных составляют максимум 9 бит (512 ячеек). Устройства, которые поддерживают эти инструкции, включают COP408, COP484, COP485, C0P409. Неясно, были ли произведены какие-либо из этих устройств группы 4.
T400 μController — это реализация микроконтроллера COP400 с открытым исходным кодом, написанная на VHDL . Поддерживаются устройства COP420/421 и COP410L/411L. T400 предназначен для замены оригинального чипа в SOC, воссоздающих устаревшие системы. T400 был реализован в нескольких семействах FPGA . T400 доступен по лицензии GNU General Public License . [13]
Существует эмулятор MAME с открытым исходным кодом для семейства COP400, а также несколько портативных игр и специализированных калькуляторов. [14] [15]