Объявление форума |
Если пользуетесь личными сообщениями и получили по электронной почте оповещение о новом письме, не отвечайте, пожалуйста, почтой. Зайдите на форум и ответьте отправителю через ЛС. |
Полигон-2 » Бывший СССР » Концепт 1801ВМ1 |
<<Назад Вперед>> | Страницы: 1 2 3 4 5 6 7 * 8 9 10 11 12 13 14 15 | Печать |
_Patron_
Member
Откуда: Москва Всего сообщений: 146 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 19 дек. 2012 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 9 ноября 2017 18:18 Сообщение отредактировано: 9 ноября 2017 18:31
Mixa написал: Пауза гостированная = 10 мкс ( 64 такта ). В момент выставления DMG запускается счётчик на 64 такта, который тикает параллельно с ожиданием RPLY и снятием SYNC. Процессор гарантированно снимает SYNC до обнуления счётчика. Процессор не начинает новый цикл шины при активном сигнале DMR до истечения таймаута SACK. В момент обнуления счётчика ожидание SACK прекращается и процессор возвращается к нормальной работе. непонятная пауза, нужно спешить выставить SACK, пока не началось... Не факт, что у ВМ1 это так, но это так по стандарту Q-Bus. Таймаут SACK не может быть меньше таймаута RPLY именно для того, чтобы даже после снятия SYNC по таймауту RPLY - всё равно оставалось время для ожидания выставления SACK. |
Mixa
Member
Откуда: Москва Всего сообщений: 170 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 8 авг. 2009 |
Вечером попозже осциллограммы приложу, с ними нагляднее. У меня процессор до ожидания SACK не доходит (вопрос, есть ли такое состояние у ВМ1, ожидание SACK?), еще до окончания SYNC ВМ1 выдает DMG, на что сразу снимается DMR и следом в ответ DMG тоже. SYNC еще активен. 588ВТ2 такую реакцию на DMG предлагает, приходится приспосабливаться простыми средствами. |
_Patron_
Member
Откуда: Москва Всего сообщений: 146 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 19 дек. 2012 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 9 ноября 2017 18:45 Сообщение отредактировано: 9 ноября 2017 18:56
Mixa написал: Процессор действует по стандарту - приняв DMR выдаёт DMG и запускает таймер ожидания SACK. По стандарту, в случае снятия DMR до прихода SACK - ожидание SACK прекращается немедленно. еще до окончания SYNC ВМ1 выдает DMG, на что сразу снимается DMR и следом в ответ DMG тоже. SYNC еще активен. Если устройство выдаёт SACK после снятия DMR - это нонсенс. Устройство должно выдавать SACK до снятия DMR и DMG. Пока не снят DMR - активен DMG. Пока активен DMG - тикает таймер ожидания SACK и процессор не может начать новый цикл шины. Когда таймаут SACK истекает - процессор снимает DMG, что означает игнор DMR, отказ от ожидания SACK и продолжение обычной работы. Решение проблемы ( на мой взгляд ) - защёлкивание "нашего" DMR до выставления "нашего" SACK. Тогда всё будет по стандарту и процессор не снимет DMG до истечения таймаута SACK. |
Mixa
Member
Откуда: Москва Всего сообщений: 170 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 8 авг. 2009 |
_Patron_ написал: У меня ВТ2 выдает SACK одновременно со снятием DMR и до снятия DMG. Понятно, почему я не увидел состояние ожидания SACK. А процессор такой поспешности не удивляется и не сопротивляется, есть мысль на этом и остановиться. Если устройство выдаёт SACK после снятия DMR - это нонсенс. Устройство должно выдавать SACK до снятия DMR и DMG. _Patron_ написал: Вроде как да, и реализуемо, и картинка по стандарту выходит. Но ВТ2 ничего не знает про то, что его SACK задержали и нужно соблюсти политес в виде подождать конца SYNC, выставить свой SACK и уж потом выставлять свой SYNC. Он свой SYNC выставляет по факту снятия SYNC от ЦП, немного подождав. Не, не буду красивую картинку протокола рисовать, другим bus masters, если такие вообще появятся, это не помешает. Решение проблемы ( на мой взгляд ) - защёлкивание "нашего" DMR до выставления "нашего" SACK. Тогда всё будет по стандарту и процессор не снимет DMG до истечения таймаута SACK. |
_Patron_
Member
Откуда: Москва Всего сообщений: 146 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 19 дек. 2012 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 9 ноября 2017 20:08 Сообщение отредактировано: 9 ноября 2017 20:22
Mixa написал: Абитражу DMA вообще ничто не может помешать, потому что в Q-Bus нет линии DMG. Вместо этого у каждого устройства есть вход DMGI и выход DMGO ( у процессора - только DMGO ). DMGO процессора поступает на DMGI первого басмастера, DMGO первого басмастера поступает на DMGI второго басмастера и т.д. Как только басмастер выставляет DMR - он отключает DMGI от DMGO, поэтому младшие басмастеры не имеют шансов увидеть DMG до тех пор, пока старшие не закончат работу с шиной. другим bus masters, если такие вообще появятся, это не помешает DMR - это линия, поэтому если два устройства выставили DMR - снятие DMR старшим басмастером никто не заметит, но это и не играет роли - если в момент снятия SACK активен сигнал DMR - процессор снова выставляет DMG и на этот раз его принимает второй басмастер, ожидавший своей очереди. |
Mixa
Member
Откуда: Москва Всего сообщений: 170 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 8 авг. 2009 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 9 ноября 2017 22:05 Сообщение отредактировано: 10 ноября 2017 21:50
Во, Здесь те же, последний - переключение буфера сигналов управления. Если его использовать как SACK, а сначала я так и хотел, то остальная картина не меняется совершенно, только было подозрение, что такой SACK это нехорошо, и спасибо Patron , тоже подтвердили, что это нонсенс. Правильное слово, нонсенс. Вне концепции, стало быть. Все работает без нареканий и сбоев, так и оставлю ранний SACK P.S. DMG, SACK, BSY и упр. буфером. Буфер двунаправленный, одно направление открывается по BSY, другое по этому сигналу. Видно, что все хорошо, управление не перекрывается, конфликтов нет. |
Mixa
Member
Откуда: Москва Всего сообщений: 170 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 8 авг. 2009 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 11 ноября 2017 0:51 Сообщение отредактировано: 11 ноября 2017 0:52
Так, с ПДП разобрались, утвердили, продолжаем. Смотрю, что получилось с прерываниями. 588ВН1 имеет два входа прерываний, A и B. Задумка такая, что на INT A приходит irq14 от IDE, на INT B идет прерывание от 588ВТ2, знаменующее окончание сеанса ПДП. 588ВН1 может выдавать вектор, запрограммированный на 6-ти специально отведенных для этого входных линиях, либо из содержимого двух внутренних 7-разрядных регистров, по регистру на каждый источник прерывания. В общем, 588-я серия продолжает преподносить сюрпризы и непонятки. В данном случае трудно понять, чем руководствовались минские разработчики, выделив 6 разрядов под внешнее кодирование вектора и 7 разрядов под внутренне-регистровое, и то, как их распределили по шине АД. Если шину АД подсоединять как по справочнику (всего 7 линий, АД7..АД1, АД0 не существует, но это понятно и очевидно, что он не требуется), то гранулярность кодирования вектора как при внешнем способе, так и при внутреннем, составляет 1 слово. На практике это не нужно, обычно гранулярность 2 слова, для адреса обработчика по четному адресу слова и PSW по нечетному адресу слова. Ради любопытства попробовал закодировать вектор по нечетному адресу слова, и расположив в памяти адрес входа в процедуру и PSW "с перекосом" соответственно, увидел, что так тоже работает. Но так никогда не делается, зачем такая возможность - совершенно непонятно. 7 разрядов регистров покрывают область векторов 000..376 полностью, внешние 6 разрядов только половину (старший разряд устанавливается в 1), то есть покрывается вторая половина области векторов. Логичнее было бы использовать в обоих способах 6 разрядов, с гранулярностью 2 слова, с полным покрытием и при это ничего лишнего. В общем, в построении концепции кирпичики оказались крупноваты и по форме несуразны, неоформившаяся идея казалась симпатичнее, но вперед движемся, от проекта не отказываемся. Пока в раздумьях, на каком из вариантов остановиться: 1. Подключение АД "по справочнику" плюсы - как бы и нету, какие могут быть плюсы в подключении, рекомендуемом справочником. Типа эталон. минусы - а вот минусы быть могут, описаны выше 2. Подключение АД со смещением на 1 разряд плюсы - гранулярность векторов 2 слова - полное покрытие векторов в режиме внешнего кодирования минусы - не могу определится, минусы это или нет. Есть особенности: сдвинутые биты регистра управления и состояния относительно "справочного" положения, неиспользуемый разряд при кодировании регистрами (выдается вхолостую на АД8), присутствие на шине не только в пределах младшего байта, выдача "1" в разряде АД8 в цикле "чтение вектора" при внешнем кодировании. Вот написал, и, похоже, что с выбором определился. Подключение со смещением на 1 разряд. Ни одна из особенностей минусом не является. Кодирование вектора внешнее, разделение источников INT A и INT B при помощи специального схемотехнического приема. У микросхемы есть вывод, на котором появляется сигнал при подтверждении прерывания INT B , если его завести на одну из линий внешнего кодирования, то на прерывания A и B будут выдаваться разные векторы. Такой трюк работает, проверил. |
Anonymous
Advanced Member
Откуда: Москва(Россия) Всего сообщений: 2537 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 22 нояб. 2011 |
Mixa написал: Именно так всегда и делалось, справочники - как газеты, их после еды читать лучше. DEC же поправился, что область плавающих пользовательских векторов до 01000 простирается, а до 0400 размещаются системные вектора, т.к. системный стек расположен в верхней половине первых 64кб, а пользовательский стек находится в отображении памяти пользователя. Но это для процессоров с ДП. Вот написал, и, похоже, что с выбором определился. Подключение со смещением на 1 разряд. Mixa написал: Обычно он заводился на AD2, давая вектор-B на 4 больше вектора-A, как в большинстве устройств с несколькими векторами принято. сигнал при подтверждении прерывания INT B , если его завести на одну из линий |
Mixa
Member
Откуда: Москва Всего сообщений: 170 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 8 авг. 2009 |
Anonymous написал: Я почему-то решил, что вектор воспринимается только с линий АД7-АД1 , но оказалось, что и с линии АД8 тоже. На входах кодирования установил уровни, чтоб вектор 200 выдавался, а в результате прыгнуло на 600, потому что по АД8 единица передалась. Фигня, поменяю местами подключения к АД7 и АД8, будет всегда выдаваться 1 на АД7. Появляется ограничение на выбор вектора, ну и ладно, выберем какой-нибудь из второй половины системных. Mixa написал:Именно так всегда и делалось, справочники - как газеты, их после еды читать лучше. DEC же поправился, что область плавающих пользовательских векторов до 01000 простирается, а до 0400 размещаются системные вектора, т.к. системный стек расположен в верхней половине первых 64кб, а пользовательский стек находится в отображении памяти пользователя. Но это для процессоров с ДП. Вот написал, и, похоже, что с выбором определился. Подключение со смещением на 1 разряд. Anonymous написал: Ну да, так и делаю Вначале опасался, что подтверждение VECB с большой задержкой будет проходить с линии кодирования на выход АД, но нет, все нормально, даже иголки практически нет, только намек на нее. Mixa написал:Обычно он заводился на AD2, давая вектор-B на 4 больше вектора-A, как в большинстве устройств с несколькими векторами принято. сигнал при подтверждении прерывания INT B , если его завести на одну из линий |
Mixa
Member
Откуда: Москва Всего сообщений: 170 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 8 авг. 2009 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 11 ноября 2017 16:22 Сообщение отредактировано: 11 ноября 2017 20:14
Вектор прерывания это слово целиком, имеют значение все 15 разрядов. 588ВН1 у меня упрятан за двунаправленный буфер с инверсией и выдает вектор 300, по 7-ми линиям АД, АД8-АД2. Остальные линии буфера на стороне ВН1 ничем не драйвятся, находятся в состоянии высокого импеданса и там присутствует сам собой получившийся потенциал логического нуля, сохраняющийся за счет емкости шины. Ноль этот обусловлен тем, что системная шина (инверсная сторона буфера) притянута к питанию (то есть на ней лог.0 ), в цикле приема вектора ее никто не драйвит и этот лог. 0 передается на неинверсную сторону, разряжая шину со стороны ВН1. По IAKO & DIN буфер переключается, потенциал на шине сохраняется, она начинает чем-то заряжаться, но делает это очень медленно и ноль там сохраняется до конца цикла IACK. То есть, вроде как все детерминировано, но такое положение вещей мне сильно не нравится, удержание потенциала шины в критический момент ее чтения только за счет ее емкости в концепцию ну никак не входит. Я решил проверить, какие разряды ВМ1 воспринимает как вектор прерывания. Расставил ловушки по адресам 1300, 2300, 4300, 10300, 20300, 40300 и 100300. Стал по очереди притягивать линии на неинверсной стороне сопротивлением к питанию. Ловушки срабатывают все. То есть, при выдаче вектора прерывания нужно заботиться о том, чтобы передавались все биты слова без искажения. Блин, появилась забота, какими средствами это сделать. Возвращаться к подключению "по справочнику"? Тогда получится: АД7 всегда единица, вектора из второй половины таблицы. АД6-АД3 кодируются произвольно. На АД2 завернут VECB, разделяя INT A и INT B. АД1 кодируется нулем с целью удержания потенциала шины. Теперь, с учетом нового понимания, это не просто какой-то мусорный разряд, а разряд, занимающийся удержанием потенциала. Причем этот потенциал программируется , не хухры-мухры. АД0 можно оставить условно-неопределенным, в емкостном нуле. Осталось разобраться со старшей половиной шины. А не подвести ли туда 8 диодов от линии инверсное IAKO & DIN ? Другой вариант - отключить вообще этот буфер по IAKO & DIN . Процессору потенциал сформируется подтяжками на системной шине. Надо подумать. P.S. Подумал. После раскидывания узлов по "колокольчикам", остался один ИЛИ-НЕ. Если на него подать /DIN и /IAKI , на выходе получится как раз /OE для "верхнего" буфера. /OE "нижнего" буфера - вечный ноль. Теперь нужно подключать живой IDE и смотреть, как и что там будет получаться. Задумано два отдельных прерывания на одно устройство, думаю, логично и оправдано. Одно прерывание по готовности устройства, это понятно, дал команду на чтение сектора, ушел по своим делам, прервали, пришел за данными. Другое прерывание по готовности пересылки ПДП. Запустил ПДП, ушел по своим делам, прервали, данными в памяти можно пользоваться (если чтение с диска). Если запись на диск, можно запустить ПДП и ждать прерывания уже от устройства, но прерывание от ПДП тоже может быть полезным для какого-нибудь промежуточного контроля. |
<<Назад Вперед>> | Страницы: 1 2 3 4 5 6 7 * 8 9 10 11 12 13 14 15 | Печать |
Полигон-2 » Бывший СССР » Концепт 1801ВМ1 |
1 посетитель просмотрел эту тему за последние 15 минут |
В том числе: 1 гость, 0 скрытых пользователей |
Последние | |
[Москва] LIQUID-Акция. Сливаются разъемы CF МС7004 и 7004А на AT и XT Пайка термотрубок Проммать s478 PEAK 715VL2-HT ( Full-Size SBC) Подскажите по 386 материке по джамперам. |
Самые активные 5 тем | |