1 Отредактировано Voldemar0 (06-12-2019 09:59)

Тема: DMA - прямой доступ к памяти

Привет!

Очень давно облизывался на тему прямого доступа к памяти в Агате, но было понятно, что это выльется в кучу микрух и здоровую плату. Возможно, из-за этого не было и серийных устройств с DMA-доступом (может и были, но в работе не видел).

Вроде как в книжках по агату хором сообщается о том, что DMA возможен без особых проблем и ограничений (кроме запрета остановки в момент R/!W = 0), но я тут залез в инет и выкопал интересную инфу: оказывается, линия RDY, которая предполагалась в агате для остановки проца на время захвата шины, на самом деле разработчиками предполагалась для приостановки работы
на несколько тактов, не более того. Вроде как до 15 тактов ещё можно тормозить проц, но дальше он начнёт терять содержимое регистров, так как - внезапно - они там построены по DRAM-технологии.
Это не касается 65c02, но в агатах он не использовался.

Также есть некоторые ограничения по фазам f0/f1/f2, в которых можно изменять RDY:
запрещено изменение RDY в период изменения f0,f2: 1->0; f1: 0->1.

Интерес к DMA у меня исходит из того, что это способ реально быстро (я думаю, раз в 10 быстрее чем наиболее эффективный программный обмен) загрузить что-то в память. Например, при включении компа.

А кто нибудь ещё пробовал копать эту тему ?

2 Отредактировано AlexBel (06-12-2019 11:50)

Re: DMA - прямой доступ к памяти

Честно скажу, документацию на процессор, что касается RDY, не читал, но разрушение содержимого регистров после 15 тактов выглядит как-то... мягко говоря, неправильно. Описанное действие RDY, по сути - отключение тактирования процессора, снятие тактовой частоты. Хотя, по моему мнению, тактирование должно продолжаться, регистры рефрешиться, а процессор исполнять команду NOP до тех пор, пока снова не будет "отпущен" по RDY. Насколько я помню, к примеру, Z80 так и работает. На него поступает запрос на освобождение шины, он доделывает "текущие дела", отключается от шины и выдаёт подтверждение этому. И в этом состоянии пребывает столько, сколько угодно.

Вот, из даташита:

Spoiler

http://forum.agatcomp.ru//misc.php?action=pun_attachment&item=687&download=1

Post's attachments

Attachment icon RDY.JPG 45.54 kb, 518 downloads since 2019-12-06 

3 Отредактировано avivanov76 (06-12-2019 14:14)

Re: DMA - прямой доступ к памяти

AlexBel пишет:

разрушение содержимого регистров после 15 тактов выглядит как-то... мягко говоря, неправильно.

Совершенно нормально выглядит. Динамическая логика в 70-е годы была основным способом проектирования, если нужно было высокое быстродействие (по меркам 70-х высокое).

Только надо понимать, что данные теряются не в связи с установкой сигнала RDY, а в связи с отключением тактовой частоты. У 6502 (не 65C02), как и у многих других процессоров того времени есть минимальная тактовая частота (100 кГц), ниже которой процессор тактировать нельзя.

Что касается DMA-доступа, то есть большая разница между тем, как он сделан в Apple ][ и в Агате. В Apple ][, помимо отрубания процессора от шин адреса и данных, физически отрубается тактовая частота, идущая на процессор. Именно поэтому делать запрос дольше нескольких тактов нельзя - процессор забудет, где он и что.

В Агате тактирование не останавливается, а чтобы процессор не намолотил непонятно чего, делается вид, что происходит доступ к очень медленной памятии за счет использования сигнала RDY. За счет этого процессор можно остановить во время чтения на неограниченное время. Главное только, чтобы в конце DMA процессор увидел таки на шине данных то, зачем он лез в память.

Если ничего не перепутал, то начинать захватывать шину надо, когда R/W = 1, φ0=1, а отпускать, когда φ0=0.

4 Отредактировано Voldemar0 (06-12-2019 14:11)

Re: DMA - прямой доступ к памяти

Если проц данные не теряет, то, теоретически, если замкнуть RDY на землю (не трогая DMA), проц должен просто остановиться, а потом заработать снова с того же места. Теоретически....

-=-

> В Apple ][, помимо отрубания процессора от шин адреса и данных, физически отрубается тактовая частота, идущая на процессор.

А для чего им это было нужно ? тактовую отрубать, в смысле


-=-

Про динамическую логику интересно, не слышал о таком подходе. Я так понимаю, 74я серия и все популярные серии (561*, 176*...) - это всё таки статическая логика  (в этой  терминологии) ? (че-то мне это напомнило 2т и 4т ДВСки... - 2т тоже тянет только на высоких оборотах)

5

Re: DMA - прямой доступ к памяти

Voldemar0 пишет:

Если проц данные не теряет, то, теоретически, если замкнуть RDY на землю (не трогая DMA), проц должен просто остановиться, а потом заработать снова с того же места. Теоретически....

Нет, в любой момент отпускать RDY нельзя. А то проц, очнувшись в конце активной фазы φ0, сожрет какой-нибудь мусор. В мануале к Apple I (не ][), есть схема пошагивателя, которая использует RDY.

Voldemar0 пишет:

> В Apple ][, помимо отрубания процессора от шин адреса и данных, физически отрубается тактовая частота, идущая на процессор.

А для чего им это было нужно ? тактовую отрубать, в смысле

Вот фиг его знает. Возможно, хотели упростить взаимодействие с шиной.

Voldemar0 пишет:

Про динамическую логику интересно, не слышал о таком подходе. Я так понимаю, 74я серия и все популярные серии (561*, 176*...) - это всё таки статическая логика  (в этой  терминологии) ? (че-то мне это напомнило 2т и 4т ДВСки... - 2т тоже тянет только на высоких оборотах)

Микросхемы с динамической логикой легко отличить - у них обязательно должен быть тактовый вход, даже для комбинаторных схем.

6

Re: DMA - прямой доступ к памяти

avivanov76 пишет:
AlexBel пишет:

разрушение содержимого регистров после 15 тактов выглядит как-то... мягко говоря, неправильно.

Совершенно нормально выглядит.

Я неправильно выразился. С технической точки зрения - да, нормально. Я хотел сказать - нафига нужен такой режим, при котором разрушаются регистры процессора, если этого можно избежать? Вот это и есть неправильно. А технически - да, без рефреша динамическая память разрушается, это нормально...

7

Re: DMA - прямой доступ к памяти

Согласен с avivanov76. Дополню. Шагатели делают через готовность. Обращение к медленным адресам также. Ограничения сверху нет (клок-то не затрагиваем).
Останавливать и восстанавливать можно только в фазе обмена (Ф0=1). Далее нужно выждать пару тактов (если вдруг попали на запись), и только потом отключать родные шинники и захватывать шину.

Турбо АГАТ-9/16 (ЦП 65C802, 5 Махов, dual-port SRAM).

8 Отредактировано Voldemar0 (09-12-2019 06:19)

Re: DMA - прямой доступ к памяти

Попробовал: нормально он останавливается, держал больше минуты остановленным, запускал вновь - нет проблем.
Повторил много раз. Пока в сисмоне девятки пробую, в будущем году буду тестить в других ситуациях, включая семёрку.

Интересно, что температура остановленного проца ни на градус не меняется между режимами. Где-то 57 градусов в самом центре микрухи висит.

Заодно увидел эти вот чудеса с неподтянутой шиной данных девятки: действительно, там видно что паразитных ёмкостей на несколько тактов хватает, чтобы удерживать линии в последнем состоянии. А потом наступает анархия :)

9

Re: DMA - прямой доступ к памяти

Думаю, температура процессора и не должна меняться - он же продолжает работать, только выполняет холостые операции.

10

Re: DMA - прямой доступ к памяти

Вчера закончил Большой Тест во всяких разных комбинация DMA/RDY. Остановки на очень короткое (2-3 такта) и на длительное (минуты), в т.ч. со сменой bus master - пока всё хорошо. Выглядит феерично: тормозим периодически ЦП, вытягиваем единицы кб инфы из DRAM, то по одному байту за остановку, то десятками - всё ок. Когда размазываем запросы, даже не заметно чтобы курсор медленнее мигал. Может чуть-чуть совсем. Даже попробовал всё это чередовать с линией A13 (блокировка периферии материнки): при обращении к порту клавиатуры блокирую штатный контроллер и закидываю на шину свои данные - тоже нормально работает.
Пока на девятке всё, потом надо будет на семёрке те же тесты погонять.
Много было в агате предусмотрено возможностей, которые так и не были широко использованы.

Заметочка: проц реагирует на RESET и запоминает его, даже если RDY активен. RDY отпускаешь, проц пропускает несколько тактов, потом делает интересную штуку: три подряд байта выбирает из памяти - он как бы продолжает выборку байт текущей проги, но, возможно, внутри себя видит это как команду JMP ($FFFC). А затем ещё два такта на выборку вектора FFFC/FFFD. И затем переходит на обработчик сброса.

Пока максималку (1мб/с - обмен в каждом такте) на шине не могу получить, по техническим ограничениям стенда, но это не важно. В другой раз.

11 Отредактировано garnizon (24-05-2021 10:11)

Re: DMA - прямой доступ к памяти

Сердце мне вещует что чего-то ты задумал, и стенд какой-то замутил, и вообще похоже не просто ради интереса это всё.