Как на УКНЦ с повторяемостью результатов ?
Как на УКНЦ с повторяемостью результатов ?
Восемь запусков хватит?
Скрытый текст
http://kisly-alexey.pisem.net/IRQ/2/IRQ1.jpg
http://kisly-alexey.pisem.net/IRQ/2/IRQ2.jpg
http://kisly-alexey.pisem.net/IRQ/2/IRQ3.jpg
http://kisly-alexey.pisem.net/IRQ/2/IRQ4.jpg
http://kisly-alexey.pisem.net/IRQ/2/IRQ5.jpg
http://kisly-alexey.pisem.net/IRQ/2/IRQ6.jpg
http://kisly-alexey.pisem.net/IRQ/2/IRQ7.jpg
http://kisly-alexey.pisem.net/IRQ/2/IRQ8.jpg
[свернуть]
Это она от разогрева ускоряется ?
Главные выводы по результатам запуска теста IRQ.SAV на УКНЦ следующие:
1. Время получения у устройства адреса вектора прерывания равно времени обычного цикла чтения, поэтому программные и аппаратные прерывания выполняются за одинаковое время ( у ДВК-1 с процессором 1801ВМ1 - адрес вектора прерывания читается по шине в 3 раза дольше, чем данные у того же контроллера, хотя этот тест, включив EM - можно и на ДВК-1 запустить - вдруг прежний тест наврал ).
2. Время чтения кода команды составляет 0.8 x MOV
3. Время входа в прерывание вместе с чтением кода команды IOT == 10.8 x MOV, чистое время входа в прерывание == 10 x MOV.
---------- Post added at 20:34 ---------- Previous post was at 20:28 ----------
Точно!
Patron, а как же Вам удается померять время работы команды RESET? Тут вся соль ситуации состоит в том, что сигнал EVNT внутри процессора 1801ВМ2 защелкивается внутри триггера, ну и этот триггер очищается по команде RESET. В эмуляторе понятно, он очищается в начале эмуляции команды, а в процессоре ведь INIT длится некоторое время, а потом пауза, и если фронт EVNT попадет во время активной фазы сигнала INIT, то триггер может не установится.
Для команды RESET повторяемость результатов 100%, поэтому если похоже на правду - значит первому же EVNT повезло.
Тут хорошо то, что если сигнал пропал - влезет ровно в 2 раза больше ресетов и это сразу станет заметно.
---------- Post added at 20:45 ---------- Previous post was at 20:40 ----------
Или при выполнении каждой последовательной команды IOT происходит сначала выборка и предвыборка, поэтому после IOT команда IOT выполняется на 0.8 x MOV дольше, чем после MOV R0,R0.
Тогда чистое время входа в прерывание 9.2 x MOV
Чем он занимается эти 52 такта???
По поводу живых машинок - моё обещание прогнать всё в силе, как только так сразу будет доп. статистика сразу как минимум с трёх машинок.
Вот что в эмуляторе у меня выдал IRQ 1.3 )
http://savepic.ru/4126789.png
http://savepic.ru/4125765.png
Тест 1.3 добавил на форумный сборник софта УК-НЦошного )
Тест MOV.SAV измеряет число тактов, затрачиваемых любым процессором архитектуры PDP-11 на выполнение команды MOV с различными типами адресации.
При первом запуске нужно ввести правильное значение частоты процессора в килогерцах.
На эмулируемой ДВК-1 5.3 МГц это выглядит так:
Код:.RU MOV
MOV - v1.0
CPU KHz: 10000 > 5300
CPU KHz: 5300
R0 (R0) (R2)+ @(R2)+ -(R1) @-(R1) Addr (PC)+ @Tab(R0)
Mov R1 14 37 41 49 41 50 49 41 64
Mov (R1) 30 46 49 59 49 60 59 49 72
Mov (R2)+ 30 46 49 59 49 60 59 49 72
Mov (PC)+ 30 46 49 59 49 60 59 49 72
Mov @(R2)+ 43 59 62 72 62 73 72 62 85
Mov -(R1) 31 47 50 60 50 61 60 50 73
Mov @-(R1) 44 60 63 73 63 74 73 63 86
Mov Addr 43 59 62 72 62 73 72 62 85
Mov @Tab(R1) 56 73 73 85 73 86 85 73 98
Program completed.
УКНЦ КВАНТ литеры 7 с 1515ХМ1-031. Так как на УКНЦ тик сетевого таймера равен не 20 мс, а 19.968 мс, то в качестве частоты используется не 8000 кГц, а 8013 кГц:
Скрытый текст
Осталось измерить скорость ПП данным тестом. Только там памяти 22 Кб с хвостиком.
Ха! А у кого комплект документации к 1801ВМ2? Так что вопрос как раз к Вам, Titus.
А так конечно же вся работа 1801ВМ2 основана на тактах, как с выставлением сигналов, так и работа всех блоков.
А так как на магистрали ЦП память несинхронна с процессором, да к тому же выборка из нее идет только с разрешения видеоконтроллера, то усредненное количество тактов будет дробным.
Если у процессора есть внутреннее умножение частоты - привязка работы блока управления может осуществляться к тактам этой умноженной частоты.
Дело в том, что у стандарта Q-Bus есть стандартные ограничения минимальных и максимальных интервалов между разными сигналами, поэтому привязка всей логики работы с шиной хоть к какому-то тактированию необходима.
Мне тоже думается, что команды привязаны к тактам, но это целое количество тактов у отдельных команд в последовательности одинаковых команд может "плавать" по некоторому закону.
---------- Post added at 23:37 ---------- Previous post was at 23:33 ----------
Т.е. ВМ2 "различает" внутри такта исходной частоты только 4 фазы, относительно каждой из которых могут с небольшой дополнительной задержкой запускаться различные действия.
Можно ламерский совершенно вопрос - различает допустим 4 фазы, но преобразуется каким-то способом в 2 путём объединения и получается как-бы 2 фазы (из четырёх четвертей) - или я чушь вообще написал? Если чушь - заранее извиняюсь) - термины объединения и преобразуется - ламерские, просто чтобы действие как-то обозвать.
Следующие универсальные тесты: MOVB.SAV, CMP.SAV и ADD.SAV, позволяют определить число тактов, затрачиваемых любым процессором архитектуры PDP-11 на выполнение команд MOVB, CMP и ADD с различными способами адресации.
При первом запуске каждого теста нужно ввести правильное значение тактовой частоты тестируемого процессора в килогерцах.
Исходники тестов отличаются одной строчкой, которая для теста команды ADD выглядит так:
Код:;;############################
.Instr Add
;;############################
УКНЦ КВАНТ литеры 7 с 1515ХМ1-031.
Команда MOVB:
Скрытый текст
Команда CMP:
Скрытый текст
Команда ADD:
Скрытый текст
Бросается в глаза, что при выполнении команды MovB - 1801ВМ2 очень нервно реагирует на использование в первом аргументе (PC)+ ( т.е. #NUM ).
Максимальная разница с первым аргументом (R2)+ составила 17 тактов для команды MovB (PC)+, @(R2)+
Вряд ли это глюк теста - все тестовые последовательности генерятся полностью автоматически и в разных тестах отличаются только кодом операции.
Результаты на УКНЦ:
Скрытый текст
Скрытый текст
Что тут можно сказать? По всей видимости разработчики микрокода довольно хорошо промахнулись с байтовыми командами. Уже известно что в команде MOVB параметр dst сначала читается, а уже потом записывается. Судя по всему при адресации по счетчику команд (методы 27, 6Х, 7Х) при словных командах используется аргумент, прочитанный во время предвыборки, а в байтовых командах он снова читается. Весьма интересно услышать по этому поводу комментарии от Titus-а, но его в данный момент нет на форуме.
Кстати интересно посмотреть на CMPB, и CLR и CLRB.
Вот тест для CMPB: CMPB.SAV, а для однооперандных команд буду ещё делать отдельный тест с немного изменённым тестовым движком.
...
Скрытый текст
В свете открывшихся обстоятельств весьма интересно, будут ли сильно отличаться по времени команды MOV @R1,R0 и MOV @PC,R0. Вроде бы аргумент будет прочитан по предвыборке, да и последовательность предвыборки не будет нарушена.
Да, в байтовых командах влияет только на способ адресации 27, на 6Х и 7Х не влияет, т.к. там индекс читается как словный аргумент.
После теста однооперандных команд я сделаю специальный тест MOVPC.SAV для команд типа:
Чтобы далеко не искать, можно будет добавить туда же и уже протестированные:Код:Mov R0, (PC)
MovB R0, (PC)
Mov (PC), R0
MovB (PC), R0
Mov (PC), (PC)
MovB (PC), (PC)
Mov (PC)+, (PC)
MovB (PC)+, (PC)
Mov (PC), (PC)+
MovB (PC), (PC)+
Код:Mov R0, (PC)+
MovB R0, (PC)+
Mov (PC)+, R0
MovB (PC)+, R0
Но даже такой точности достаточно, чтобы задаться несколькими вопросами.
Чем вызвано отличие таймингов следующих команд:
Из первого столбца однозначно следует, что чтение первого аргумента занимает в указанных командах строго одинаковое время.Код:R0 (R0) (R2)+ @(R2)+ -(R1) @-(R1) Addr (PC)+ @Tab(R0)
Mov @(R2)+ 47 70 70 80 70 83 82 82 96
Mov Addr 47 66 66 82 66 82 80 80 96
MovB @(R2)+ 47 71 71 85 80 94 93 93 107
MovB Addr 47 80 80 93 80 93 85 85 106
Cmp @(R2)+ 47 60 60 80 66 82 82 70 96
Cmp Addr 47 66 66 80 66 80 80 66 94
CmpB @(R2)+ 47 60 60 80 66 82 82 82 96
CmpB Addr 47 66 66 80 66 80 80 80 94
Add @(R2)+ 47 72 72 85 80 94 93 93 107
Add Addr 47 79 79 93 79 93 85 85 106
Тогда как объяснить:
1. Почему Mov @(R2)+,(R2)+ выполняется медленнее, чем Mov nn(PC),(R2)+, но MovB @(R2)+,(R2)+ выполняется быстрее, чем MovB nn(PC),(R2)+, при том что у команд Cmp и CmpB таких отличий нет.
2. Почему команды Mov @(R2)+,(R0), MovB @(R2)+,(R0) и Add @(R2)+,(R0) почти не отличаются по продолжительности.
3. Почему команда Add @(R2)+,@(R2)+ выполняется значительно быстрее, чем Add @(R2)+,@-(R1), тогда как команды Add nn(PC),@(R2)+ и Add nn(PC),@-(R1) имеют одинаковую продолжительность ( играет роль использование одного и того же регистра и в источнике, и в приёмнике ? ).
...
P.S. Честно говоря - вручную переписывать числа из фоток довольно сложно ( иногда случаются ошибки и приходится постоянно перепроверять ).
Если перед запуском тестов загрузить монитор NC11SJ.SYS ( с любого носителя, не обязательно с HX ) и нажать в подключенном к COM-порту терминале кнопку [Лог] - результаты тестов сразу запишутся в текстовый файл на PC.
Видно, что MovB выполняется с той же скоростью, что и Add, поэтому вопрос нужно ставить наоборот -
почему:
MOV (R2)+,(R0) выполняется на 10 тактов быстрее, чем BIS (R2)+,(R0) , но
MOV @(R2)+,(R0) выполняется только на один такт быстрее, чем BIS @(R2)+,(R0) , учитывая что
MOV (R2)+,R0 выполняется за то же время, что и BIS (R2)+,R0 , а
MOV @(R2)+,R0 выполняется за то же время, что и BIS @(R2)+,R0 !!!