Intel 8237
Intel 8237 — это программируемый контроллер прямого доступа к памяти (ПДП, DMA — Direct Memory Access), выпускавшийся корпорацией Intel с 1978 года. Предназначен для организации высокоскоростной передачи данных между периферийными устройствами и оперативной памятью (ОЗУ) или между двумя областями ОЗУ без участия центрального процессора (ЦП). Микросхема является ключевым компонентом архитектуры IBM PC/XT и совместимых с ней компьютеров, а также широко использовалась в различных встраиваемых системах и микроконтроллерных устройствах 8- и 16-битной эпохи.
История
Разработка Intel 8237 была связана с необходимостью разгрузить ЦП от операций копирования данных, которые занимали значительную часть процессорного времени. В 1970-е годы, с ростом производительности микропроцессоров (например, Intel 8080, 8085, 8086) и объёмов подключаемых периферийных устройств (дисководы, принтеры, терминалы), стало очевидно, что передача каждого байта через ЦП является узким местом. Intel предложила решение в виде специализированной микросхемы — контроллера DMA, которая могла бы самостоятельно управлять шиной памяти.
Первая версия, Intel 8237, была выпущена в 1978 году и работала на частоте до 3 МГц. В 1981 году, при создании IBM PC, был выбран усовершенствованный вариант — Intel 8237A-5, работавший на частоте 5 МГц. Именно эта модификация стала стандартом де-факто для IBM PC/XT и последующих моделей. В IBM PC/AT (1984) использовались два каскадно-соединённых контроллера 8237A, что обеспечивало семь каналов DMA (один канал использовался для каскадирования). Вплоть до середины 1990-х годов контроллеры, совместимые с 8237, оставались частью чипсетов материнских плат для процессоров x86, хотя с появлением шин PCI и AGP их роль в передаче данных между периферией и памятью постепенно уменьшилась.
Архитектура и устройство
Intel 8237 представляет собой 40-выводную микросхему в корпусе DIP (Dual In-line Package). Основные функциональные блоки:
- Четыре независимых канала DMA. Каждый канал имеет собственные регистры: адреса (16-битный), счётчика слов (16-битный), режима, статуса и маски. Каналы могут работать независимо друг от друга, но одновременно активным может быть только один канал (арбитраж осуществляется по фиксированному или циклическому приоритету).
- Регистры управления и состояния. Общий регистр управления (Command Register) задаёт режимы работы: разрешение/запрет DMA, приоритет каналов, тип синхронизации, режим сжатия (compressed timing) и т.д. Регистр статуса (Status Register) содержит флаги завершения передачи и запросов DMA для каждого канала.
- Схема арбитража. Определяет, какой из каналов, запросивших передачу, получит управление шиной. Режимы приоритета: фиксированный (канал 0 — наивысший, канал 3 — низший) или циклический (после обслуживания канал получает низший приоритет).
- Интерфейс системной шины. Включает линии адреса (A0–A3, A4–A7, A8–A15), данных (D0–D7), управления (IOR, IOW, MEMR, MEMW, CLK, RESET, CS, HLDA, HRQ, DREQ0–DREQ3, DACK0–DACK3, EOP, READY, AEN).
Режимы работы
Контроллер поддерживает четыре основных режима передачи данных:
- Режим одиночной передачи (Single Transfer Mode). После каждого переданного байта контроллер освобождает шину, передавая управление ЦП. Затем, если запрос от периферии сохраняется, цикл повторяется. Этот режим позволяет ЦП выполнять инструкции между передачами, что снижает задержки.
- Блочный режим (Block Transfer Mode). Контроллер захватывает шину на всё время передачи блока данных (до 65536 байт). ЦП блокируется до завершения передачи. Обеспечивает максимальную скорость, но полностью останавливает работу ЦП.
- Режим по требованию (Demand Transfer Mode). Аналогичен блочному, но передача приостанавливается, если периферийное устройство снимает сигнал запроса (DREQ). После восстановления запроса передача продолжается с прерванного места. Используется для устройств с непостоянной готовностью данных (например, дисководы).
- Каскадный режим (Cascade Mode). Используется для объединения нескольких контроллеров 8237. В этом режиме один контроллер (ведущий) подключает к себе другой (ведомый), который управляет своими четырьмя каналами. Ведущий в этом режиме не передаёт данные, а только передаёт управление ведомому.
Типы передачи
- Память-память (Memory-to-Memory). Позволяет копировать данные из одной области ОЗУ в другую. Для этого используются два канала: канал 0 (источник) и канал 1 (приёмник). Скорость передачи ниже, чем при работе с периферией, так как требуется два цикла чтения/записи на один байт.
- Периферия-память (I/O-to-Memory). Данные из порта ввода-вывода записываются в память.
- Память-периферия (Memory-to-I/O). Данные из памяти передаются в порт ввода-вывода.
- Периферия-периферия (I/O-to-I/O). Технически возможна, но практически не используется.
Адресация и счётчик
Каждый канал имеет 16-битный регистр адреса (адресует до 64 КБ памяти) и 16-битный счётчик слов (максимальный размер блока — 65536 байт). При передаче данных адрес может автоматически увеличиваться или уменьшаться (режим инкремента/декремента). Счётчик слов уменьшается после каждой передачи, и при достижении нуля формируется сигнал конца передачи (EOP — End of Process).
Применение
В IBM PC/XT
В IBM PC 5150 (1981) использовался один контроллер Intel 8237A-5, обеспечивающий четыре канала DMA:
- Канал 0 — для регенерации динамической памяти (DRAM). В IBM PC/XT этот канал использовался для автоматической регенерации, хотя в более поздних системах эту функцию выполняли отдельные схемы.
- Канал 1 — для контроллера дисковода (FDC).
- Канал 2 — для контроллера жёсткого диска (HDD) или, в некоторых конфигурациях, для других устройств.
- Канал 3 — для контроллера параллельного порта (LPT) или других периферийных устройств.
В IBM PC/AT (1984) были установлены два контроллера, каскадно соединённые. Второй контроллер (каналы 4–7) обслуживал 16-битные устройства (например, дисководы и жёсткие диски с 16-битным интерфейсом), а первый (каналы 0–3) — 8-битные. Канал 4 использовался для каскадирования, поэтому фактически доступными были семь каналов.
В других системах
Intel 8237 и его клоны (например, КР580ВТ57 в СССР) применялись в:
- Микрокомпьютерах на базе Z80, 8080, 8085.
- Встраиваемых системах (промышленные контроллеры, измерительные приборы).
- Некоторых моделях домашних компьютеров (например, Commodore 128, Amstrad CPC).
- Периферийных контроллерах (например, для управления дисководами, принтерами, сканерами).
Ограничения
- 16-битная адресация (только 64 КБ памяти). Для работы с памятью объёмом более 64 КБ требовались дополнительные схемы (например, страничные регистры, как в IBM PC/AT).
- Отсутствие поддержки 32-битной адресации и 32-битных данных, что ограничивало применение в современных системах.
- Невозможность одновременной работы нескольких каналов (только последовательная передача).
- Необходимость в дополнительных внешних логических схемах для управления шиной.
Совместимость и наследие
Несмотря на моральное устаревание, архитектура 8237 оказала значительное влияние на проектирование контроллеров DMA в последующих поколениях процессоров и чипсетов. Вплоть до появления чипсетов Intel 440BX (1998) и VIA Apollo Pro (1998) в составе южных мостов (Southbridge) сохранялись блоки, эмулирующие функциональность 8237. В современных системах (x86-64) прямой доступ к аппаратуре 8237 отсутствует, но поддержка устаревших устройств (например, дисководов) может осуществляться через эмуляцию в прошивке BIOS или UEFI.
В СССР выпускался аналог микросхемы — КР580ВТ57, который был полностью совместим по выводам и функциональности с Intel 8237. Он использовался в советских клонах IBM PC (например, «ЕС-1840», «Искра-1030») и в различных встраиваемых системах.
Источники
- Intel 8237A High Performance Programmable DMA Controller Datasheet (Intel Corporation, 1978, 1981)
- IBM Personal Computer Technical Reference Manual (IBM, 1981, 1984)
- «Микропроцессоры и микропроцессорные комплекты интегральных микросхем: Справочник» (под ред. В.А. Шахнова, 1988)
- «Архитектура IBM PC» (Питер Нортон, 1985)
- «The 80x86 IBM PC and Compatible Computers» (Mazidi, Mazidi, 1995)
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →