Intel 8237 — контроллер прямого доступа к памяти (DMA), часть семейства микропроцессоров MCS 85. Он обеспечивает передачу данных между памятью и вводом-выводом с уменьшенной нагрузкой на основной процессор системы, предоставляя памяти управляющие сигналы и информацию об адресе памяти во время передачи DMA.
8237 — это четырехканальное устройство, которое может быть расширено для включения любого количества входов каналов DMA. 8237 способен осуществлять передачи DMA со скоростью до 1,6 мегабайт в секунду. Каждый канал способен адресовать полный раздел памяти размером 64 кбайт и может передавать до 64 кбайт с помощью одного программирования. [1]
В качестве контроллера DMA в оригинальных IBM PC и IBM XT использовался один 8237. IBM PC AT добавил еще один 8237 в конфигурации master-slave, увеличив количество каналов DMA с четырех до семи. [2] Более поздние IBM-совместимые персональные компьютеры могут иметь наборы микросхем, которые эмулируют функции 8237 для обратной совместимости. Intel 8237 был фактически разработан AMD (называемый Am9517 [3] ). Это было частью кросс-лицензионного соглашения, позволяющего AMD производить процессоры Intel, что сделало дизайн доступным и для Intel. Вот почему на корпусе Intel напечатано "(C) AMD 1980". 8237, работающий на частотах 3 МГц и 5 МГц, был произведен Intel, как описано в вариантах, в то время как NEC разработала μPD71037, версию, работающую на частоте 10 МГц. [4]
8237 работает в четырех различных режимах в зависимости от количества байтов, передаваемых за цикл, и количества используемых микросхем:
Может быть выполнена передача из памяти в память. Это означает, что данные могут быть переданы с одного устройства памяти на другое устройство памяти. Регистр текущего адреса канала 0 является источником для передачи данных, а канал 1 и передача завершаются, когда регистр текущего количества слов становится равным 0. Канал 0 используется для обновления DRAM на IBM PC-совместимых компьютерах. [5]
В режиме автоматической инициализации значения адреса и счетчика восстанавливаются после получения сигнала конца процесса (EOP). Это происходит без вмешательства ЦП. Используется для повторения последней передачи. [5]
Счетчик терминала (TC) сигнализирует об окончании передачи на карты ISA. В конце передачи произойдет автоматическая инициализация, настроенная на это.
В одиночном режиме передается только один байт за запрос. Для каждой передачи счетный регистр уменьшается, а адрес увеличивается или уменьшается в зависимости от программирования. Когда счетный регистр достигает нуля, на карту отправляется сигнал конечного счета TC . [6] [7]
Запрос DMA DREQ должен быть вызван картой и оставаться активным до тех пор, пока он не будет подтвержден подтверждением DMA DACK . [6]
Передача активируется DREQ , который может быть деактивирован после подтверждения DACK . Передача продолжается до тех пор, пока не будет активирован конец процесса EOP (внутренний или внешний), который запустит счетчик терминалов TC на карту. В этом режиме можно запрограммировать автоинициализацию. [6]
Передача активируется DREQ и подтверждается DACK и продолжается до тех пор, пока TC , внешний EOP или DREQ не станут неактивными. Только TC или внешний EOP могут активировать автоинициализацию, если это запрограммировано. [6]
Внутренние регистры, используемые в 8237 для передачи данных, следующие:
Как член семейства устройств Intel MCS-85, 8237 является 8-битным устройством с 16-битной адресацией. Однако он совместим с микропроцессорами 8086 / 88. Модели IBM PC и PC XT (типы машин 5150 и 5160) имеют процессор 8088 и 8-битную архитектуру системной шины; последняя напрямую взаимодействует с 8237, но 8088 имеет 20-битную адресную шину, поэтому четыре дополнительных 4-битных адресных защелки (все фактически являются частью одного устройства 74LS670), по одной на каждый канал DMA, добавляются вместе с 8237 для увеличения адресных счетчиков. Однако, поскольку эти внешние защелки отделены от адресных счетчиков 8237, они никогда автоматически не увеличиваются или не уменьшаются во время операций DMA, что делает невозможным выполнение операции DMA через адресную границу 64 КиБ. Попытки пересечь границу 64 КБ при передаче DMA приведут к циклическому завершению в пределах одного блока памяти размером 64 КБ. (Например, если канал DMA и связанная с ним адресная защелка были запрограммированы на передачу 256 байт по возрастающим адресам, начиная с адреса 0x3FF8C, то вместо передачи по адресам 0x3FF8C — 0x4008B данные будут передаваться по адресам 0x3FF8C — 0x3FFFF, а затем по адресам 0x30000 — 0x3008B.)
IBM PC AT (тип машины 5170) и 100% совместимые используют процессор 80286 и 16-битную архитектуру системной шины. В дополнение к 8237 из моделей PC и XT добавлен второй, каскадный 8237 для 16-битных передач DMA. Это возможно, несмотря на то, что 8237 является 8-битным устройством, поскольку 8237 выполняет передачи между портом ввода-вывода и памятью как «пролетные» передачи, при которых данные помещаются на шину исходной памятью или портом ввода-вывода и напрямую считываются в то же время портом ввода-вывода назначения или памятью, без обработки 8237. Для этого режима передачи ширина шины данных по существу не имеет значения для 8237 (при условии, что он подключен к шине данных шириной не менее 8 бит для программирования регистров 8237). Второй 8237 в ПК класса AT обеспечивает три 16-битных канала DMA (его каналы с 1 по 3, называемые каналами с 5 по 7 в PC AT); его канал 0 (называемый каналом 4 в PC AT) используется в каскадном режиме для подключения 8237 для 8-битного DMA в качестве «ведомого» в каскадном расположении; 8237, обеспечивающий 16-битные каналы, является «ведущим». Чтобы он мог адресовать 16-битные слова, он подключен к адресной шине таким образом, что он подсчитывает четные адреса (0, 2, 4, ...) вместо одиночных адресов. Как и первый 8237, он дополнен четырьмя регистрами расширения адреса. В ПК класса AT все восемь регистров расширения адреса имеют ширину 8 бит, так что можно указать полные 24-битные адреса — размер адресной шины 80286. Передачи DMA по любому каналу по-прежнему не могут пересекать границу 64 КиБ. (16-битный DMA ограничен 32 768 16-битными словами, хотя канал DMA может считать через 65 536 адресов; старший бит счетчика адресов из 16-битного канала DMA игнорируется.) Поскольку режим DMA из памяти в память 8237 работает путем передачи байта из исходного расположения памяти во внутренний временный 8-битный регистр в 8237, а затем из временного регистра в расположение памяти назначения, этот режим не может использоваться для 16-битного DMA из памяти в память, так как временный регистр недостаточно велик. Кроме того, 16-битный DMA из памяти в память потребовал бы использования канала 4, что конфликтует с его использованием для каскадирования 8237, который обрабатывает 8-битные каналы DMA. Однако в AT 8-битный канал DMA 0 больше не используется для обновления DRAM, поскольку он был заменен специализированной логикой обновления, поэтому должна быть возможность выполнять 8-битный DMA из памяти в память с использованием каналов 0 и 1, не прерывая обновление DRAM.
Конструкция DMA на базе 8237 в совместимых с PC AT компьютерах не была обновлена с переходом на 32-разрядные ЦП и 32-разрядную архитектуру системной шины. Следовательно, ограничением для этих машин является то, что контроллеры DMA 8237 с их сопутствующими регистрами расширения адреса «страница» могут адресовать только 16 МБ памяти, в соответствии с исходной конструкцией, ориентированной на ЦП 80286, который сам по себе имеет такое же ограничение адресации. [8] Это означает, что для других областей памяти данные должны быть сначала переданы DMA с устройства ввода-вывода в промежуточный буфер в первых 16 МБ физического адресного пространства, а затем перемещены в конечную память ЦП; или, в другом направлении, они должны быть переданы из начальной памяти в промежуточный буфер ЦП перед передачей DMA из этого буфера на устройство ввода-вывода. Этот метод называется «буфером отскока» . В целом, он теряет все преимущества в скорости, связанные с DMA, но может быть необходим, если к периферийному устройству требуется доступ через DMA из-за высоких требований к синхронизации или негибкости аппаратного интерфейса.
В серии компьютеров PS/2 IBM обновила аппаратное обеспечение DMA для поддержки 32-битных данных и адресов в некоторых системах с процессорами 80386, но они сделали это, заменив 8237 новым дизайном контроллера DMA. Новый дизайн включает режим совместимости 8237 для обратной совместимости с PC AT.
Хотя это устройство может не появляться как дискретный компонент в современных персональных компьютерах, оно появляется в наборах микросхем системных контроллеров. Например, PIIX интегрировал два контроллера 8237 для шины ISA DMA. [9] [10]