PDA

Просмотр полной версии : Расчёт точного времени выполнения команд различными процессорами архитектуры PDP-11.



Страницы : [1] 2 3

Patron
02.01.2011, 01:22
Универсальные тесты таймингов:

Последние версии всех универсальных тестов в одном архиве:

PDP11_TimingsTests (http://emulator.pdp-11.org.ru/misc/PDP11_TimingsTests.zip).

Старые версии тестов, но с индивидуальным описанием каждого теста:

PDPCLK.SAV (http://zx.pk.ru/showthread.php?postid=591366), IRQ.SAV (http://zx.pk.ru/showthread.php?postid=578115), MOV.SAV (http://zx.pk.ru/showthread.php?postid=578495), MOVB.SAV (http://zx.pk.ru/showthread.php?postid=578743), CMP.SAV (http://zx.pk.ru/showthread.php?postid=578743), CMPB.SAV (http://zx.pk.ru/showthread.php?postid=578820), ADD.SAV (http://zx.pk.ru/showthread.php?postid=578743), BIS.SAV (http://zx.pk.ru/showthread.php?postid=578801), BISB.SAV (http://zx.pk.ru/showthread.php?postid=578801), OP1.SAV (http://zx.pk.ru/showthread.php?postid=579062), MOVPC.SAV (http://zx.pk.ru/showthread.php?postid=579233), MOVPC_v1.1 (http://zx.pk.ru/showthread.php?postid=579648), MOVPC2.SAV (http://zx.pk.ru/showthread.php?postid=580390), RTS.SAV (http://zx.pk.ru/showthread.php?postid=584249), JMP.SAV (http://zx.pk.ru/showthread.php?postid=584720), JSR.SAV (http://zx.pk.ru/showthread.php?postid=591631), MUL.SAV (http://zx.pk.ru/showthread.php?postid=589325), DIV.SAV (http://zx.pk.ru/showthread.php?postid=589989), ASH.SAV (http://zx.pk.ru/showthread.php?postid=590164), ASHC.SAV (http://zx.pk.ru/showthread.php?postid=590165)


Тесты таймингов для процессора 1801ВМ1 и систем с ВЕ-таймером:

VM1C4.SAV (http://zx.pk.ru/showthread.php?postid=548052), VM1MOV.SAV (http://zx.pk.ru/showthread.php?postid=548650), VM1CMP.SAV (http://zx.pk.ru/showthread.php?postid=548650), VM1ADD.SAV (http://zx.pk.ru/showthread.php?postid=548650), VM1BIS.SAV (http://zx.pk.ru/showthread.php?postid=548650)

===========================================

Исходное сообщение темы ( представляет главным образом исторический интерес ):

Исходные величины, одинаково влияющие на время выполнения процессором любой команды - это задержка шины и задержка ячейки ( образующие в сумме задержку доступа Tadr ) и продолжительность такта процессора T.

Задержка доступа различается по:

1. Типу адресуемой ячейки:
1.1 ячейка ОЗУ - Tadr = Tram;
1.2 регистр устройства - Tadr = Tdev;
1.3 ячейка ПЗУ - Tadr = Trom

2. Типу доступа:
2.1 чтение TadrR;
2.2 запись TadrW;
2.3 модификация TadrM.

В данное время мне наиболее интересны параметры времени выполнения команд процессором 1801ВМ1.

Выборка команд из памяти у процессора 1801ВМ1 не конвееризована, поэтому время выполнения команды NOP складывается из времени выборки команды ( TadrR ) и времени обработки команды ( 8*T ).

Значит, формула времени выполнения команды NOP: Tnop = TadrR + 8T. Если команда NOP находится в ОЗУ, то это TramR + 8T, а если в ПЗУ - то TromR + 8T.

В справочниках есть упрощённые формулы вычисления времени выполнения команд 1801ВМ1:


Времена выполнения команд:

одноадресных двухадресных
метод время метод адресации время
адресации выполнения источн. приемн. выполнения
0 8T+tn 0 0 8T+tn
1 21T+3tn 1 0 18T+2tn
2 20T+3tn 2 0 18T+2tn
3 27T+4tn <Испр. 3 0 25T+3tn
4 21T+3tn 4 0 20T+2tn
5 28T+4tn 5 0 26T+3tn
6 27T+4tn 6 0 25T+3tn
7 34T+5tn 7 0 32T+4tn <Испр.
0 1 26T+2tn
Время выполнения команд 0 2 28T+2tn
управления HALT=54T+7tn 0 3 31T+3tn
команд IOT,BPT,EMT,TRAP 0 4 28T+2tn
42T+5tn; команд устано- 0 5 32T+3tn
вки и очистки признаков 0 6 31T+3tn
8T+tn; максимальное 0 7 40T+4tn
время ожидания ПДП 8T+ 1 1 28T+3tn
+2tn для цикла ввод-па- 2 2 30T+3tn
уза-вывод; максимальное 3 3 40T+5tn
время от момента запро- 4 4 31T+3tn
са прерывания до выбор- 5 5 42T+5tn
ки первой команды ново- 6 6 40T+5tn
го процесса 98T+12tn 7 7 56T+7tn
(время выполнения самой
длинной команды + IOT)

В таблицах приведены времена исполнения для одноадресных команд
COM, INC, DEC, ADC, SBC, ASR, ASL, ROL, ROR, CLR, и для двухадресных
ADD, SUB, BIC, BIS, XOR. За T обозначен период тактовой частоты процессора,
tn-время между выдачей DIN/DOUT и приходом RPLY.
Однако, здесь уже не всё так просто и очевидно, как в случае с NOP.

Начнём с одноадресных команд. Рассмотрим формулы времени выполнения команды INC в зависимости от используемого метода адресации:



0: INC R0 TadrR + 8T
1: INC (R0) TadrR + 8T + TadrR + 13T + TadrW
2. INC (R0)+ TadrR + 8T + TadrR + 12T + TadrW
3: INC @(R0)+ TadrR + 8T + TadrR + 19T + TadrW
4: INC -(R0) TadrR + 8T + TadrR + 13T + TadrW
5: INC @-(R0) TadrR + 8T + TadrR + 13T + TadrR + 7T + TadrW
6: INC 2(R0) TadrR + 8T + TadrR + 12T + TadrR + 7T + TadrW
7: INC @2(R0) TadrR + 8T + TadrR + 12T + TadrR + 7T + TadrR + 7T + TadrW
Как такое может быть, чтобы команда INC @-(R0) требовала ( для своего выполнения ) четырёх обращений к памяти, а команда INC @(R0)+ только ТРЁХ ???

Очевидно, что в справочнике ошибка - исправляем.


0: INC R0 TadrR + 8T
1: INC (R0) TadrR + 8T + TadrR + 13T + TadrW
2. INC (R0)+ TadrR + 8T + TadrR + 12T + TadrW
3: INC @(R0)+ TadrR + 8T + TadrR + 12T + TadrR + 7T + TadrW
4: INC -(R0) TadrR + 8T + TadrR + 13T + TadrW
5: INC @-(R0) TadrR + 8T + TadrR + 13T + TadrR + 7T + TadrW
6: INC 2(R0) TadrR + 8T + TadrR + 12T + TadrR + 7T + TadrW
7: INC @2(R0) TadrR + 8T + TadrR + 12T + TadrR + 7T + TadrR + 7T + TadrW



Теперь двухадресные команды:




00: ADD R0, R1 TadrR +8T
10: ADD (R0), R1 TadrR +10T +TadrR +8T
01: ADD R0, (R1) TadrR +10T +(TadrR+8T) +8T
20: ADD (R0)+, R1 TadrR +10T +TadrR +8T
02: ADD R0, (R1)+ TadrR +10T +(TadrR+8T) +10T
30: ADD @(R0)+, R1 TadrR +10T +TadrR +7T +TadrR +8T
03: ADD R0, @(R1)+ TadrR +9T +TadrR +7T +(TadrR+8T) +7T
40: ADD -(R0), R1 TadrR +12T +TadrR +8T
04: ADD R0, -(R1) TadrR +10T +(TadrR+8T) +10T
50: ADD @-(R0), R1 TadrR +10T +TadrR +8T +TadrR +8T
05: ADD R0, @-(R1) TadrR +10T +TadrR +7T +(TadrR+8T) +7T
60: ADD 2(R0), R1 TadrR +10T +TadrR +7T +TadrR +8T
06: ADD R0, 2(R1) TadrR +9T +TadrR +7T +(TadrR+8T) +7T
70: ADD @2(R0), R1 TadrR +10T +TadrR +7T +TadrR +7T +TadrR +8T
07: ADD R0, @2(R1) TadrR +10T +TadrR +7T +TadrR +7T +(TadrR+8T) +8T



11: ADD (R0), (R1) TadrR+6T+TadrR+7T+(TadrR+8T)+7T
22: ADD (R0)+, (R1)+ TadrR+8T+TadrR+7T+(TadrR+8T)+7T
33: ADD @(R0)+, @(R1)+ TadrR+8T+TadrR+6T+TadrR+6T+TadrR+6T+(TadrR+8T)+6T
44: ADD -(R0), -(R1) TadrR+8T+TadrR+7T+(TadrR+8T)+8T
55: ADD @-(R0), @-(R1) TadrR+8T+TadrR+7T+TadrR+6T+TadrR+7T+(TadrR+8T)+6T
66: ADD 2(R0), 2(R1) TadrR+8T+TadrR+6T+TadrR+6T+TadrR+6T+(TadrR+8T)+6T
77: ADD @2(R0), @2(R1) TadrR+10T+TadrR+6T+TadrR+6T+TadrR+6T+TadrR+6T
+TadrR+6T+(TadrR+8T)+8T


Весьма странная информация..

Из информации об одноадресных командах следует, что процессор 1801ВМ1 не использует цикл "чтение-модификация-запись" при выполнении одноадресных команд. Вместо этого для модификации операнда используется его "полновесное" чтение и затем такая же запись. В таблице же двухадресных команд циклы записи вообще отсутствуют, но зато к последнему циклу чтения делается "добавка" +8T, как бы намекающая на то, что это и не чтение вовсе, а "чтение-модификация-запись".

Но уж слишком это противоречит информации из таблицы времени выполнения одноадресных команд.

...

Однако, для практической эмуляции достоверного быстродействия процессора 1801ВМ1 нужны не только точные формулы, но и конкретные значения используемых в вычислениях величин.

С продолжительностью такта процессора всё понятно - при рабочей частоте 1801ВМ1 = 100 кГц - 5 МГц, продолжительность такта составит T = 10 мкс - 0.2 мкс.
...

Добавлен файл VM1S2.zip, содержащий "1801VM1 System test 2"
Добавлен файл VM1SPD.zip, содержащий "1801VM1 Mhz Speed Meter v1.0"
Добавлен файл VM1VE3.zip, содержащий "1801VM1 VE-Timer Test #3"
Добавлен файл VM1VE4.zip, содержащий "1801VM1 VE-Timer Test #4"
Добавлен файл VM1C1.zip, содержащий "1801VM1 Timings Test #1a"

...

Patron
03.01.2011, 21:24
1. Относительно задержки доступа к ячейкам ОЗУ и ПЗУ ДВК.

Тот факт, что процессор 1801ВМ1 также используется в БК-0010 - позволяет учесть данные, полученные Ю.А.Зальцманом ("ПК БК-0010" №1 1995г.)

Сообщается, что время выполнения команды NOP на БК-0010 с тактовой частотой 3 МГц составляет ~ 4 мкс.

Известно, что тайминг команды Tnop = TramR + 8T. При F=3 МГц : Т = 0.33 мкс. Откуда TramR = 4 - 8*0.33 = 1.34 мкс.

Однако, на задержке доступа к памяти БК-0010 сказывается периодическая блокировка шины видеоконтроллером.

Учитывая, что у ДВК3 : TramR = 1 мкс ; у БК-0010 : TromR = ~ 1 мкс - легко вычислить, что видеоконтроллер БК-0010 вносит дополнительную задержку ~ 0.33 мкс.

Следовательно у ДВК можно ожидать:

TramR = ~ 1.0 мкс
TromR = ~ 0.6 мкс


2. Сообщается, что время выполнения команд BR и BEQ у БК-0010 одинаково и составляет ~ 5.4 мкс.

Если у БК-0010 : TramR = 1.4 мкс ; T = 0.33 мкс, тайминги будут:


BR TadrR + 12T
BEQ TadrR + 12T

Похоже, что результаты, полученные ранее на основе таймингов 1801ВМ3 - не вполне корретны и команда BR выполняется процессором 1801ВМ1 за такое же время, как и команда BEQ.

Там же сообщаются следующие времена выполнения команд процессором 1801ВМ1:


SOB TadrR + 16T
RTI TadrR + 11T + TadrR + 8T + TadrR + 8T
RTS TadrR + 16T + TadrR + 8T
RESET TadrR + 1024T


...

Добавлен файл VM1VE5.zip, содержащий "1801VM1 VE-Timer Test #5".
Добавлен файл VM1VE6.zip, содержащий "1801VM1 VE-Timer Test #6".
Добавлен файл VM1C3.zip, содержащий "1801VM1 Timings Test #3".
Добавлен файл VM1VE7.zip, содержащий "1801VM1 VE-Timer Test #7".
Добавлен файл VM1SP2.zip, содержащий "1801VM1 MHz Speed Meter v2.0"

AlecV
04.01.2011, 01:14
Patron, Извини, я наверное туплю. Но шина МПИ - асинхронная и любая операция на ней занимает неопределнное количество времени, главное чтобы не слетать по тайм-ауту 10ms.

http://ru.wikipedia.org/wiki/Q-Bus

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

Вдобавок шину могут занимать регенерация, дисплей или пересылки устройств с ПДП (например MY: ), даже в процессе выборки многословной команды.

Или ты просто хочешь получить сферические цифры в вакууме ?

nzeemin
04.01.2011, 13:22
Или ты просто хочешь получить сферические цифры в вакууме ?

Цифры вообще-то очень полезные, но к ним конечно ещё нужно для каждой машины подробное описание работы всех устройств по доступу к памяти.

В частности, в моих тестах на БК-0011М получилось что NOP исполняется в среднем за 10.66 такта, а SOB R0,метка -- за 21.33 такта.
К этому было вот такое объяснение от А.Тишина AKA Sandro (http://nzeemin.livejournal.com/303355.html):

Если речь идёт об ОЗУ, то ВП1-36 работает так: на одну телевизионную строку длительностью 64мкс ровно у неё происходит 96 циклов доступа к памяти, из которых чётные (при нумерации с 0) достаются процессору, а нечётные -- видеоадаптеру (даже на полях видеосигнала). То есть, при частоте 3 МГЦ процессор может читать/писать данные только каждый 4 такт, строго. Поэтому у БК-0010 время исполнения всех команд из ОЗУ кратно 4 тактам, всегда.
В 11М процессор работает на 4МГЦ, а ВП1-36, естественно, всё так же на 3 (или 6, это как посмотреть :) ). Поэтому выходит, что процессор получает доступ в ОЗУ 1 раз в 5 1/3 такта. В среднем.
А поскольку даже простую команду он не может выполнить за 5 тактов, то получается исполнение за два цикла доступа к памяти, хотя реально из них используется только один -- для чтения команды.

Patron
04.01.2011, 15:26
Patron, Извини, я наверное туплю. Но шина МПИ - асинхронная и любая операция на ней занимает неопределнное количество времениЭто сферическая теория в вакууме :) На практике же - любая команда процессора 1801ВМ1 ( как и любого процессора вообще ), находящаяся в ОЗУ или ПЗУ - выполняется за прогнозируемое время. И наиболее точные алгоритмы именно такого прогнозирования мне и интересно установить.


Вдобавок шину могут занимать регенерация, дисплей или пересылки устройств с ПДП (например MY: ), даже в процессе выборки многословной команды.Дисплей у ДВК в общую память не лезет ( или я ошибаюсь? КГД лезет? а КЦГД лезет? ). Регенерация у ДВК имеет постоянные характеристики и неявно учтена в формулах расчёта быстродействия. Активность эмулируемых устройств ПДП контролируется эмулятором, поэтому вносимая ими задержка может легко (?) быть учтена дополнительно ( этим мы займёмся на более поздних этапах исследования :).


Или ты просто хочешь получить сферические цифры в вакууме ?Я хочу, чтобы для всех устройств, имеющих реальные прототипы ( начиная с процессоров ) - был доступен ( в моём эмуляторе компьютерных архитектур ) режим достоверной эмуляции функционирования.

...


То есть, при частоте 3 МГЦ процессор может читать/писать данные только каждый 4 такт, строго. Поэтому у БК-0010 время исполнения всех команд из ОЗУ кратно 4 тактам, всегда.Алгоритм расчёта количества дополнительных ( к "чистой" задержке доступа ) тактов, которые процессор тратит на каждый доступ к шине - самая сложная часть расчётов времени выполнения команд.

Вот, для примера - таблица (из описания процессора) дополнительных "накладных расходов" процессорных тактов 1801ВМ3 в зависимости от типа адресации операнда:



ВРЕМЯ ВЫБОРКИ ОПЕРАНДОВ

------------------------------------------------------------------
МЕТОД TS TD
АДРЕСАЦИИ ------------------------------------
ВСЕ КОМАНДЫ, ДЛЯ КОМАНДЫ
КРОМЕ MOV MOV
------------------------------------------------------------------
0 0 0 0
1 5T+TR 4T+TM 4T+TW
2 10T+2TR 8T+TM 8T+TW
3 13T+TR 13T+TM+TR 13T+TR+TW
4 10T+2TR 6T+TM 6T+TW
5 12T+2TR 13T+TM+TR 13T+TR+TW
6 10T+2TR 6T+TM+TR 6T+TR+TW
7 12T+3TR 10T+TM+2TR 10T+2TR+TW
------------------------------------------------------------------

Вот дела!

И в этой таблице ( из другого справочника, про другой процессор ) та же ошибка с количеством доступов к памяти при выборке первого операнда с 3-м типом адресации. Ну не может такого быть, чтобы команда TST @-(R0) требовала для выборки операнда 2-х обращений к памяти, а команда TST @(R0)+ только ОДНОГО !!!

Да и при 2-м и 4-м методах адресации с первым операндом в таблице явные нелады.

Таблица (на мой взгляд) должна выглядеть так:


ТАБЛИЦА 2
ВРЕМЯ ВЫБОРКИ ОПЕРАНДОВ

------------------------------------------------------------------
МЕТОД TS TD
АДРЕСАЦИИ ------------------------------------
ВСЕ КОМАНДЫ, ДЛЯ КОМАНДЫ
КРОМЕ MOV MOV
------------------------------------------------------------------
0 0 0 0
1 5T+TR 4T+TM 4T+TW
2 10T+TR 8T+TM 8T+TW
3 12T+2TR 13T+TR+TM 13T+TR+TW
4 10T+TR 6T+TM 6T+TW
5 12T+2TR 13T+TR+TM 13T+TR+TW
6 10T+2TR 6T+TR+TM 6T+TR+TW
7 12T+3TR 10T+2TR+TM 10T+2TR+TW
------------------------------------------------------------------


Из таблицы видно, что при выборке операнда - процессор 1801ВМ3 не только ждёт ответа ячейки, но ещё и тратит дополнительные такты.

Например, из таблицы следует, что на выборку операнда для команды TST (R0) процессор 1801ВМ3 тратит дополнительно +5T, а для команд TST (R0)+ и TST -(R0) : +10T ( тогда как 1801ВМ1 тратит дополнительно +6T в обоих случаях ).

Это как надо понимать..

Возможно, эти добавочные +5T ( при 2-м и 4-м методах адресации ) нужны процессору 1801ВМ3 на изменение содержимого регистра. Но не противоречит ли это таблице времён выполнения команд процессора 1801ВМ3:



ВРЕМЯ ВЫПОЛНЕНИЯ КОМАНД


ВРЕМЯ ВЫПОЛНЕНИЯ КОМАНД ВЫЧИСЛЯЕТСЯ ПО ОДНОЙ ИЗ ФОРМУЛ:

1. ДЛЯ БИНАРНЫХ КОМАНД

T1 = TS + TD + TI + TF

2. ДЛЯ УНАРНЫХ КОМАНД

T2 = TD + TI + TF ИЛИ TS + TI + TF

3. ДЛЯ КОМАНД JMP, JSR ( КРОМЕ ЗАПРЕЩЕННОГО МЕТОДА АДРЕСАЦИИ 0 )

T3 = TJ + TI + TF

ГДЕ: TS - ВРЕМЯ ВЫБОРКИ ОПЕРАНДА ИСТОЧНИКА
TD - ВРЕМЯ ВЫБОРКИ ОПЕРАНДА ПРИЕМНИКА
TI - ВРЕМЯ ВЫПОЛНЕНИЯ ОПЕРАЦИЙ
TF - ВРЕМЯ ВЫБОРКИ КОМАНДЫ
TJ - ВРЕМЯ ВЫБОРКИ АДРЕСА ПЕРЕХОДА

ЗНАЧЕНИЯ СОСТАВЛЯЮЩИХ ВРЕМЕНИ ПРИВЕДЕНЫ В СЛЕДУЮЩИХ ТАБЛИЦАХ
ПРИЛОЖЕНИЯ 8 :

T1 - В ТАБЛ. 1,
TS,TD ДЛЯ РАЗЛИЧНЫХ ТИПОВ АДРЕСАЦИИ - В ТАБЛ. 2,
TJ - В ТАБЛ. 3.

ВРЕМЕНА В ТАБЛИЦАХ ОПРЕДЕЛЯЮТСЯ С ИСПОЛЬЗОВАНИЕМ ТАКТОВОЙ
ЧАСТОТЫ T ПРОЦЕССОРА И ВРЕМЕН , ОПРЕДЕЛЯЕМЫХ БЫСТРОДЕЙСТВИЕМ
ЗАПОМИНАЮЩЕГО УСТРОЙСТВА:

TR - ВРЕМЯ ЧТЕНИЯ ИЗ ПАМЯТИ,
TW - ВРЕМЯ ЗАПИСИ В ПАМЯТЬ,
TM - ВРЕМЯ ЧТЕНИЯ ОПЕРАНДА И ЗАПИСИ РЕЗУЛЬТАТА ПО ТОМУ
ЖЕ АДРЕСУ ( ЧТЕНИЕ-МОДИФИКАЦИЯ-ЗАПИСЬ ).

ДЛЯ ИЗДЕЛИЯ 17М126 ЭТИ ВРЕМЕНА ИМЕЮТ СЛЕДУЮЩИЕ ЗНАЧЕНИЯ:

T = 0,125 МКС
TR = TW = 1 МКС
TM = 1,6 МКС
TF = TR ДЛЯ КОМАНДЫ, ВЫБИРАЕМОЙ НА ИСПОЛНЕНИЕ ПОСЛЕ
КОМАНДЫ ПЕРЕХОДА.

ДЛЯ ПОСЛЕДОВАТЕЛЬНОСТИ КОМАНД ( НЕ ИМЕЮЩЕЙ КОМАНД ПЕРЕХОДА )
В ФОРМУЛЕ ВЫЧИСЛЕНИЯ ВРЕМЕНИ ВЫПОЛНЕНИЯ КОМАНД ВРЕМЯ TF
НЕ УЧИТЫВАЕТСЯ.



ТАБЛИЦА I
ВРЕМЯ ВЫПОЛНЕНИЯ ОПЕРАЦИЙ

-----------------------------------------------------------------
КОМАНДА TI - ВРЕМЯ ВЫПОЛНЕНИЯ
ОПЕРАЦИИ
-----------------------------------------------------------------

БИНАРНЫЕ КОМАНДЫ С МЕТОДАМИ
АДРЕСАЦИИ 2D,3D,4D,5D,
1S,2S,3S,4S 6T
MOV 9T
КОМАНДЫ УСЛОВНЫХ ПЕРЕХОДОВ 14T
BR 7T
RTS 17T + TR
JSR 1S 17T + TW
MFPS 0D 18T
SXT 0S 9T
MTPS 0S 13T
SOB 9T
DIV 0S 93T
ASH 0S 18T + NS 3T
ASHC 0S 21T + NS 3T
RESET 18T + 1545T + 1545T
IOT,BPT,EMT,TRAP 47T + 2TR + 2TW
RTI 19T + 2TR
SWAB 0D 9T
SWAB 1D - 7D 14T
JMP 1S 6T
RTT 19T + 2TR
MARK 23T + TR
MUL 60T
ОСТАЛЬНЫЕ КОМАНДЫ 3T
-----------------------------------------------------------------

В ТАБЛИЦЕ I ИСПОЛЬЗОВАНЫ СЛЕДУЮЩИЕ ОБОЗНАЧЕНИЯ:

0D - 7D - МЕТОД АДРЕСАЦИИ ОПЕРАНДА ПРИЕМНИКА (ИСТОЧНИКА),
0S - 4S В КОТОРОМ ЦИФРА ОБОЗНАЧАЕТ МЕТОД АДРЕСАЦИИ, А
D ИЛИ S - УКАЗЫВАЕТ НА РЕГИСТР, ИСПОЛЬЗУЕМЫЙ
ПРИ ДАННОЙ АДРЕСАЦИИ.
NS - КОЛИЧЕСТВО СДВИГОВ, УКАЗАННЫХ В КОМАНДЕ.

ПОД ТЕРМИНОМ "ОСТАЛЬНЫЕ КОМАНДЫ" В ТАБЛ.I СЛЕДУЕТ ПОНИМАТЬ
ВСЕ КОМАНДЫ, НЕ УКАЗАННЫЕ В ТАБЛ.I , И КОМАНДЫ, УКАЗАННЫЕ В ТАБЛ.I,
НО С НЕУКАЗАННЫМИ МЕТОДАМИ АДРЕСАЦИИ.

Короче - мрак и ужас :)))

...



ТАБЛИЦА 3
ВРЕМЯ ВЫБОРКИ АДРЕСА ПЕРЕХОДА
ДЛЯ КОМАНД JMP И JSR

------------------------------------------------------------------
МЕТОД АДРЕСАЦИИ TJ
------------------------------------------------------------------
1 0
2 3T
3 10T+TM
4 6T
5 7T+TM
6 TM
7 7T+TR+TM



...

Добавлен файл VM1C4.zip, содержащий "1801VM1 Timings Test #4".
Добавлен файл VM1T1.zip, содержащий "1801VM1 Interrupts Test #1".
Добавлен файл VM1T2.zip, содержащий "1801VM1 Interrupts Test #2".
Добавлен файл VM1T3.zip, содержащий "1801VM1 Interrupts Test #3".
Добавлен файл VM1T4.zip, содержащий "1801VM1 Interrupts Test #4".

Patron
15.01.2011, 16:47
Время выполнения команд процессорами типа PDP-11 складывается из синхронной части, определяемой микроархитектурой процессора ( и зависящей от тактовой частоты ) и из асинхронной части, определяемой продолжительностью переходных процессов системы памяти.


Относительно асинхронной задержки, вносимой каждым обращением к памяти по шине Q-Bus, справочники сообщают следующую информацию:


1. ПЗУ TadrR TadrW TadrM
1.1. К1801РЕ2а 300 нс
1.2. К1801РЕ2б 500 нс
1.3. К573РФ3 550 нс

2. ОЗУ
2.1. К565РУ3а 510 нс 510 нс 670 нс
2.2. К565РУ3в 410 нс 410 нс 520 нс
2.3. К565РУ3г 370 нс 370 нс 420 нс
2.4. К565РУ5б 230 нс 230 нс 310 нс
2.5. К565РУ5в 280 нс 280 нс 380 нс
2.6. К565РУ5г 360 нс 360 нс 460 нс
2.7. К565РУ5д 460 нс 460 нс 600 нс


Также сообщается задержка обращения для подсистем оперативной памяти различных ЭВМ архитектуры PDP-11:


СМ1300 500 нс 500 нс

СМ1600:
ИС тип А 540 нс 540 нс
ИС тип В 720 нс 720 нс

Электроника 60 400 нс 400 нс 700 нс
Эл. НЦ-80-01Д 400 нс 400 нс
17М126 1000 нс 1000 нс 1600 нс


Следовательно, быстродействие ДВК-1 ( процессор 1801ВМ1 ) с тактовой частотой 5 МГц ( T = 200 нс ) при выполнении регистровых команд ( Tcmd = TadrR + 8T ), в зависимости от быстродействия установленной памяти составит:


Задержка Оп./сек.
----------------------
200 нс 550 тыс
300 нс 525 тыс
400 нс 500 тыс
500 нс 480 тыс
600 нс 450 тыс
700 нс 430 тыс
1000 нс 380 тыс


При разгоне ДВК-1 до 6 МГц и использовании памяти с задержкой выборки 300 нс ( напр. К1801РЕ2а ) - быстродействие регистровых команд составит:
610 тыс. оп/сек.
...

Добавлен файл VM1T5.zip, содержащий "1801VM1 Interrupts Test #5".
Добавлен файл VM1RST.zip, содержащий "1801VM1 RESET Timings Meter v1.0".
Добавлен файл VM1T6.zip, содержащий "1801VM1 Interrupts Test #6".
Добавлен файл VM1MOV.zip, содержащий "1801VM1 MOV Timings Test v1.1".
Добавлен файл VM1ADD.zip, содержащий "1801VM1 ADD & SUB Timings Test v1.0".

Patron
25.01.2011, 23:41
Ещё немного информации о таймингах памяти.

Для микро-ЭВМ "Электроника 60" и "Электроника МС1212" сообщаются следующие характеристики поставляемых модулей памяти:

Модули ОЗУ


Тип Ёмкость TadrR
---------------------------------------------
П1 (15У30-4-002) 8 Кбайт 500 нс
П2 (15У30-4-003) 8 Кбайт 500 нс
П3 (15У30-16-004) 32 Кбайт 200 нс
П5 (МС3101) 64 Кбайт 200 нс
П7 (МС3102-01) 256 Кбайт 200 нс
П9 (МС3107) 512 Кбайт 260 нс


Модули ПЗУ


Тип Ёмкость TadrR
---------------------------------------------
ПП1 (ПЗУ) 2 Кбайт 120 нс
ПП2 (ППЗУ) 4 Кбайт 1000 нс


...

Относительно длины конвеера предвыборки у процессоров семейства 1801.

1801ВМ1 - Конвеер отсутствует.
1801ВМ2 - Конвеер предвыборки команд на 2 слова.
1801ВМ3 - Конвеер предвыборки на 4 слова.

...

Добавлен файл VM1BIS_&_VM1CMP.zip, содержащий "1801VM1 BIS & BIC Timings Test v1.0" и "1801VM1 CMP & BIT Timings Test v1.0".
Добавлен файл VM1T7.zip, содержащий "1801VM1 Interrupts Test #7".
Добавлен файл VM1C5.zip, содержащий "1801VM1 Timings Test #5".
Добавлен файл VM1C6.zip, содержащий "1801VM1 Timings Test #6".

Patron
25.10.2012, 17:45
Проведённое исследование растактовки цикла чтения ДВК-1 позволяет более объективно оценить число тактов, необходимых процессору 1801ВМ1 для выполнения различных команд.

CPU:
http://s1.hostingkartinok.com/uploads/images/2012/10/115368d71e9929414aa7c50c3ab6e587.pngROM:
http://s4.hostingkartinok.com/uploads/images/2012/10/48ba948207e7a8a5e89860ec79f2332c.pngDEV:
http://s4.hostingkartinok.com/uploads/images/2012/10/998e14f48c38fc8c33d767e4b1245612.pngRAM:
http://s4.hostingkartinok.com/uploads/images/2012/10/475d50c8bc791397ccbe4608c9c2bd96.png

MOV (R0), R1
BR .-2.
http://s1.hostingkartinok.com/uploads/images/2012/10/6788a4e0d23f91b097f9d355f40aac2a.png

MOV (R0), R1
JMP (R2)
http://s4.hostingkartinok.com/uploads/images/2012/10/ad15dfa1ac797ac98aaed6b9041ee64c.png


Для первых 4-х наблюдений можно составить следующую таблицу зависимости продолжительности выполнения команды в тактах ( интервал BSY1-BSY1 ) от продолжительности DIN1-RPLY1:



JMP (R0) в 0177706 ( CPU ): DIN1-RPLY1 == 0 ; BSY1-BSY1 == 18
JMP (R0) в 0160110 ( ROM ): DIN1-RPLY1 == 2 ; BSY1-BSY1 == 20
JMP (R0) в 0177562 ( DEV ): DIN1-RPLY1 == 4 ; BSY1-BSY1 == 22
JMP (R0) в 0000000 ( RAM ): DIN1-RPLY1 == 6 ; BSY1-BSY1 == 24

Основные выводы следующие:

1. Растактовки цикла чтения ( цикл DATI ) имеют только один интервал, зависящий от типа адресуемой памяти - это интервал между установкой DIN и установкой RPLY ( DIN1-RPLY1 ).

2. Обработка процессором принятых данных начинается сразу после снятия сигнала DIN ( событие DIN0 ), поэтому время выполнения команд не зависит от продолжительности интервала DIN0-RPLY0.

3. Число дополнительных к интервалу DIN1-RPLY1 тактов, необходимых для выполнения команды - неизменно.

Patron
26.10.2012, 16:09
Тест таймингов простых команд и прерываний 1801VM1 Timings Test #4 (http://zx.pk.ru/attachment.php?attachmentid=25144) на разных этапах своего развития (и разных прогонах) на ДВК-1 5.3 МГц давал немного отличающиеся результаты:



Scale: 1024
Retry: 64

Return : 35 ! RtI : 45 ! RtT : 45 ! IOT : 82 ! Trap : 81 !

Add #6,R0 : 29

SOB : 22 ! Br : 17 ! BCS : 17 ! BCC : 17 ! Nop : 14 ! SeC : 14 ! ClC : 14 !

R0 (R0) (R0)+ @(R0)+ -(R0) @-(R0) Addr @#Addr @Tab(R0)
Tst 14 29 29 42 29 43 42 42 55
TstB 14 29 29 42 29 43 42 42 55
SXt 14 41 41 54 41 55 54 54 67
MFPS 14 41 41 55 42 55 54 54 67
MTPS 26 34 34 48 35 49 48 48 61
SwaB 14 41 41 55 41 55 54 54 67
Clr 14 41 41 54 42 55 54 55 67
ClrB 14 41 41 55 42 55 55 55 67
Inc 14 41 41 55 42 55 55 55 67
IncB 14 41 41 55 42 55 55 54 67
Dec 14 41 41 54 42 55 55 55 67
DecB 14 41 41 54 42 55 54 54 67
AdC 14 41 41 54 42 55 54 54 67
AdCB 14 41 41 54 42 55 54 54 67
SbC 14 41 41 54 42 55 54 54 67
SbCB 14 41 41 54 42 55 54 54 67
ASL 14 41 41 54 42 55 54 54 67
ASLB 14 41 41 54 42 55 54 54 67
ASR 14 41 41 54 42 55 54 54 67
ASRB 14 41 41 54 41 55 54 54 67
RoL 14 41 41 54 42 55 54 54 67
RoLB 14 41 41 54 41 55 54 54 67
RoR 14 41 41 54 41 55 54 54 67
RoRB 14 41 41 54 41 55 54 54 67
Com 14 41 41 54 41 55 54 54 67
ComB 14 41 41 54 41 55 54 54 67
Neg 14 41 41 54 41 55 54 54 67
NegB 14 41 41 54 42 55 54 54 67
Jmp 24 26 35 35 35 48
Call 38 39 49 49 49 62

BiS #100,@#TTPS : 64
BiS #100,@#TTPS + Nop : 77
IOT + Handler : 248
Interrupts count : 1024
Handler only : 166
BiS+Nop+Intr+Handler : 342
Interrupts count : 1024
BiS + Nop + Interrupt : 176
Interrupt only : 99



Scale: 256
Retry: 300

Return : 35 ! RtI : 46 ! RtT : 46 ! IOT : 80 ! Trap : 80 !

Add #6,R0 : 30

SOB : 22 ! Br : 17 ! BCS : 17 ! BCC : 17 ! Nop : 14 ! SeC : 14 ! ClC : 14 !

R0 (R0) (R0)+ @(R0)+ -(R0) @-(R0) Addr @#Addr @Tab(R0)
Tst 14 29 29 42 30 43 42 42 56
TstB 14 29 29 42 30 43 42 42 56
MTPS 26 35 35 48 35 49 48 48 61
MFPS 14 41 41 54 41 55 54 54 67
XOr 14 43 43 56 44 56 56 56 70
SXt 14 41 41 54 41 55 54 54 67
SwaB 14 41 41 54 41 55 54 54 67
Clr 14 41 41 54 41 55 54 54 67
ClrB 14 41 41 54 41 55 54 54 67
Inc 14 41 41 54 41 55 54 54 67
IncB 14 41 41 54 41 55 54 54 67
Dec 14 41 41 54 41 55 54 54 67
DecB 14 41 41 54 41 55 54 54 67
AdC 14 41 41 54 41 55 54 54 67
AdCB 14 40 40 54 41 55 54 54 67
SbC 14 41 40 54 41 55 54 54 67
SbCB 14 40 41 54 41 55 54 54 67
ASL 14 41 41 54 41 55 54 54 67
ASLB 14 41 41 54 41 55 54 54 67
ASR 14 41 40 54 41 55 54 54 67
ASRB 14 41 41 54 41 55 54 54 67
RoL 14 40 41 54 41 55 54 54 67
RoLB 14 40 40 54 41 55 54 54 67
RoR 14 41 40 54 41 55 54 54 67
RoRB 14 41 41 54 41 55 54 54 67
Com 14 40 41 54 41 55 54 54 67
ComB 14 40 41 54 41 55 54 54 67
Neg 14 41 40 54 41 55 54 54 67
NegB 14 41 41 54 41 55 54 54 67
Jmp 24 26 35 35 35 48
Call 39 40 49 49 49 61

BiS R0,(R1) : 42
BiS R0,(R1) + Nop : 58
Handler cycles : 256
Handler : 165
BiS+Nop+Intr+Handler : 315
Interrupts count : 256
BiS + Nop + Interrupt : 150
Interrupt only : 92

Тем не менее некоторые выводы сделать можно.

Из описания 1801ВМ1 известно, что продолжительность команды NOP равна 8T+tn, где T - продолжительность такта, а tn - продолжительность интервала DIN1-RPLY1.

Зная, что 8T+tn = 14T - определяем tn = 6T, что полностью соответствует результатам непосредственного измерения интервала DIN1-RPLY1 у ОЗУ ДВК-1.

Теперь подставим tn = 6T в официальную таблицу таймингов команд 1801ВМ1:



Времена выполнения команд:

одноадресных двухадресных
метод время метод адресации время
адресации выполнения источн. приемн. выполнения
0 8T+tn 0 0 8T+tn
1 20T+3tn <Испр. 1 0 18T+2tn
2 20T+3tn 2 0 18T+2tn
3 27T+4tn <Испр. 3 0 25T+3tn
4 21T+3tn 4 0 19T+2tn <Испр.
5 28T+4tn 5 0 26T+3tn
6 27T+4tn 6 0 25T+3tn
7 34T+5tn 7 0 32T+4tn <Испр.
0 1 26T+3tn <Испр.
Время выполнения команд 0 2 28T+3tn <Испр.
управления HALT=54T+7tn 0 3 31T+4tn <Испр.
команд IOT,BPT,EMT,TRAP 0 4 28T+3tn <Испр.
42T+5tn; команд устано- 0 5 32T+4tn <Испр.
вки и очистки признаков 0 6 31T+4tn <Испр.
8T+tn; максимальное 0 7 40T+5tn <Испр.
время ожидания ПДП 8T+ 1 1 28T+4tn <Испр.
+2tn для цикла ввод-па- 2 2 30T+4tn <Испр.
уза-вывод; максимальное 3 3 40T+6tn <Испр.
время от момента запро- 4 4 31T+4tn <Испр.
са прерывания до выбор- 5 5 42T+6tn <Испр.
ки первой команды ново- 6 6 40T+6tn <Испр.
го процесса 98T+12tn 7 7 56T+8tn <Испр.
(время выполнения самой
длинной команды + IOT)

В таблицах приведены времена исполнения для одноадресных команд
COM, INC, DEC, ADC, SBC, ASR, ASL, ROL, ROR, CLR, и для двухадресных
ADD, SUB, BIC, BIS, XOR. За T обозначен период тактовой частоты процессора,
tn-время между выдачей DIN/DOUT и приходом RPLY.и получим "официальные предсказания" для результатов приведённого выше теста:



Времена выполнения команд:

одноадресных
метод время
адресации выполнения
0 14T
1 38T
2 38T
3 51T
4 39T
5 52T
6 51T
7 64T

Время выполнения команд
управления HALT=96T
команд IOT,BPT,EMT,TRAP
72T; команд устано-
вки и очистки признаков
14T; максимальное
время ожидания ПДП 20T
для цикла ввод-пауза-вывод;
максимальное
время от момента запро-
са прерывания до выбор-
ки первой команды ново-
го процесса 170T
(время выполнения самой
длинной команды + IOT)

В таблицах приведены времена исполнения для одноадресных команд
COM, INC, DEC, ADC, SBC, ASR, ASL, ROL, ROR, CLR, и для двухадресных
ADD, SUB, BIC, BIS, XOR.В формате вывода результатов тестирования это выглядит так:

Предсказанные:


IOT : 72 ! Trap : 72 !
Nop : 14 ! SeC : 14 ! ClC : 14 !

R0 (R0) (R0)+ @(R0)+ -(R0) @-(R0) Addr @#Addr @Tab(R0)
Inc 14 38 38 51 39 52 51 51 64


Полученные:


IOT : 80 ! Trap : 80 !
Nop : 14 ! SeC : 14 ! ClC : 14 !

R0 (R0) (R0)+ @(R0)+ -(R0) @-(R0) Addr @#Addr @Tab(R0)
Inc 14 41 41 54 42 55 54 54 67


Как видим - при выполнении одноадресных команд с методами адресации операнда 1;2;3;4;5;6;7 реальный процессор ДВК-1 стабильно тратил на 3 такта больше, чем "идеальный".

При выполнении программных прерываний измеренное значение превысило предсказанное на 8 тактов.

...

В формате "официальной таблицы" - определённые в результате тестирования формулы быстродействия однооперандных команд процессора 1801ВМ1 в составе ДВК-1 выглядят так:



Времена выполнения команд:

одноадресных
метод время
адресации выполнения
0 8T+tn
1 23T+3tn
2 23T+3tn
3 30T+4tn
4 24T+3tn
5 31T+4tn
6 30T+4tn
7 37T+5tn

hobot
26.10.2012, 20:10
Не буду засорять тему!
Организационный момент, все выложенные автором тесты прилепил в разделе ДВК одним архивом с описанием
http://archive.pdp-11.org.ru/ukdwk_archive/dwkwebcomplekt/Patron_vm1test/


При разгоне ДВК-1 до 6 МГц и использовании памяти с задержкой выборки 300 нс ( напр. К1801РЕ2а ) - быстродействие регистровых команд составит:
610 тыс. оп/сек.

Это соответствует примерно производительности обычного ВМ2?
http://s1.hostingkartinok.com/uploads/images/2012/10/ea0f7d7e5ed4c10feb662ba2c3e6d2a2.png

Patron
26.10.2012, 23:14
все выложенные автором тесты прилепил в разделе ДВК одним архивомЗаглянув в каталог с тестами я обнаружил там 77 файлов - см. TESTs.rar (http://zx.pk.ru/attachment.php?attachmentid=37937) в приложении.



Это соответствует примерно производительности обычного ВМ2?В составе ДВК-1 и БК процессор 1801ВМ1 тратит очень много времени на ожидание памяти.

Формулы быстродействия 1801ВМ2 выглядят так:
http://s1.hostingkartinok.com/uploads/images/2012/10/802eaf3c45df171659222e4646225a6b.jpg

В формате описания ВМ1 - формулы для ВМ2 будут выглядеть так:



Времена выполнения команд:

одноадресных
метод время время
адресации выполнения ВМ1 выполнения ВМ2
0 8T+tn 8T+tn
1 23T+3tn 23T+3tn
Вообще, весьма похоже, что микропрограммы реализации большинства команд у ВМ1 и ВМ2 идентичны.

hobot
27.10.2012, 00:26
я обнаружил там 77 файлов
Несмотря на совпадения в названиях файлов (т.е повторы) архив TESTs.RAR из этого сообщения просто добавлю в ту же папку (в один архив) (http://archive.pdp-11.org.ru/ukdwk_archive/dwkwebcomplekt/Patron_vm1test/) как есть, без дополнительных комментариев, в текстовом файле есть ссылка на авторскую тему в форуме, думаю
такой вариант вполне приемлем? Поскольку я просто сделал КОПИ/ПАСТ, а к дополнительным файлам никакой информацией не располагаю.

Кстати говоря по поводу этой цифры в тестах для УК-НЦ, такой высокий показатель
на живых платах не видел ни разу. Иногда он ниже 580, но никогда не видел больше
610 (!) и то только на одной из плат, скрин естественно в эмуляторе был сделан.
Вот такое расхождение в значениях говорит о несовершенстве теста (УКНЦшного) или ньюансах конкретного аппарата (платы) ?

Titus
27.10.2012, 00:40
Вообще, весьма похоже, что микропрограммы реализации большинства команд у ВМ1 и ВМ2 идентичны.
Реализация может и идентична, но из-за предвыборки команды скорость выполнения должна быть разной.

hobot
27.10.2012, 16:54
Тема (близкая) созданная ранее http://zx.pk.ru/showthread.php?t=18184

Patron
29.10.2012, 14:30
Тесты продолжительности (в тактах) двухоперандных команд процессора 1801ВМ1 дали на ДВК-1 5.3 МГц следующие результаты:

1801VM1 MOV Timings Test v1.1 (http://zx.pk.ru/attachment.php?attachmentid=25141)



Scale: 256
Retry: 256
R0 (R0) (R0)+ @(R0)+ -(R0) @-(R0) Addr @#Addr @Tab(R0)

Mov R1 14 37 41 49 41 50 49 49 64
Mov (R1) 30 45 49 59 49 59 59 59 72
Mov (R1)+ 30 46 49 59 49 59 59 59 72
Mov @(R1)+ 43 59 62 72 62 73 73 73 84
Mov -(R1) 30 47 49 59 49 60 59 59 73
Mov @-(R1) 44 60 63 73 63 73 73 73 86
Mov Addr 43 59 62 73 62 73 73 73 85
Mov @Tab(R1) 56 73 73 85 73 86 85 85 98

R0 (R0) (R0)+ @(R0)+ -(R0) @-(R0) Addr @#Addr @Tab(R0)

MovB R1 14 37 41 49 41 51 49 49 64
MovB (R1) 30 46 49 59 49 60 59 59 73
MovB (R1)+ 30 46 49 59 49 60 59 59 73
MovB @(R1)+ 43 59 62 73 62 73 73 73 85
MovB -(R1) 30 47 49 59 49 60 59 59 73
MovB @-(R1) 44 60 63 73 63 73 73 73 86
MovB Addr 43 59 62 73 62 73 73 73 85
MovB @Tab(R1) 56 73 73 85 73 86 85 85 98



1801VM1 ADD & SUB Timings Test v1.0 (http://zx.pk.ru/attachment.php?attachmentid=25143)



Scale: 256
Retry: 400
R0 (R0) (R0)+ @(R0)+ -(R0) @-(R0) Addr @#Addr @Tab(R0)

Add R1 14 47 47 60 49 61 60 60 73
Add (R1) 30 55 55 69 56 70 69 69 82
Add (R1)+ 30 55 55 69 56 70 69 69 82
Add @(R1)+ 43 68 68 82 70 83 82 82 95
Add -(R1) 30 56 56 69 56 70 69 69 82
Add @-(R1) 44 69 69 82 70 83 82 82 96
Add Addr 43 68 68 82 70 83 82 82 95
Add @Tab(R1) 56 81 81 95 82 95 95 95 108

R0 (R0) (R0)+ @(R0)+ -(R0) @-(R0) Addr @#Addr @Tab(R0)

Sub R1 14 47 47 60 49 61 60 60 73
Sub (R1) 30 55 55 69 56 70 69 69 82
Sub (R1)+ 30 55 55 69 56 70 69 69 82
Sub @(R1)+ 43 68 68 82 70 83 82 82 95
Sub -(R1) 30 56 56 69 56 70 69 69 82
Sub @-(R1) 44 69 69 82 70 83 82 82 96
Sub Addr 43 68 68 82 70 83 82 82 95
Sub @Tab(R1) 56 81 81 95 82 95 95 95 108



1801VM1 CMP & BIT Timings Test v1.0 (http://zx.pk.ru/attachment.php?attachmentid=25155)



Scale: 256
Retry: 400
R0 (R0) (R0)+ @(R0)+ -(R0) @-(R0) Addr @#Addr @Tab(R0)

BiT R1 14 35 35 49 36 49 49 49 61
BiT (R1) 30 43 43 56 44 58 57 57 70
BiT (R1)+ 30 43 43 57 44 58 57 57 70
BiT @(R1)+ 43 57 57 70 58 71 70 70 83
BiT -(R1) 31 44 44 57 45 58 57 57 71
BiT @-(R1) 44 57 57 71 58 72 71 71 84
BiT Addr 43 57 57 70 58 71 70 70 83
BiT @Tab(R1) 56 70 70 83 71 84 83 83 96

R0 (R0) (R0)+ @(R0)+ -(R0) @-(R0) Addr @#Addr @Tab(R0)

BiTB R1 14 35 35 49 36 49 49 49 61
BiTB (R1) 30 43 43 57 44 58 57 57 70
BiTB (R1)+ 30 43 43 57 44 58 57 57 70
BiTB @(R1)+ 43 57 57 70 58 71 70 70 83
BiTB -(R1) 31 44 44 57 45 58 57 57 71
BiTB @-(R1) 44 57 57 70 58 72 70 71 84
BiTB Addr 43 57 57 70 58 71 70 70 83
BiTB @Tab(R1) 56 70 70 83 71 84 83 83 96

R0 (R0) (R0)+ @(R0)+ -(R0) @-(R0) Addr @#Addr @Tab(R0)

Cmp R1 14 35 35 49 36 49 49 49 61
Cmp (R1) 30 43 43 57 44 58 57 57 70
Cmp (R1)+ 30 43 43 57 44 58 57 57 70
Cmp @(R1)+ 43 57 57 70 58 71 70 70 83
Cmp -(R1) 31 44 44 57 45 58 57 57 71
Cmp @-(R1) 44 57 57 71 58 72 71 71 84
Cmp Addr 43 57 57 70 57 71 70 70 83
Cmp @Tab(R1) 56 70 70 83 71 84 83 83 96

R0 (R0) (R0)+ @(R0)+ -(R0) @-(R0) Addr @#Addr @Tab(R0)

CmpB R1 14 35 35 49 36 49 49 49 61
CmpB (R1) 30 43 43 56 44 58 56 56 70
CmpB (R1)+ 30 43 43 56 44 58 57 57 70
CmpB @(R1)+ 43 57 57 70 58 71 70 70 83
CmpB -(R1) 30 44 44 57 45 58 57 57 71
CmpB @-(R1) 44 57 57 70 58 72 70 70 84
CmpB Addr 43 56 56 70 58 71 70 70 83
CmpB @Tab(R1) 56 70 70 83 71 84 83 83 96




1801VM1 BIS & BIC Timings Test v1.0 (http://zx.pk.ru/attachment.php?attachmentid=25155)



Scale: 256
Retry: 400
R0 (R0) (R0)+ @(R0)+ -(R0) @-(R0) Addr @#Addr @Tab(R0)

BiC R1 14 47 47 60 49 61 60 60 73
BiC (R1) 30 55 55 69 56 70 69 69 82
BiC (R1)+ 30 55 55 69 56 70 69 69 82
BiC @(R1)+ 43 68 68 82 70 83 82 82 95
BiC -(R1) 30 55 55 69 57 70 69 69 82
BiC @-(R1) 44 69 69 82 70 83 82 82 96
BiC Addr 43 68 68 82 70 83 82 82 95
BiC @Tab(R1) 56 82 82 95 82 95 95 95 109

R0 (R0) (R0)+ @(R0)+ -(R0) @-(R0) Addr @#Addr @Tab(R0)

BiCB R1 14 47 47 60 49 61 60 60 73
BiCB (R1) 30 55 55 69 56 70 69 69 82
BiCB (R1)+ 30 55 55 69 56 70 69 69 82
BiCB @(R1)+ 43 68 68 82 70 83 82 82 95
BiCB -(R1) 31 55 55 69 57 70 69 69 82
BiCB @-(R1) 44 69 69 82 70 83 82 82 96
BiCB Addr 43 68 68 82 70 83 82 82 95
BiCB @Tab(R1) 56 82 82 95 82 96 95 95 109

R0 (R0) (R0)+ @(R0)+ -(R0) @-(R0) Addr @#Addr @Tab(R0)

BiS R1 14 47 47 60 49 61 60 60 73
BiS (R1) 30 55 55 69 56 70 69 69 82
BiS (R1)+ 30 55 55 69 56 70 69 69 82
BiS @(R1)+ 43 68 68 82 70 83 82 82 95
BiS -(R1) 31 55 55 69 57 70 69 69 82
BiS @-(R1) 44 69 69 82 70 83 82 82 96
BiS Addr 43 68 68 82 70 83 82 82 95
BiS @Tab(R1) 56 82 82 95 82 96 95 95 109

R0 (R0) (R0)+ @(R0)+ -(R0) @-(R0) Addr @#Addr @Tab(R0)

BiSB R1 14 47 47 60 49 61 60 60 73
BiSB (R1) 30 55 55 69 56 70 69 69 82
BiSB (R1)+ 30 55 55 69 56 70 69 69 82
BiSB @(R1)+ 43 68 68 82 70 83 82 82 95
BiSB -(R1) 31 55 55 69 57 70 69 69 82
BiSB @-(R1) 44 69 69 82 70 83 82 82 96
BiSB Addr 43 68 68 82 70 83 82 82 95
BiSB @Tab(R1) 56 82 82 95 82 96 95 95 109

Patron
29.10.2012, 17:00
Если взять исправленную "официальную таблицу" таймингов команд процессора 1801ВМ1 для двухоперандных команд типа ADD и добавить туда измеренные значения - получится так:



Времена выполнения команд:

двухадресных предсказанное измеренное
метод адресации время время разница
источн. приемн. выполнения выполнения
0 0 8T+tn 8T+tn 0
1 0 18T+2tn 18T+2tn 0
2 0 18T+2tn 18T+2tn 0
3 0 25T+3tn 25T+3tn 0
4 0 19T+2tn 19T+2tn 0
5 0 26T+3tn 26T+3tn 0
6 0 25T+3tn 25T+3tn 0
7 0 32T+4tn 32T+4tn 0
0 1 26T+3tn 29T+3tn +3
0 2 28T+3tn 29T+3tn +1
0 3 31T+4tn 36T+4tn +5
0 4 28T+3tn 31T+3tn +3
0 5 32T+4tn 37T+4tn +5
0 6 31T+4tn 36T+4tn +5
0 7 40T+5tn 43T+5tn +3
1 1 28T+4tn 31T+4tn +3
2 2 30T+4tn 31T+4tn +1
3 3 40T+6tn 46T+6tn +6
4 4 31T+4tn 32T+4tn +1
5 5 42T+6tn 47T+6tn +5
6 6 40T+6tn 46T+6tn +6
7 7 56T+8tn 60T+8tn +4


Для команд, не пишущих результат в память - совпадение предсказанных и измеренных результатов идеальное.
При выполнении завершающего команду цикла ЧТЕНИЕ-МОДИФИКАЦИЯ-ЗАПИСЬ ( цикл DATIO ) - реально команда выполняется немного медленнее, чем предсказано.

...
P.S.
В процессе изучения "официальной таблицы таймингов" из описания 1801ВМ1 - выяснилось, что её исходный вариант имеет ошибки с указанием числа ожиданий сигнала RPLY ( tn ) - практически в каждой строке.

Для сравнения - исходный и исправленный варианты таблицы:




Времена выполнения команд:

одноадресных двухадресных
метод время метод адресации время
адресации выполнения источн. приемн. выполнения
0 8T+tn 0 0 8T+tn
1 21T+3tn 1 0 18T+2tn
2 20T+3tn 2 0 18T+2tn
3 27T+3tn 3 0 25T+3tn
4 21T+3tn 4 0 20T+2tn
5 28T+4tn 5 0 26T+3tn
6 27T+4tn 6 0 25T+3tn
7 34T+5tn 7 0 32T+3tn
0 1 26T+2tn
Время выполнения команд 0 2 28T+2tn
управления HALT=54T+7tn 0 3 31T+3tn
команд IOT,BPT,EMT,TRAP 0 4 28T+2tn
42T+5tn; команд устано- 0 5 32T+3tn
вки и очистки признаков 0 6 31T+3tn
8T+tn; максимальное 0 7 40T+4tn
время ожидания ПДП 8T+ 1 1 28T+3tn
+2tn для цикла ввод-па- 2 2 30T+3tn
уза-вывод; максимальное 3 3 40T+5tn
время от момента запро- 4 4 31T+3tn
са прерывания до выбор- 5 5 42T+5tn
ки первой команды ново- 6 6 40T+5tn
го процесса 98T+12tn 7 7 56T+7tn
(время выполнения самой
длинной команды + IOT)




Времена выполнения команд:

одноадресных двухадресных
метод время метод адресации время
адресации выполнения источн. приемн. выполнения
0 8T+tn 0 0 8T+tn
1 20T+3tn <Испр. 1 0 18T+2tn
2 20T+3tn 2 0 18T+2tn
3 27T+4tn <Испр. 3 0 25T+3tn
4 21T+3tn 4 0 19T+2tn <Испр.
5 28T+4tn 5 0 26T+3tn
6 27T+4tn 6 0 25T+3tn
7 34T+5tn 7 0 32T+4tn <Испр.
0 1 26T+3tn <Испр.
Время выполнения команд 0 2 28T+3tn <Испр.
управления HALT=54T+7tn 0 3 31T+4tn <Испр.
команд IOT,BPT,EMT,TRAP 0 4 28T+3tn <Испр.
42T+5tn; команд устано- 0 5 32T+4tn <Испр.
вки и очистки признаков 0 6 31T+4tn <Испр.
8T+tn; максимальное 0 7 40T+5tn <Испр.
время ожидания ПДП 8T+ 1 1 28T+4tn <Испр.
+2tn для цикла ввод-па- 2 2 30T+4tn <Испр.
уза-вывод; максимальное 3 3 40T+6tn <Испр.
время от момента запро- 4 4 31T+4tn <Испр.
са прерывания до выбор- 5 5 42T+6tn <Испр.
ки первой команды ново- 6 6 40T+6tn <Испр.
го процесса 98T+12tn 7 7 56T+8tn <Испр.
(время выполнения самой
длинной команды + IOT)
Так ( например ) авторы "официальной таблицы" ошибочно указали, что в ходе выполнения команды ADD @Tab(R1), @Tab(R0) процессор 1801ВМ1 ожидает сигнал RPLY - 7 раз, тогда как на самом деле - 8, чтобы:

1 - прочитать код команды;
2 - прочитать смещение первого аргумента
3 - прочитать адрес первого аргумента
4 - прочитать первый аргумент
5 - прочитать смещение второго аргумента
6 - прочитать адрес второго аргумента
7 - прочитать второй аргумент
8 - записать результат

hobot
29.10.2012, 18:56
2 - прочитать смещение первого аргумента
3 - прочитать адрес первого аргумента

Не совсем понимаю различие этих операций? Разве смещение не есть адрес?
Может авторы эти две операции объединяли получая 7 а не 8 значение?

А стоп! Тогда бы и для второго аргумента это было бы.
Глупость написал. Но различие всё равно не совсем улавливаю,
В любом случае.

Patron
29.10.2012, 19:04
Не совсем понимаю различие этих операций? Разве смещение не есть адрес?При косвенно-индексном методе адресации типа @Offset(Rn) - прибавление смещения к содержимому регистра даёт адрес адреса, поэтому, чтобы прочитать значение - нужно:

1. Прочитать смещение.
2. Прибавить смещение к регистру.
3. Прочитать адрес.
4. Прочитать значение.

form
30.10.2012, 07:16
Если интересно, для сравнения могу отсканировать главу про время выполнения команд из документации от Э100-25 :)

Patron
30.10.2012, 14:01
Если интересно, для сравнения могу отсканировать главу про время выполнения команд из документации от Э100-25Конечно интересно!

form
30.10.2012, 15:24
Конечно интересно!

Электроника 100-25, книга 3, глава 4. Время выполнения команд. (http://pdp-11.org.ru/~form/files/pdp-11/timing-e100_25.djvu)

Patron
18.12.2012, 13:00
Если свести всё разнообразие таймингов команд процессора 1801ВМ1 в единую "формулу быстродействия", позволяющую точно определить число тактов, необходимых процессору для выполнения любой команды ( при возможном нахождении различных операндов в различных типах памяти ), то формула в самом общем виде будет выглядеть так:

[Время выполнения команды] = [Суммарное время всех циклов шины] + [Суммарное время всех штрафов].

Процессор 1801ВМ1 использует следующие циклы шины Q-Bus:

1. DATI ( Чтение ) - для выборки команд и не модифицируемых данных из памяти.
2. DATO / DATOB ( Запись / Запись байта ) - только в командах MOV и MOVB для записи результата в память.
3. DATIO ( Чтение-Модификация-Запись ) - для доступа ко всем модифицируемым данным в памяти.

Время выполнения циклов процессором 1801ВМ1 зависит от продолжительности периода тактовой частоты T и времени задержки памяти tn:

DATI : [ 7*T+tn]
DATO : [10*T+tn]
DATIO: [13*T+tn+tn]
В дальнейшем изложении (для простоты) множитель *T упоминаться не будет, поэтому формулы продолжительности циклов шины будут иметь такой вид:

DATI : [7+tn]
DATO : [10+tn]
DATIO: [13+2tn]
Время задержки памяти (в тактах) для ОЗУ ДВК-1: tn = 6, для ПЗУ ДВК-1: tn = 2.

Поэтому, например - в ОЗУ ДВК-1 цикл чтения ( DATI ) будет выполняться за 7 + 6 = 13 тактов.

...

Теперь рассмотрим какие штрафы быстродействия (в тактах) имеет процессор 1801ВМ1 при выполнении команд:

1. [Штраф исполнения] = 1 - для всех команд.
2. [Штраф второго операнда] = 1 - для команд, использующих два операнда,
если один из них в памяти.
3. [Штраф отмены предвыборки] = 2 - для команд, выполняющих больше одного
цикла шины.
4. [Штраф префиксной адресации] = 1 - для каждого операнда с
префиксной адресацией.
5. [Штраф невзаимности] = 5 ( для MOV = 4 ) - для команд, у которых
первый операнд не обращается к памяти,
а второй - обращается.Кроме того, команда MOV имеет при некоторых режимах адресации дополнительные штрафы от 1 до 4 тактов, природа которых пока совсем не понятна.

Теперь попробуем определить при помощи предложенного формализма продолжительность выполнения процессором 1801ВМ1 в ОЗУ ДВК-1 команды
Add @TAB(R1), -(R0)1. Сначала определим используемые циклы шины и их продолжительность: DATI (чтение кода команды) + DATI (чтение смещения к адресу первого операнда) + DATI (чтение адреса первого операнда) + DATI (чтение первого операнда) + DATIO (чтение-модификация-запись второго операнда) = [7+tn]+[7+tn]+[7+tn]+[7+tn]+[13+2tn] = 77 тактов.

2. Теперь определим используемые штрафы: [Штраф исполнения]+[Штраф второго операнда]+[Штраф отмены предвыборки]+[Штраф префиксной адресации ( за второй операнд ) ] = 1+1+2+1 = 5 тактов.

3. Определим суммарную продолжительность выполнения команды: 77 + 5 = 82 такта ( что полностью соответствует измеренной величине ) .

Titus
18.12.2012, 15:54
2. DATO / DATOB ( Запись / Запись байта ) - только в командах MOV и MOVB для записи результата в память.
А у CLR и подобных команд какой цикл?

NovaStorm
18.12.2012, 16:38
Так команды с байтами получаются быстрее или медленнее? И насколько?

Patron
18.12.2012, 16:59
А у CLR и подобных команд какой цикл?


Так команды с байтами получаются быстрее или медленнее? И насколько?
Таблицы таймингов рулят.


Scale: 256
Retry: 300

Return : 35 ! RtI : 46 ! RtT : 46 ! IOT : 80 ! Trap : 80 !

Add #6,R0 : 30

SOB : 22 ! Br : 17 ! BCS : 17 ! BCC : 17 ! Nop : 14 ! SeC : 14 ! ClC : 14 !

R0 (R0) (R0)+ @(R0)+ -(R0) @-(R0) Addr @#Addr @Tab(R0)
Tst 14 29 29 42 30 43 42 42 56
TstB 14 29 29 42 30 43 42 42 56
MTPS 26 35 35 48 35 49 48 48 61
MFPS 14 41 41 54 41 55 54 54 67
XOr 14 43 43 56 44 56 56 56 70
SXt 14 41 41 54 41 55 54 54 67
SwaB 14 41 41 54 41 55 54 54 67
Clr 14 41 41 54 41 55 54 54 67
ClrB 14 41 41 54 41 55 54 54 67
Inc 14 41 41 54 41 55 54 54 67
IncB 14 41 41 54 41 55 54 54 67
Dec 14 41 41 54 41 55 54 54 67
DecB 14 41 41 54 41 55 54 54 67
AdC 14 41 41 54 41 55 54 54 67
AdCB 14 40 40 54 41 55 54 54 67
SbC 14 41 40 54 41 55 54 54 67
SbCB 14 40 41 54 41 55 54 54 67
ASL 14 41 41 54 41 55 54 54 67
ASLB 14 41 41 54 41 55 54 54 67
ASR 14 41 40 54 41 55 54 54 67
ASRB 14 41 41 54 41 55 54 54 67
RoL 14 40 41 54 41 55 54 54 67
RoLB 14 40 40 54 41 55 54 54 67
RoR 14 41 40 54 41 55 54 54 67
RoRB 14 41 41 54 41 55 54 54 67
Com 14 40 41 54 41 55 54 54 67
ComB 14 40 41 54 41 55 54 54 67
Neg 14 41 40 54 41 55 54 54 67
NegB 14 41 41 54 41 55 54 54 67
Jmp 24 26 35 35 35 48
Call 39 40 49 49 49 61

BiS R0,(R1) : 42
BiS R0,(R1) + Nop : 58
Handler cycles : 256
Handler : 165
BiS+Nop+Intr+Handler : 315
Interrupts count : 256
BiS + Nop + Interrupt : 150
Interrupt only : 92
По идее - во 2-й и 3-й колонках везде должно быть 40 тактов, а не 41.

NovaStorm
19.12.2012, 14:12
>Таблицы таймингов рулят.
Это конечно, но элементарных вопросов, когда всё познаёшь с нуля не избежать.
Как я понимаю по таблице, с байтами команды работают то же время, что и со словами. Это же таблица для однооперандных команд? И почему время выполнения OPR @(R0)+ и ORP @-(R0) отличается на такт? Неужели из-за того, что постинкремент мог параллелиться с основной командой?

Patron
19.12.2012, 14:43
И почему время выполнения OPR @(R0)+ и ORP @-(R0) отличается на такт? Неужели из-за того, что постинкремент мог параллелиться с основной командой?Именно!

Вообще, независимая параллельная работа отдельных блоков ( шинного, управляющего и арифметического ) применяется в процессорах ВМх везде, где только можно.

Разработчики стремились сделать так, чтобы на каждом такте каждый блок процессора вносил максимальный вклад в итоговое быстродействие.

Например, судя по итогам проведённого тестирования - шинный блок 1801ВМ1 сам начинает (предположительно) предвыборку кода следующей команды, пока управляющий блок ещё не раскодировал текущую. Из-за этого в тех случаях, когда текущая команда запрашивает дополнительный цикл шины ( чтобы прочитать или записать операнд ) - происходит удлинение выполнения команды из-за отмены предвыборки (это может быть и просто задержка получения исполнительного адреса). Штраф отмены предвыборки у 1801ВМ1 составляет 2 такта ( или, возможно, только 1 такт - это ещё предстоит уточнить ).

NovaStorm
19.12.2012, 14:48
Ого, таки не лаптем щи у нас хлебали! =)

CodeMaster
19.12.2012, 16:53
Ого, таки не лаптем щи у нас хлебали! =)

Не у нас, вроде, а в DEC. Или, как в случае с 580ИК80, контактные площадки рулят? ;-)

Patron
19.12.2012, 16:58
Не у нас, вроде, а в DEC.Только если микроядро LSI-11 может осуществлять несколько операций параллельно, как это делает 1801ВМ1.

CodeMaster
19.12.2012, 23:22
Только если микроядро LSI-11 может осуществлять несколько операций параллельно, как это делает 1801ВМ1.

Я наверняка могу сильно ошибаться, поскольку LSI-11 я не тестировал, но ИМХО параллелизм ВМ1 (и скорее всего и LSI-11) основаны на использовании микрокода. И ортогональность системы команд, на мой вгляд ,тому тоже подтверждение. Такая чёткая структура команд позволяет легче побитно делить их между блоками процессора и выполнять параллельно. А та предвыборка шинного блока, о которой ты писал, может и наше изобретение.

NovaStorm
20.12.2012, 09:24
Не у нас, вроде, а в DEC.
Не, реализация-то наша. Архитектура PDP вообще из-за постоянного доступа к памяти хреново параллелится. DEC более-менее приличную архитектуру только к альфе осилила и то, грелась она как печка, а производительности было не так уж сильно больше чем у PPro.

CodeMaster
20.12.2012, 09:54
Архитектура PDP вообще из-за постоянного доступа к памяти хреново параллелится. DEC более-менее приличную архитектуру только к альфе осилила и то, грелась она как печка, а производительности было не так уж сильно больше чем у PPro.

Ну, это совсем другая история: когда параллельно работают отдельные блоки процессора и настоящая суперскалярность с конвейером и множеством дублирующих блоков. Вопрос в том, что например в Z80 с его "жестким" ядром нужен был бы именно конвейер и допблоки, а в ВМ1 это брал на себя микрокод. И опять же в современных гибридных процессорах, суперскалярностью управляет микрокод, без него процессор был слишком сложен и малоэффективен. Вопрос в том, что эти преимущества микрокода стали использовать у нас или уже в DEC.

NovaStorm
20.12.2012, 10:16
а в ВМ1 это брал на себя микрокод
Разве микрокод может на себя _эффективно_ такое брать?

Вопрос в том, что эти преимущества микрокода стали использовать у нас или уже в DEC.
Мне кажется это сделал Крей ещё в 60х с CDC6600, но микрокодом у него там и не пахло.

CodeMaster
20.12.2012, 11:04
Разве микрокод может на себя _эффективно_ такое брать?

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

Меня вот, кстати, интересует другое: вот Patron тратит время на исследование "черного ящика" ВМ1, люди бились с ULA, CID'ом и кучей других чипов. Почему техдокументацию на них не выкладывают в открытый доступ? На Западе она наверное есть, но охраняют интелектуальную собственность которая может иметь какое-то (какое?) применение, а у нас, я так полагаю с интелектуальной собственностью проблем нет, но документация скорее всего не сохранилась. Как бы вот выйти на свой НИИПЭМ, они проектировали чипы для "Процессора" и "Электроники". "Процессор" давно изчез, а НИИПЭМ вроде ещё делают заказные чипы (но, сомневаюсь что и они сохранили мукалатуру).

NovaStorm
20.12.2012, 11:17
>но, сомневаюсь что и они сохранили мукалатуру
Ну году в 2004 кажется, на Ангстреме я видел и 8" диски, и магнитную ленту с "магнитофонами", и даже перфоленту. Долбоклюев для неё правда не помню там.
Так что всё могло и сохраниться.

CodeMaster
20.12.2012, 11:24
Ну году в 2004 кажется, на Ангстреме

2004 и 2013 (почти) это большая разница. И Ангстрем это Ангстрем, а завод "Процессор" уже наполовину застроен жилыми домами. НИИПЭМ весь сдан в аренду, сами там они занимаю чуть, точно знаю, что проектируют, но производство видимо сторонее. И вообще большинство старых "зубров" с тех заводов с кем я встречался хранят только "светлую память". Кто-то что-то спёр в своё время, но во-первых в основном то что имело цену, а во-вторых документация в то время (199Х) возможно ещё имела какой-то гриф.

Titus
20.12.2012, 13:01
Про документацию я уже все подробно писал в дргугих темах. На ВМ2 мне лично дал Бурмистров, один из разработчиков. На ВМ1 я не успел попросить, да и счел некой наглостью, т.к. одной ВМ2 его замордровал изрядно. На Ангстреме ничего давно нет, т.к. люди, разрабатывающие это уже давно ушли, и все только у них. Люди, разрабатывающие ВМ3 и ВМ4 уже неживы.

---------- Post added at 13:01 ---------- Previous post was at 12:58 ----------

Дале - ВМ2 так же вскрыл Феликс, и сфоткал своим микроскопом, и даже частично срисовал. Но отвлекся на калькуляторы, и неизвестно, когда к нему вернется. Вполне возможно, что можно так же сфоткать ВМ1 и все остальные, и прекрасно разобрать на блоки. Сейчас такие микроскопы все больше становятся доступны широкой публике.

Patron
20.12.2012, 13:27
Люди, разрабатывающие ВМ3 и ВМ4 уже неживы.Здесь Отрохов рассказывает о текущем положении дел с разработкой и производством 1801ВМ3 (http://forum.ixbt.com/topic.cgi?id=64:3394#15) ( на которых у нас до сих пор делают большинство военной авиа-космической бортовой аппаратуры ):



Позвонил только что Фортинский, доложился про 1806ВМ3/4. Оказывается 8мГГц, наш с ним вариант, был всё-таки уровня 1.8мкм. а не 1.2. А для бортовиков из Субмикрона они только 1806ВМ3 не масштабировали, а полностью переделали, как говорит, под уровень 0.8мкм и получили на измерениях реально 32мГГц, а в ТУ записали нужные им 16мГГц, который сейчас Ангстрем и выпускает понемногу. А вот 1806ВМ4 оказался ненужен на такой частоте. Фортинский им предлогал сделать ВМ3 и ВМ4 на одном кристалле, но те отказались.

Titus
20.12.2012, 13:49
Здесь Отрохов рассказывает о текущем положении дел с разработкой и производством 1801ВМ3 (http://forum.ixbt.com/topic.cgi?id=64:3394#15) ( на которых у нас до сих пор делают большинство военной авиа-космической бортовой аппаратуры ):
1801 и 1806 - это, на сколько я понимаю, не одно и то же.

Patron
20.12.2012, 14:14
1801 и 1806 - это, на сколько я понимаю, не одно и то же.Да, верно - 1801ВМ3/4 разрабатывала бригада Сергея Коваленко, а Отрохов с Фортинским, насколько я понял - сделали в начале 2000-х КМОП-эмулятор абстрактной модели (т.е. спецификации) ВМ3, который не имеет к эмулируемому оригиналу прямого отношения.

CodeMaster
20.12.2012, 16:11
Про документацию я уже все подробно писал в дргугих темах.

Я читал. Да и сам я это вижу по жизни. Но, вопрос по Западу остаётся - неужели там то же до сих пор ракеты на PDP-11 делают? И по нам тоже, ведь не только чисто наши разработки были бы интересны, но и те же 580ИК и 1810, где ведь только их не делали. Или техдокументация только в одном месте была, а на производствах только шаблоны?

NovaStorm
20.12.2012, 16:21
неужели там то же до сих пор ракеты на PDP-11 делают?
На 8080 и sl и embedded версиях 386х АФАИК. Но это старые типа сайдвиндера, про новые инфы не видел.
Хотя вот тут http://www.defencetalk.com/forums/air-force-aviation/f-22-cant-fire-aim-9x-11839/ говрят ещё про i960, но где он конкретно стоит, не упоминают.

hobot
21.12.2012, 02:35
Фортинский им предлогал сделать ВМ3 и ВМ4 на одном кристалле, но те отказались. - почему интересно? То есть это же (моим ненаучным взглядом)
явный плюс в пользу миниатюризации, скорости работы и прочь. Мотив отказа там не обсуждается к сожалению, причин конечно множество может быть.

---------- Post added at 01:57 ---------- Previous post was at 01:52 ----------


вот Patron тратит время на исследование "черного ящика" ВМ1
Что даёт ощутимые плоды - во первых данные полученные и описанные в этой теме,
второе - эмулятор действительно очень точный по скорости и видимо не привязан
при этом ни к звуку ни к кадрам ? )
2>Patron : а насколько сложно (ламерский вопрос!) на базе существующего эмулятора ДВК (ВМ1) - сделать "очень точную" БК0010-01 ? Благо софта под него уже искать-разыскивать не нужно.

---------- Post added at 02:35 ---------- Previous post was at 01:57 ----------


сделать "очень точную" БК0010-01 ?
В сумме с ДВК - получился бы вполне такой КУВТ-86 )

CodeMaster
21.12.2012, 08:38
Что даёт ощутимые плоды - во первых данные полученные и описанные в этой теме, второе - эмулятор действительно очень точный по скорости и видимо не привязан при этом ни к звуку ни к кадрам ? )

Кто бы спорил. Я заслуг Patron нисколько не умоляю, мне интересно совсем другое, ладно ВМ1 и LSI-11 использовались в оборонке (хотя думается сейчас это совсем не актуально) но почему до сих пор закрыты ULA, AY, SID и т.д., смысл?

Patron
21.12.2012, 12:21
насколько сложно (ламерский вопрос!) на базе существующего эмулятора ДВК (ВМ1) - сделать "очень точную" БК0010-01 ?В этой теме мы обсуждаем тайминги команд.

С точки зрения таймингов - БК отличается от ДВК-1 тем, что там шину регулярно забирает видеоконтроллер. Чтобы узнать точные тайминги команд для всех типовых моделей БК - надо запустить на них имеющиеся тесты.

Сам я этого сделать не могу, т.к. БК у меня нет, а желающих помочь в тестировании пока не нашлось.

Titus
21.12.2012, 12:45
Кто бы спорил. Я заслуг Patron нисколько не умоляю, мне интересно совсем другое, ладно ВМ1 и LSI-11 использовались в оборонке (хотя думается сейчас это совсем не актуально) но почему до сих пор закрыты ULA, AY, SID и т.д., смысл?
ULA вскрыли и подробно описали в целой книге. SID тоже. Про AY мне ничего не известно.

CodeMaster
21.12.2012, 16:49
ULA вскрыли и подробно описали в целой книге. SID тоже.

Я знаю, но всё же реверсинжинерингом насколько я знаю, или прям до последнего транзистора?

goodboy
21.12.2012, 22:45
Я знаю, но всё же реверсинжинерингом насколько я знаю, или прям до последнего транзистора?

скорее до последнего транзистора "with the decapsulation"
http://www.zxdesign.info/book/insideULA.shtml

извиняюсь за оффтоп - вспомнил что у меня валяется плата ZX НАРодныйКОМпьютер

http://i230.photobucket.com/albums/ee81/ex0l0n/photo007-1.jpg

один чип грубо говоря ULA128, другой AY+обвязка ВГ

hobot
22.12.2012, 12:18
Сам я этого сделать не могу, т.к. БК у меня нет, а желающих помочь в тестировании пока не нашлось.
Написал в ЛС! )

Patron
07.02.2013, 15:06
Сравнение времени выполнения байтовых и словных команд на CPU и PPU УКНЦ:

Мнемоника-1 CPU PPU Циклы Мнемоника-2 CPU PPU Циклы
-----------------------------------------------------------------------------

MOV Rn,(Rn) 33.13 36 W MOVB Rn,(Rn) 40.62 52 RMW
CMP Rn,(Rn) 27.90 40 R CMPB Rn,(Rn) 27.90 40 R
BIT Rn,(Rn) 27.90 40 R BITB Rn,(Rn) 27.90 40 R
BIC Rn,(Rn) 40.62 56 RMW BICB Rn,(Rn) 40.62 52 RMW
BIS Rn,(Rn) 40.62 56 RMW BISB Rn,(Rn) 40.62 52 RMW
XOR Rn,(Rn) 40.62 56 RMW
ADD Rn,(Rn) 40.62 56 RMW
SUB Rn,(Rn) 40.62 56 RMW

CLR (Rn) 33.13 36 W CLRB (Rn) 40.62 52 RMW
COM (Rn) 40.62 56 RMW COMB (Rn) 40.62 52 RMW
INC (Rn) 40.62 56 RMW INCB (Rn) 40.62 52 RMW
DEC (Rn) 40.62 56 RMW DECB (Rn) 40.62 52 RMW
NEG (Rn) 40.62 56 RMW NEGB (Rn) 40.62 52 RMW
TST (Rn) 27.90 40 R TSTB (Rn) 27.90 40 R
ROL (Rn) 40.62 56 RMW ROLB (Rn) 40.62 52 RMW
ROR (Rn) 40.62 56 RMW RORB (Rn) 40.62 52 RMW
ASR (Rn) 40.62 56 RMW ASRB (Rn) 40.62 52 RMW
ASL (Rn) 40.62 56 RMW ASLB (Rn) 40.62 52 RMW
ADC (Rn) 40.62 56 RMW ADCB (Rn) 40.62 52 RMW
SWAB(Rn) 40.62 56 RMW MFPS (Rn) 40.62 52 RMW
SXT (Rn) 33.13 36 W

Titus
07.02.2013, 15:27
И подпись - dr.Titus)

Patron
07.02.2013, 15:40
И подпись - dr.Titus)Может, прямо на этом месте оформить от своего имени, с подписью и исходником теста, а это и предыдущее своё сообщение я потом удалю.

---------- Post added at 14:40 ---------- Previous post was at 14:38 ----------

Только код в окне лучше взять из верхнего сообщения, открыв его в режиме QUOTE - я содержимое блока CODE основательно подредактировал, чтобы нормально влезало.

hobot
07.02.2013, 16:03
У меня форум третий день не работает нормально ! Не знаю в чём причина (
Где третью версию теста брать? У меня вторая из поста Alex_K. Готовлю дискету для
живых аппаратиков я.

Titus
07.02.2013, 16:33
Может, прямо на этом месте оформить от своего имени, с подписью и исходником теста, а это и предыдущее своё сообщение я потом удалю.
Да ладно, можно и без автора)

nzeemin
16.02.2013, 20:47
Сравнение времени выполнения байтовых и словных команд на CPU и PPU УКНЦ:

Как здесь интерпретировать цифры в колонках CPU и PPU?
Это такты или какие-то чисто условные попугаи?

Patron
16.02.2013, 20:50
Как здесь интерпретировать цифры в колонках CPU и PPU?Это такты, которые измерил Titus.

nzeemin
16.02.2013, 22:52
Приведённые выше рассуждения и измерения в основном касаются ВМ1. Правильно ли я понимаю, что в плане быстродействия ВМ2 единственное существенное различие -- это предвыборка команд? Есть ли другие различия? Совпадают ли результаты тестов ВМ2 с результатами ВМ1?

Patron
16.02.2013, 23:07
Есть ли другие различия? Совпадают ли результаты тестов ВМ2 с результатами ВМ1?Сложно сказать. Я такое сравнение не проводил.

Если обращения ЦП УКНЦ к памяти не замедляются работой видеоконтроллера - он должен иметь такие же тайминги в УКНЦ, как и в ДВК-2М. В таком случае можно составить универсальную формулу быстродействия 1801ВМ2 на основе тестирования ЦП УКНЦ.

На следующей неделе напишу все необходимые тесты.

Alex_K
16.02.2013, 23:24
... Правильно ли я понимаю, что в плане быстродействия ВМ2 единственное существенное различие -- это предвыборка команд? ...
Да, предвыборка команд в 1801ВМ2 играет большую роль, т.к. следующая команда читается из памяти во время дешифрации текущей. И может произойти такая ситуация, что дешифрация команды завершилась, требуется обращение на шину для обмена, а чтение следующей команды еще идет.
Тут для выяснения влияния предвыборки неплохо сделать тесты из двух команд, одна из которых занимает одно слово, а вторая - два. В этом случае предвыборка будет работать на команду из двух слов, а на команду из одного не будет.
Есть еще интересный тест для выяснения из команды MOV R0,(R1)+, где R0=010021, т.е. команда записывает сама себя на следующий адрес для исполнения. Т.к. запись происходит по следующему адресу исполнения, то предвыборка также не будет работать. Чтобы команда не затерла всю память, то в УКНЦ в магистрали ЦП есть ловушка адреса, возникнет прерывание, соответственно цикл можно начать сначала. В этом случае придется делать скидку на время прерывания и возврата из него.

Titus
17.02.2013, 02:36
Как здесь интерпретировать цифры в колонках CPU и PPU?
Это такты или какие-то чисто условные попугаи?
Это такты, замерянные программой TSSPD, которую я выкладывал, причем даже в исходниках. Только не помню, на турбо или простом реале замерял.

Titus
17.02.2013, 05:35
Есть еще интересный тест для выяснения из команды MOV R0,(R1)+, где R0=010021, т.е. команда записывает сама себя на следующий адрес для исполнения. Т.к. запись происходит по следующему адресу исполнения, то предвыборка также не будет работать. Чтобы команда не затерла всю память, то в УКНЦ в магистрали ЦП есть ловушка адреса, возникнет прерывание, соответственно цикл можно начать сначала. В этом случае придется делать скидку на время прерывания и возврата из него.

Добавил кое-что подобное в тест TSSPD.

Интересно, что на EmuStudio у меня в ПП не реализован механизм обновления кеша, если идет запись в слово с адресом = PC. А на ЦП реализован. Видимо, решил, что все равно все надо переписывать заново, и нет смысла реализовывать в том виде, как это есть сейчас. Словомм, тест на EmuStudio показывает разное время выполнения команд на ЦП при попадании в кэш, и при непопадании.

http://s42.radikal.ru/i097/1302/2d/737875d08036.png

Позапускайте на реалах.

Titus
17.02.2013, 13:28
Ну че на реале-то никто не тестирует? )

NovaStorm
17.02.2013, 14:39
Ну че на реале-то никто не тестирует? )
У меня на реале только винт пока подключён, а кое-кто тут поддержку реального винта в эмуле не делает, из-за чего перезаписывать его образом каждый раз ломает =Р
Да и на работе оно.

hobot
17.02.2013, 18:44
Ну че на реале-то никто не тестирует? )
Терпение, дождусь тестов от Patrona и тогда уж точно на всех платках своих прогоню всё ) Эту версию теста сейчас добавлю (обновлю на сборнике программ в теме софта)

---------- Post added at 18:44 ---------- Previous post was at 18:36 ----------

Titus
17.02.2013, 18:58
Терпение, дождусь тестов от Patrona и тогда уж точно на всех платках своих прогоню всё ) Эту версию теста сейчас добавлю (обновлю на сборнике программ в теме софта)
Чего точно делать не стоит, это промежуточные версии добавлять в сборники.

hobot
17.02.2013, 19:17
это промежуточные версии добавлять в сборники.
А если сборник рассматривать как динамический ресурс ?
Я же и так половину тестов до сих пор не могу собрать (найти-отыскать), просто потому что их по разным темам в разных сообщениях раскидали !!! В целом - я просто пытаюсь всё в одном месте собрать и поддерживать актуальность, к тому-же по теме же (Софт для УК-НЦ всмысле). Это "динамический форумный дискетка", вот! )

Titus
17.02.2013, 20:57
Обновил чуть выше тест до 0.1f.

---------- Post added at 20:57 ---------- Previous post was at 20:56 ----------


Я же и так половину тестов до сих пор не могу собрать (найти-отыскать), просто потому что их по разным темам в разных сообщениях раскидали !!! В целом - я просто пытаюсь всё в одном месте собрать и поддерживать актуальность, к тому-же по теме же (Софт для УК-НЦ всмысле). Это "динамический форумный дискетка", вот! )
Сохраняй у себя в специальном хламнике полуверсий, если боишься потерять. А на сборники не надо, иначе разойдутся недоверсии у народа, и никто не будет знать, какая версия финальная, имхо. А так, конечно, делай, как пожелаешь)

Alex_K
17.02.2013, 21:04
Обновил чуть выше тест до 0.1f.
Есть еще идея - MOV @R0,(R0)+. Т.е. команда читает содержимое ячейки и записывает ее обратно и переходит к следующей. В качестве теста можно задать значение R0, равное адресу команды + 2. В итоге будет записывать по адресу предвыборки и предвыборка будет нарушаться. Если же задать в качестве значения R0, скажем ноль, то предвыборка нарушаться не будет и в разнице исполнения этих команд можно увидеть примерное время чтения из памяти.

Titus
17.02.2013, 21:14
Есть еще идея - MOV @R0,(R0)+. Т.е. команда читает содержимое ячейки и записывает ее обратно и переходит к следующей. В качестве теста можно задать значение R0, равное адресу команды + 2. В итоге будет записывать по адресу предвыборки и предвыборка будет нарушаться. Если же задать в качестве значения R0, скажем ноль, то предвыборка нарушаться не будет и в разнице исполнения этих команд можно увидеть примерное время чтения из памяти.
Да, тоже можно)

hobot
17.02.2013, 21:19
Сохраняй у себя в специальном хламнике полуверсий
Есть один минус в твоём предложении - поскольку ты файлы с одинаковыми именами выкладываешь (и архивы). Узнать какая это версия можно только запустив - это минус в плане собирания промежуточных в ожидании финальной. Если бы авторы тестов как Patron оформляли бы свои темы было бы счастье )

Уже заменил обновил версию теста тут > http://zx.pk.ru/showpost.php?p=575127&postcount=405

Titus
17.02.2013, 21:53
Обновил выше до 0.1g, с учетом предложения Alex_K.

Alex_K
18.02.2013, 00:22
Обновил выше до 0.1g, с учетом предложения Alex_K.
Titus, ну и что Вы написали? Неужто предвыборка так ускоряет операции?
УКНЦ литеры 7 с 1515ХМ1-031.
Время исполнения в ПП:

http://kisly-alexey.pisem.net/TSSPD/XM1-7/3/CASH_PP_1.jpg
http://kisly-alexey.pisem.net/TSSPD/XM1-7/3/CASH_PP_2.jpg

Время исполнения в ЦП:

http://kisly-alexey.pisem.net/TSSPD/XM1-7/3/CASH_CP.jpg

Titus
18.02.2013, 00:27
Titus, ну и что Вы написали? Неужто предвыборка так ускоряет операции?
Получается, что так)

nzeemin
18.02.2013, 00:31
Alex_K, а можно все страницы сфотографировать, пожалуйста?

Titus
18.02.2013, 00:33
Заметьте, промах кэша занимает лишние 52 такта как для ПП, так и для ЦП. Что интересно.

---------- Post added at 00:32 ---------- Previous post was at 00:32 ----------


Alex_K, а можно все страницы сфотографировать, пожалуйста?
Да, это актуально, чтобы понимать все соотношения и базовые команды.

---------- Post added at 00:33 ---------- Previous post was at 00:32 ----------

И машинка какая-то с некратными 4 таймингами. Хорошо бы на кратной протестить.

Alex_K
18.02.2013, 00:34
Неужто предвыборка так ускоряет операции?

Получается, что так)
Надеюсь будет теоретическое обоснование полученных результатов?
Если предвыборка идет на две команды, то можно сделать еще тест команды MOV @R,(R)+ с адресом исполняемой команды + 4.

Titus
18.02.2013, 00:35
Так же интересно, что кэш не влияет на команды ветвления. Но это я уже давно измерил когда-то, и в EmuStudio так же.

---------- Post added at 00:35 ---------- Previous post was at 00:34 ----------


Надеюсь будет теоретическое обоснование полученных результатов?
Если предвыборка идет на две команды, то можно сделать еще тест команды MOV @R,(R)+ с адресом исполняемой команды + 4.
По документации она на одну команду.

Alex_K
18.02.2013, 00:35
И машинка какая-то с некратными 4 таймингами. Хорошо бы на кратной протестить.
Уже ночь на дворе, менять не буду.

Titus
18.02.2013, 00:36
Надеюсь будет теоретическое обоснование полученных результатов?
Надеюсь) Вы же хорошо УКНЦ знаете)

Alex_K
18.02.2013, 00:44
Alex_K, а можно все страницы сфотографировать, пожалуйста?
УКНЦ литеры 7 с 1515ХМ1-031.

http://kisly-alexey.pisem.net/TSSPD/XM1-7/4/TSSPD1.jpg
http://kisly-alexey.pisem.net/TSSPD/XM1-7/4/TSSPD2.jpg
http://kisly-alexey.pisem.net/TSSPD/XM1-7/4/TSSPD3.jpg
http://kisly-alexey.pisem.net/TSSPD/XM1-7/4/TSSPD4.jpg
http://kisly-alexey.pisem.net/TSSPD/XM1-7/4/TSSPD5.jpg
http://kisly-alexey.pisem.net/TSSPD/XM1-7/4/TSSPD6.jpg
http://kisly-alexey.pisem.net/TSSPD/XM1-7/4/TSSPD7.jpg
http://kisly-alexey.pisem.net/TSSPD/XM1-7/4/TSSPD8.jpg


---------- Post added at 00:44 ---------- Previous post was at 00:41 ----------


Надеюсь) Вы же хорошо УКНЦ знаете)
А при чем тут УКНЦ и я? Такой же результат будет и на МС1201.02 с процессором 1801ВМ2. Так что тут дело не в УКНЦ, а в процессоре.
А предложенный выше тест надо бы сделать, т.к. в документации по 1806ВМ2 говорится что пока дешифруется и исполняется команда, то принята уже следующая и готовится к приему следующей за следующей. Но ведь не даром у 1801ВМ2 три счетчика команд.

Titus
18.02.2013, 00:47
Вот для чистоты эксперимента тест со смещением не только +2, но и +4.

Alex_K
18.02.2013, 00:57
Вот для чистоты эксперимента тест со смещением не только +2, но и +4.
Увы. Революции не произошло. Со смещением +4 также, как и с работающей предвыборкой.

Titus
18.02.2013, 00:58
Интересно, что эти же, затраченные на перекэширование 52 такта выполняются все байтовые команды из разряда RMW.

---------- Post added at 00:58 ---------- Previous post was at 00:57 ----------


Увы. Революции не произошло. Со смещением +4 также, как и с работающей предвыборкой.
Значит документация правильная, но какой-то супер-пупер хитрый цикл перекэширования длинный выполняется. Даже JMP и то быстрее.

Alex_K
18.02.2013, 01:02
Интересно, что эти же, затраченные на перекэширование 52 такта выполняются все байтовые команды из разряда RMW.
Странно все это. И кстати, а почему при тесте применяются разные регистры? Ведь достаточно только при вхождении в последовательность команд единожды инициализировать регистр.

Titus
18.02.2013, 01:04
Странно все это. И кстати, а почему при тесте применяются разные регистры? Ведь достаточно только при вхождении в последовательность команд единожды инициализировать регистр.
У меня разное предназначение для разных регистров, поэтому для удобства инициализации тестов, я использую те регистры, которые наиболее подходящие. Но в эмуляторе я эти тесты прошагивал и смотрел, что действительно все делается, как надо.

Alex_K
18.02.2013, 01:08
Тут всякое подумаешь. Ведь сначала по адресу предвыбранной команды происходит чтение, мало ли это влияет? Можно такой же трюк проделать и с командой TST (R)+, мало ли чего. Хотя мне кажется вряд ли. Так что с каждым разом вопросов возникает все больше и больше.

Titus
18.02.2013, 01:10
Тут всякое подумаешь. Ведь сначала по адресу предвыбранной команды происходит чтение, мало ли это влияет? Можно такой же трюк проделать и с командой TST (R)+, мало ли чего. Хотя мне кажется вряд ли. Так что с каждым разом вопросов возникает все больше и больше.
Это в MOV (R2),(R2)+ чтение и запись.
А в MOV R1,(R2) только запись, однако и там, и там лишние 52 такта.

Alex_K
18.02.2013, 01:18
Это в MOV (R2),(R2)+ чтение и запись.
А в MOV R1,(R2) только запись, однако и там, и там лишние 52 такта.
Может за время исполнения текущей, следующую он уже не только принял, но и дешифровал?

При этом в тесте есть очень интересные результаты: MOV (R0),R1 - 40 тактов и MOV #nnnn,R0 - тоже 40 тактов. Но ведь в первом варианте работает предвыборка, а во втором ее нет, т.к. для адресации используется счетчик команд и во время исполнения команды он меняет значение.

Titus
18.02.2013, 01:25
Может за время исполнения текущей, следующую он уже не только принял, но и дешифровал?

При этом в тесте есть очень интересные результаты: MOV (R0),R1 - 40 тактов и MOV #nnnn,R0 - тоже 40 тактов. Но ведь в первом варианте работает предвыборка, а во втором ее нет, т.к. для адресации используется счетчик команд и во время исполнения команды он меняет значение.
А чего тут интересного? В первом случае, слово команды в кеше, поэтому идет выборка слова из (R0), затем, выборка слова следующей команды. Или наоборот, не знаю пока.

А во втором случае выбирается #nnnn из второго слова команды, затем идет выборка слова следующей команды. И там, и там одинаковое число циклов доступа к памяти.

Alex_K
18.02.2013, 01:29
А чего тут интересного? В первом случае, слово команды в кеше, поэтому идет выборка слова из (R0), затем, выборка слова следующей команды. Или наоборот, не знаю пока.

А во втором случае выбирается #nnnn из второго слова команды, затем идет выборка слова следующей команды. И там, и там одинаковое число циклов доступа к памяти.
Еще в тесте нет команд, состоящих из трех слов, да с командой MOV неплохо бы рассмотреть все способы адресации. Тогда картина была бы полной.

Titus
18.02.2013, 01:30
Еще в тесте нет команд, состоящих из трех слов, да с командой MOV неплохо бы рассмотреть все способы адресации. Тогда картина была бы полной.
Какие, например?

Alex_K
18.02.2013, 01:33
А во втором случае выбирается #nnnn из второго слова команды, затем идет выборка слова следующей команды. И там, и там одинаковое число циклов доступа к памяти.
Вот здесь интересно, используется ранее прочитанное для предвыборки значение, или читается nnnn заново. Следующая команда будет читаться вхолостую, т.к. при предвыборке следующая читается во время дешифрации текущей. А в этом варианте будет читаться, но дешифратор будет стоять.

Titus
18.02.2013, 01:35
Вот здесь интересно, используется ранее прочитанное для предвыборки значение, или читается nnnn заново. Следующая команда будет читаться вхолостую, т.к. при предвыборке следующая читается во время дешифрации текущей. А в этом варианте будет читаться, но дешифратор будет стоять.
В описании вроде все это было описано. Читал когда-то, но уже не помню)

Alex_K
18.02.2013, 01:35
Какие, например?
Все способы адресации MOV - 8х8, итого 64. А также можно дополнительно совместить с адресацией по счетчику команд 27,37, 67 77, это еще дополнительно сколько-то много.

Ну и другие двухадресные и одноадресные команды.

Titus
18.02.2013, 01:36
Все способы адресации MOV - 8х8, итого 64. А также можно дополнительно совместить с адресацией по счетчику команд 27,37, 67 77, это еще дополнительно сколько-то много.

Ну и другие двухадресные и одноадресные команды.

Все комбинации - это очень много)
Достаточно знать циклы команды в отдельности, чтобы правильно сложить все ее быстродействие.

Alex_K
18.02.2013, 01:43
Все комбинации - это очень много)
Достаточно знать циклы команды в отдельности, чтобы правильно сложить все ее быстродействие.
Ну тогда несколько исполнимых файлов. А там все сложится.

nzeemin
18.02.2013, 02:21
Чем объясняется такая существенная разница между скоростью выполнения команд (в тактах) на ЦП и ПП? Разные значения tn? Или что-то ещё?

Titus
18.02.2013, 02:33
Чем объясняется такая существенная разница между скоростью выполнения команд (в тактах) на ЦП и ПП? Разные значения tn? Или что-то ещё?
1) Шина с ОЗУ у ПП 8-битная, а не 16-битная.
2) Команды на ПП выравниваются до 4-х тактов. Хотя это не совсем вопрос скорости. Команды ЦП тоже обращаются только в отведенные для них фазы шины.

Patron
20.02.2013, 16:48
Написал универсальный тест IRQ.SAV (http://zx.pk.ru/attachment.php?attachmentid=39987), который должен позволить довольно точно вычислить время входа в прерывание и оценить время получения от устройства адреса вектора прерывания.

Требуется поддержка команд Mul и Div.

На эмуляторе ДВК ( с включенным драйвером EM ) - результаты такие:



.RU IRQ

IRQ - Check time of IRQ Service & RTI - v1.0

Memory Top: 130002
CPU Speed: 146 x RESET
CPU Speed: 7'585 x NOP
CPU Speed: 7'585 x MOV R0,R0
CPU Speed: 3'035 x MOV R2,(R3)
CPU Speed: 2'361 x RTI
CPU Speed: 850 x IOT
CPU Speed: 850 x TRAP
CPU Speed: 1'264 x MOV R2,(R3) | MOV R1,(R3) | MOV R0,R0
CPU Speed: 823 x MOV R2,(R3) | MOV R1,(R3) | MOV R0,R0 | RTI
CPU Speed: 508 x MOV R2,(R3) | MOV R1,(R3) | MOV R0,R0 | IOT
CPU Speed: 508 x MOV R2,(R3) | MOV R1,(R3) | MOV R0,R0 | TRAP
CPU Speed: 468 x MOV R2,(R3) | MOV R1,(R3) | MOV R0,R0 | Interrupt 064

Program completed.

.


Программа выводит сообщения через вызовы RMON, поэтому если правильно загрузиться с HX и нажать в терминале кнопку [Лог] - можно записать результаты теста в файл даже на УКНЦ.

Titus
20.02.2013, 17:35
Написал универсальный тест.
Это считается число команд между чем и чем?

Patron
20.02.2013, 18:06
Это считается число команд между чем и чем?В принципе - не важно, там можно использовать любые прерывания с чётким интервалом ( чем длиннее интервал - тем точнее измерения ). В конкретной реализации используется интервал между двумя прерываниями таймера по вектору 0100.

Смысл в том, что если за одно и то же время выполняется 7'585 x NOP, 2'361 x RTI и 850 x IOT ( + RTI ), то легко подсчитать, что:


RTI == 3.2 x NOP
IOT ( + RTI ) == 8.9 x NOP
IOT == 5.7 x NOP
а если время от начала выборки кода IOT до запуска блока прерываний принять за 1 x NOP, то время входа в прерывание ( т.е. записи PC и PSW в стек и чтения их из вектора ) составляет 4.7 x NOP

Также можно отдельно посчитать и время приёма по шине адреса вектора аппаратного прерывания ( в моём случае получается 3.3 x NOP ).

Titus
20.02.2013, 18:16
В принципе - не важно, там можно использовать любые прерывания с чётким интервалом ( чем длиннее интервал - тем точнее измерения ). В конкретной реализации используется интервал между двумя прерываниями таймера по вектору 0100.

Если это сетевой таймер, то странно.

TSSPD у меня как раз меряет между прерываниями сетевого таймера число команд. Число операций типа MOV Rx,Rx - 19949 (неправильное в EmuStudio, но меряется правильно). А в вашем тесте - это 34067.

Patron
20.02.2013, 18:33
Если это сетевой таймер, то странно.Даже самую правильную идею можно реализовать с ошибками. Вот получим результат запуска IRQ.SAV на реальной УКНЦ и сразу станет ясно - есть ошибка в алгоритме теста или это просто эмулятор ДВК такой "быстрый".

Titus
20.02.2013, 18:36
Даже самую правильную идею можно реализовать с ошибками. Вот получим результат запуска IRQ.SAV на реальной УКНЦ и сразу станет ясно - есть ошибка в алгоритме теста или это просто эмулятор ДВК такой "быстрый".
Не обязательно для этого запускать на реальном УКНЦ. Достаточно сравнить с результатами проверенного теста на нереальном УКНЦ).

Patron
20.02.2013, 18:38
Хотя, если умножить 50 Hz таймера на 7'585 NOPов за тик - получим 380'000 NOP/сек, что в точности равно быстродействию 1801ВМ1 на ДВК-1 5.3 МГц.

Titus
20.02.2013, 18:50
Хотя, если умножить 50 Hz таймера на 7'585 NOPов за тик - получим 380'000 NOP/сек, что в точности равно быстродействию 1801ВМ1 на ДВК-1 5.3 МГц.
Кстати, на ВМ2 NOP медленнее, чем MOV Rx,Rx.

---------- Post added at 18:50 ---------- Previous post was at 18:43 ----------

Кстати, сравнил результаты двух тестов:

На UKNCBTL:

TSSPD:
NOP - 9394
MOV Rx,Rx - 13308

IRQ:
NOP - 9380
MOV Rx,Rx - 13275

Тогда как на EmuStudio:

TSSPD:
NOP - 19948
MOV Rx,Rx - 19948

IRQ:
NOP - 33397
MOV Rx,Rx - 34039

На лицо явное неправильное вычисление числа выполненных команд, когда этих команд успевает выполнится много.

Patron
20.02.2013, 18:57
Типа, когда памяти не хватает и цикл идёт на второй заход - начинает врать.
Второй заход по-любому уменьшает точность, поэтому даже после исправления программы лучше его избегать.
Нужно выгрузить из памяти всё лишнее ( SET SL OFF сделать и т.п. ) - чтобы в буфере команд стало больше 20 тыс. слов свободного места.

Titus
20.02.2013, 19:01
Типа, когда памяти не хватает и цикл идёт на второй заход - начинает врать.
Второй заход по-любому уменьшает точность, поэтому даже после исправления программы лучше его избегать.
Нужно выгрузить из памяти всё лишнее ( SET SL OFF сделать и т.п. ) - чтобы в буфере команд стало больше 20 тыс. слов свободного места.
После Set Sl Off все равно врет:

TSSPD:
NOP - 19948
MOV Rx,Rx - 19948

IRQ:
NOP - 28785
MOV Rx,Rx - 29203

Patron
20.02.2013, 19:50
Что-то не могу заставить тест врать.

Новый вариант теста IRQ v1.2 (http://zx.pk.ru/attachment.php?attachmentid=39992) выводит в первой позиции количество заходов в буфер команд:



.RU IRQ

IRQ - Check time of IRQ Service & RTI - v1.2

Memory Top: 137554
1: CPU Speed: 146 x RESET
1: CPU Speed: 7'586 x NOP
1: CPU Speed: 7'585 x MOV R0,R0
1: CPU Speed: 3'035 x MOV R2,(R3)
1: CPU Speed: 2'361 x RTI
1: CPU Speed: 850 x IOT
1: CPU Speed: 850 x TRAP
1: CPU Speed: 1'264 x MOV R2,(R3) | MOV R1,(R3) | MOV R0,R0
1: CPU Speed: 823 x MOV R2,(R3) | MOV R1,(R3) | MOV R0,R0 | RTI
1: CPU Speed: 508 x MOV R2,(R3) | MOV R1,(R3) | MOV R0,R0 | IOT
1: CPU Speed: 508 x MOV R2,(R3) | MOV R1,(R3) | MOV R0,R0 | TRAP
1: CPU Speed: 468 x MOV R2,(R3) | MOV R1,(R3) | MOV R0,R0 | Interrupt 064

Program completed.

.

Titus
20.02.2013, 20:05
Что-то не могу заставить тест врать.
На EmuStudio врут и 1.1 и 1.2, хотя числа отличаются.

Patron
20.02.2013, 20:09
На EmuStudio врут и 1.1 и 1.2, хотя числа отличаются.Движок там одинаковый.
А какое число в первой позиции ?

Titus
20.02.2013, 20:13
Движок там одинаковый.
А какое число в первой позиции ?
Не записал. Ну то же 30000 с чем-то, но чуть меньше.

А, в первой - 2.

Patron
20.02.2013, 20:17
Не исключено, что врёт эмулятор. Там в начале теста две команды WAIT.
Сейчас сделаю отладочную версию, показывающую число команд в буфере.
Если в буфере будет заметно больше 20'000 команд, а эмулятор поведёт тест на второй заход - ошибка в эмуляторе.

Patron
20.02.2013, 20:31
Новый вариант теста IRQ v1.3 (http://zx.pk.ru/attachment.php?attachmentid=39993) выводит в строке BUF words количество слов в буфере команд:



.RU IRQ

IRQ - Check time of IRQ Service & RTI - v1.3

Memory Top: 137554
BUF words: 22778
1: CPU Speed: 146 x RESET
1: CPU Speed: 7'586 x NOP
1: CPU Speed: 7'585 x MOV R0,R0
1: CPU Speed: 3'035 x MOV R2,(R3)
1: CPU Speed: 2'361 x RTI
1: CPU Speed: 850 x IOT
1: CPU Speed: 850 x TRAP
1: CPU Speed: 1'264 x MOV R2,(R3) | MOV R1,(R3) | MOV R0,R0
1: CPU Speed: 823 x MOV R2,(R3) | MOV R1,(R3) | MOV R0,R0 | RTI
1: CPU Speed: 508 x MOV R2,(R3) | MOV R1,(R3) | MOV R0,R0 | IOT
1: CPU Speed: 508 x MOV R2,(R3) | MOV R1,(R3) | MOV R0,R0 | TRAP
1: CPU Speed: 468 x MOV R2,(R3) | MOV R1,(R3) | MOV R0,R0 | Interrupt 064

Program completed.

.

Titus
20.02.2013, 20:47
Не исключено, что врёт эмулятор. Там в начале теста две команды WAIT.
У меня эмулятор WAIT исполняет, как NOP. Зачем использовать в тесте WAIT?

Patron
20.02.2013, 20:49
У меня эмулятор WAIT исполняет, как NOP. Зачем использовать в тесте WAIT?Чтобы авторы эмуляторов имели дополнительный стимул к правильной эмуляции процессора.

Titus
20.02.2013, 20:50
http://s019.radikal.ru/i621/1302/db/85630066f89a.png

Patron
20.02.2013, 20:54
Без привязки начала теста к прерыванию - смысла в цифрах не много.
Нужно IRQ.SAV на реальной УКНЦ запустить.

Alex_K
20.02.2013, 20:59
Без привязки начала теста к прерыванию - смысла в цифрах не много.
Нужно IRQ.SAV на реальной УКНЦ запустить.
Результаты на реальной УКНЦ:
http://kisly-alexey.pisem.net/IRQ/1/IRQ-KVANT7-031.jpg
Результаты в UKNCBTL:
http://kisly-alexey.pisem.net/IRQ/1/IRQ.png

В UKNCBTL разница с реалом есть по времени исполнения команд, но в общем и целом вроде все одинаково. Команда WAIT в UKNCBTL эмулируется.

Patron
20.02.2013, 21:03
Как на УКНЦ с повторяемостью результатов ?

Alex_K
20.02.2013, 21:09
Как на УКНЦ с повторяемостью результатов ?
Восемь запусков хватит?

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

Patron
20.02.2013, 21:16
Это она от разогрева ускоряется ?

Titus
20.02.2013, 21:17
Без привязки начала теста к прерыванию - смысла в цифрах не много.
Нужно IRQ.SAV на реальной УКНЦ запустить.
Понятно) Это вы так к прерыванию привязываетесь) Я привязываюсь без нее)

Alex_K
20.02.2013, 21:18
Это она от разогрева ускоряется ?
Да вроде она замедляется. А на самом деле тактовая частота у ЦП одна (8 МГц), а у памяти другая (6,25 МГц). Плюс к тому же доступ к ОЗУ только с разрешения видеоконтроллера, поэтому как попадет.

Patron
20.02.2013, 21:34
Главные выводы по результатам запуска теста IRQ.SAV (http://zx.pk.ru/attachment.php?attachmentid=39993) на УКНЦ следующие:

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 ----------


Да вроде она замедляется.Точно!

Alex_K
20.02.2013, 21:36
Patron, а как же Вам удается померять время работы команды RESET? Тут вся соль ситуации состоит в том, что сигнал EVNT внутри процессора 1801ВМ2 защелкивается внутри триггера, ну и этот триггер очищается по команде RESET. В эмуляторе понятно, он очищается в начале эмуляции команды, а в процессоре ведь INIT длится некоторое время, а потом пауза, и если фронт EVNT попадет во время активной фазы сигнала INIT, то триггер может не установится.

Patron
20.02.2013, 21:45
если фронт 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

alone
20.02.2013, 21:58
Чем он занимается эти 52 такта???

Titus
20.02.2013, 22:08
Чем он занимается эти 52 такта???
Учитывая то, ответ на вопрос давно ушедших страниц уточню:

Вопрос:
Чем ВМ2 занимается в течение 52 тактов, когда происходит промах мимо кэша предвыборки?

Ответ:
Мы пока не в курсе)

hobot
21.02.2013, 00:21
По поводу живых машинок - моё обещание прогнать всё в силе, как только так сразу будет доп. статистика сразу как минимум с трёх машинок.
Вот что в эмуляторе у меня выдал IRQ 1.3 )

http://savepic.ru/4126789.png

http://savepic.ru/4125765.png

Тест 1.3 добавил на форумный сборник софта (http://zx.pk.ru/showpost.php?p=575127&postcount=405) УК-НЦошного )

Patron
21.02.2013, 22:58
Тест MOV.SAV (http://zx.pk.ru/attachment.php?attachmentid=40010) измеряет число тактов, затрачиваемых любым процессором архитектуры 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.

Titus
21.02.2013, 23:29
измеряет число тактов, затрачиваемых любым процессором архитектуры PDP-11 на выполнение команды MOV с различными типами адресации.
Похоже на правду. На EmuStudio работает адекватно теперь)
Только нужно обязательно дробное число тактов, хотя бы один знак после запятой. Лучше два.

Patron
21.02.2013, 23:38
Похоже на правду.Фаза тика всё же играет некоторую роль, поэтому для синхронизации с таймером в начале теста стоит WAIT.


нужно обязательно дробное число тактовА может ли какой-то процессор начать выполнять команду в произвольной фазе такта ?

Titus
21.02.2013, 23:44
А может ли какой-то процессор начать выполнять команду в произвольной фазе такта ?
Что значит в произвольной фазе такта?

---------- Post added at 23:44 ---------- Previous post was at 23:43 ----------

На УКНЦ доступ к памяти ЦП несинхронный с тактированием, поэтому число тактов у команды будет не целое.

Patron
21.02.2013, 23:58
Что значит в произвольной фазе такта?Может ли процессор выставлять адрес и SYNC на шину без привязки к тактам ?
Может ли арифметический блок выдавать результат без привязки к тактам ?

Alex_K
22.02.2013, 00:00
Тест MOV.SAV (http://zx.pk.ru/attachment.php?attachmentid=40010) измеряет число тактов, затрачиваемых любым процессором архитектуры PDP-11 на выполнение команды MOV с различными типами адресации.
УКНЦ КВАНТ литеры 7 с 1515ХМ1-031. Так как на УКНЦ тик сетевого таймера равен не 20 мс, а 19.968 мс, то в качестве частоты используется не 8000 кГц, а 8013 кГц:
http://kisly-alexey.pisem.net/MOV/XM1-7/MOV01.jpg

Осталось измерить скорость ПП данным тестом. Только там памяти 22 Кб с хвостиком.

Patron
22.02.2013, 00:09
Осталось измерить скорость ПП данным тестом. Только там памяти 22 Кб с хвостиком.Этот тест не очень требователен к памяти - свободное место после кода должно быть (если не ошибаюсь) больше 10 Кб.

Titus
22.02.2013, 00:16
Может ли процессор выставлять адрес и SYNC на шину без привязки к тактам ?
Может ли арифметический блок выдавать результат без привязки к тактам ?
Это вопрос не ко мне, а к Alex_K)
Но из-за одной только памяти такты на УКНЦ ЦП дробные.

Alex_K
22.02.2013, 00:21
Это вопрос не ко мне, а к Alex_K)
Но из-за одной только памяти такты на УКНЦ ЦП дробные.
Ха! А у кого комплект документации к 1801ВМ2? Так что вопрос как раз к Вам, Titus.
А так конечно же вся работа 1801ВМ2 основана на тактах, как с выставлением сигналов, так и работа всех блоков.
А так как на магистрали ЦП память несинхронна с процессором, да к тому же выборка из нее идет только с разрешения видеоконтроллера, то усредненное количество тактов будет дробным.

Patron
22.02.2013, 00:25
Если у процессора есть внутреннее умножение частоты - привязка работы блока управления может осуществляться к тактам этой умноженной частоты.

Дело в том, что у стандарта Q-Bus есть стандартные ограничения минимальных и максимальных интервалов между разными сигналами, поэтому привязка всей логики работы с шиной хоть к какому-то тактированию необходима.

Alex_K
22.02.2013, 00:32
Если у процессора есть внутреннее умножение частоты - привязка работы блока управления может осуществляться к тактам этой умноженной частоты.
Какое умножение? У 1801ВМ2 входящая частота делится на два. И этот разделенный сигнал используется внутри процессора.

Patron
22.02.2013, 00:37
так как на магистрали ЦП память несинхронна с процессором, да к тому же выборка из нее идет только с разрешения видеоконтроллера, то усредненное количество тактов будет дробным.Мне тоже думается, что команды привязаны к тактам, но это целое количество тактов у отдельных команд в последовательности одинаковых команд может "плавать" по некоторому закону.

---------- Post added at 23:37 ---------- Previous post was at 23:33 ----------


Какое умножение? У 1801ВМ2 входящая частота делится на два. И этот разделенный сигнал используется внутри процессора.Т.е. ВМ2 "различает" внутри такта исходной частоты только 4 фазы, относительно каждой из которых могут с небольшой дополнительной задержкой запускаться различные действия.

hobot
22.02.2013, 01:08
Т.е. ВМ2 "различает" внутри такта исходной частоты только 4 фазы
Можно ламерский совершенно вопрос - различает допустим 4 фазы, но преобразуется каким-то способом в 2 путём объединения и получается как-бы 2 фазы (из четырёх четвертей) - или я чушь вообще написал? Если чушь - заранее извиняюсь) - термины объединения и преобразуется - ламерские, просто чтобы действие как-то обозвать.

Titus
22.02.2013, 01:32
Ха! А у кого комплект документации к 1801ВМ2? Так что вопрос как раз к Вам, Titus.
У меня документации ровно столько же, сколько и у всех.

Patron
22.02.2013, 19:29
Следующие универсальные тесты: MOVB.SAV (http://zx.pk.ru/attachment.php?attachmentid=40016), CMP.SAV (http://zx.pk.ru/attachment.php?attachmentid=40017) и ADD.SAV (http://zx.pk.ru/attachment.php?attachmentid=40018), позволяют определить число тактов, затрачиваемых любым процессором архитектуры PDP-11 на выполнение команд MOVB, CMP и ADD с различными способами адресации.

При первом запуске каждого теста нужно ввести правильное значение тактовой частоты тестируемого процессора в килогерцах.

Исходники тестов отличаются одной строчкой, которая для теста команды ADD выглядит так:


;;############################
.Instr Add
;;############################

alone
22.02.2013, 20:36
Mov R1 14 37 41 49 41 50 49 41 64
Я уже не люблю этот процессор!

Alex_K
22.02.2013, 21:37
Следующие универсальные тесты: MOVB.SAV (http://zx.pk.ru/attachment.php?attachmentid=40016), CMP.SAV (http://zx.pk.ru/attachment.php?attachmentid=40017) и ADD.SAV (http://zx.pk.ru/attachment.php?attachmentid=40018), позволяют определить число тактов, затрачиваемых любым процессором архитектуры PDP-11 на выполнение команд MOVB, CMP и ADD с различными способами адресации.
УКНЦ КВАНТ литеры 7 с 1515ХМ1-031.
Команда MOVB:
http://kisly-alexey.pisem.net/MOV/XM1-7/MOVB01.jpg
Команда CMP:
http://kisly-alexey.pisem.net/MOV/XM1-7/CMP01.jpg
Команда ADD:
http://kisly-alexey.pisem.net/MOV/XM1-7/ADD01.jpg

Patron
22.02.2013, 22:00
Бросается в глаза, что при выполнении команды MovB - 1801ВМ2 очень нервно реагирует на использование в первом аргументе (PC)+ ( т.е. #NUM ).

Максимальная разница с первым аргументом (R2)+ составила 17 тактов для команды MovB (PC)+, @(R2)+

Вряд ли это глюк теста - все тестовые последовательности генерятся полностью автоматически и в разных тестах отличаются только кодом операции.

Alex_K
22.02.2013, 22:10
Бросается в глаза, что при выполнении команды MovB - 1801ВМ2 очень нервно реагирует на использование в первом аргументе (PC)+ ( т.е. #NUM ).

Максимальная разница с первым аргументом (R2)+ составила 17 тактов для команды MovB (PC)+, @(R2)+

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

Patron
22.02.2013, 22:13
Для дальнейшей проверки выполнения команд типа MovB (PC)+, ??? процессором 1801ВМ2 - изготовлены ( путём изменения соответствующей строчки в исходнике ) тесты команд BIS (http://zx.pk.ru/attachment.php?attachmentid=40023) и BISB (http://zx.pk.ru/attachment.php?attachmentid=40023).

...

Patron
22.02.2013, 22:15
Аргумент #NUM сперва прочитывается как следующая команда, потом собственно как аргумент. Последовательность предвыборки нарушена, следующая команда читается уже не во время дешифрации предыдущей.Но на команду ADD это не влияет, а чем чтение первого аргумента команды MOVB отличается от чтения первого аргумента команды ADD ?

Alex_K
22.02.2013, 22:45
Для дальнейшей проверки выполнения команд типа MovB (PC)+, ??? процессором 1801ВМ2 - изготовлены ( путём изменения соответствующей строчки в исходнике ) тесты команд BIS (http://zx.pk.ru/attachment.php?attachmentid=40023) и BISB (http://zx.pk.ru/attachment.php?attachmentid=40023).

...
Результаты на УКНЦ:
http://kisly-alexey.pisem.net/MOV/XM1-7/BIS.jpg
http://kisly-alexey.pisem.net/MOV/XM1-7/BISB.jpg
Что тут можно сказать? По всей видимости разработчики микрокода довольно хорошо промахнулись с байтовыми командами. Уже известно что в команде MOVB параметр dst сначала читается, а уже потом записывается. Судя по всему при адресации по счетчику команд (методы 27, 6Х, 7Х) при словных командах используется аргумент, прочитанный во время предвыборки, а в байтовых командах он снова читается. Весьма интересно услышать по этому поводу комментарии от Titus-а, но его в данный момент нет на форуме.
Кстати интересно посмотреть на CMPB, и CLR и CLRB.

Patron
22.02.2013, 22:56
Кстати интересно посмотреть на CMPB, и CLR и CLRB.Вот тест для CMPB: CMPB.SAV (http://zx.pk.ru/attachment.php?attachmentid=40025), а для однооперандных команд буду ещё делать отдельный тест с немного изменённым тестовым движком.

...

Alex_K
22.02.2013, 23:08
Вот тест для CMPB: CMPB.SAV (http://zx.pk.ru/attachment.php?attachmentid=40025), а для однооперандных команд буду ещё делать отдельный тест с немного изменённым тестовым движком.

...
http://kisly-alexey.pisem.net/MOV/XM1-7/CMPB01.jpg
В свете открывшихся обстоятельств весьма интересно, будут ли сильно отличаться по времени команды MOV @R1,R0 и MOV @PC,R0. Вроде бы аргумент будет прочитан по предвыборке, да и последовательность предвыборки не будет нарушена.

Да, в байтовых командах влияет только на способ адресации 27, на 6Х и 7Х не влияет, т.к. там индекс читается как словный аргумент.

Patron
22.02.2013, 23:18
В свете открывшихся обстоятельств весьма интересно, будут ли сильно отличаться по времени команды MOV @R1,R0 и MOV @PC,R0. Вроде бы аргумент будет прочитан по предвыборке, да и последовательность предвыборки не будет нарушена.После теста однооперандных команд я сделаю специальный тест 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

Titus
23.02.2013, 02:18
Судя по всему при адресации по счетчику команд (методы 27, 6Х, 7Х) при словных командах используется аргумент, прочитанный во время предвыборки, а в байтовых командах он снова читается. Весьма интересно услышать по этому поводу комментарии от Titus-а, но его в данный момент нет на форуме.
Я абсолютно с вами согласен)

---------- Post added at 02:18 ---------- Previous post was at 02:17 ----------

Еще раз настоятельно рекомендую сделать дробные тайминги в тесте. Иначе точность его практически никакая, если говорить об УКНЦ.

Patron
23.02.2013, 12:33
Еще раз настоятельно рекомендую сделать дробные тайминги в тесте. Иначе точность его практически никакая, если говорить об УКНЦ.Но даже такой точности достаточно, чтобы задаться несколькими вопросами.

Чем вызвано отличие таймингов следующих команд:


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.

Titus
23.02.2013, 15:02
1. Почему Mov @(R2)+,(R2)+ выполняется медленнее, чем Mov nn(PC),(R2)+, но MovB @(R2)+,(R2)+ выполняется быстрее, чем MovB nn(PC),(R2)+, при том что у команд Cmp и CmpB таких отличий нет.
Прежде всего странно, что MOVB blabla,(mem), который выполняется в цикле RMW, при адресации типа MOVB @(R2)+,(mem) выполняется с такой же скоростью, как и MOV.

Patron
23.02.2013, 16:00
Прежде всего странно, что MOVB blabla,(mem), который выполняется в цикле RMW, при адресации типа MOVB @(R2)+,(mem) выполняется с такой же скоростью, как и MOV.Видно, что 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 !!!

Titus
23.02.2013, 16:11
Видно, что 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 !!!
Возможно, что длинная адресация операнда-источника в комбинации с нерегистровой адресацией операнда-приемника... ЗАМЕНЯЕТ цикл W на цикл RMW) Вот вам новая отгадка)

Alex_K
23.02.2013, 16:39
Возможно, что длинная адресация операнда-источника в комбинации с нерегистровой адресацией операнда-приемника... ЗАМЕНЯЕТ цикл W на цикл RMW) Вот вам новая отгадка)
Нет, не заменяет. Проверил на стыке С2, послал через гипертерминал символ на УКНЦ, в порту 0176570 установился флаг готовности. В пультовом отладчике выполнил команду MOV @(R2)+,@R0, при R2=0 и R0=176572. Если бы на dst выполнялся бы цикл RMW, то флаг готовности был бы сброшен, а он остался.

Titus
23.02.2013, 16:51
Нет, не заменяет. Проверил на стыке С2, послал через гипертерминал символ на УКНЦ, в порту 0176570 установился флаг готовности. В пультовом отладчике выполнил команду MOV @(R2)+,@R0, при R2=0 и R0=176572. Если бы на dst выполнялся бы цикл RMW, то флаг готовности был бы сброшен, а он остался.
Значит какие-то холостые или лишние такты делает. Может два цикла чтения подряд. Или еще чего. Но факт в том, что при таких адресациях W и RMW сравниваются по времени.

Alex_K
23.02.2013, 16:59
Значит какие-то холостые или лишние такты делает. Может два цикла чтения подряд. Или еще чего. Но факт в том, что при таких адресациях W и RMW сравниваются по времени.
Titus, надо Вам сделать аналогичный тест на вашем движке и с дробными тактами, будет возможность сравнить. А уж если все будет одинаково, то тогда начинать делать выводы.
Чудес на свете нет, все можно будет объяснить.

Titus
23.02.2013, 17:14
Titus, надо Вам сделать аналогичный тест на вашем движке и с дробными тактами, будет возможность сравнить. А уж если все будет одинаково, то тогда начинать делать выводы.
Чудес на свете нет, все можно будет объяснить.
Аналогичный - это слишком много. Можно выделить одельные команды, которые надо проверить, и их дописать.

Alex_K
23.02.2013, 17:22
Аналогичный - это слишком много. Можно выделить одельные команды, которые надо проверить, и их дописать.
Зачем дописывать? Движок есть, сделать отдельную программу с этими командами.

Titus
23.02.2013, 17:38
Зачем дописывать? Движок есть, сделать отдельную программу с этими командами.
С каким этими? Если всеми комбинациями адресаций, то это движок в таком виде не потянет.

Alex_K
23.02.2013, 17:50
С каким этими? Если всеми комбинациями адресаций, то это движок в таком виде не потянет.
С этими - например MOV со всевозможными типами адресаций.
А почему это движок не потянет?

Titus
23.02.2013, 17:58
С этими - например MOV со всевозможными типами адресаций.
А почему это движок не потянет?
Потому что под каждую команду я должен ВРУЧНУЮ составить некую таблицу. Это 64 таблиц? Слишком накладно.

Alex_K
23.02.2013, 17:59
Потому что под каждую команду я должен ВРУЧНУЮ составить некую таблицу. Это 64 таблиц? Слишком накладно.
Что же это за таблицы такие?

Titus
23.02.2013, 18:07
Что же это за таблицы такие?
Смотрите сами, исходник открыт)

Alex_K
23.02.2013, 18:29
Смотрите сами, исходник открыт)
Titus, что-то у себя я не нашел этих исходников. И где они находятся?

hobot
23.02.2013, 19:07
Смотрите сами, исходник открыт)
Исходник только самый древний от С версии теста если о нём речь, другого ты вроде не выкладывал?

Titus
23.02.2013, 19:32
Titus, что-то у себя я не нашел этих исходников. И где они находятся?

http://zx.pk.ru/showpost.php?p=566155&postcount=319

Patron
23.02.2013, 23:36
Универсальный тест: OP1.SAV (http://zx.pk.ru/attachment.php?attachmentid=40042) позволяет определить число тактов, затрачиваемых любым процессором архитектуры PDP-11 на выполнение однооперандных команд с различными способами адресации.

При первом запуске теста нужно ввести правильное значение тактовой частоты тестируемого процессора в килогерцах.

...

Alex_K
24.02.2013, 00:02
Универсальный тест: OP1.SAV (http://zx.pk.ru/attachment.php?attachmentid=40042) позволяет определить число тактов, затрачиваемых любым процессором архитектуры PDP-11 на выполнение однооперандных команд с различными способами адресации.
УКНЦ КВАНТ литеры 7 с 1515ХМ1-031:
http://kisly-alexey.pisem.net/MOV/XM1-7/OP1_1.jpg

P.S. Извиняюсь, что не лог с NC11SJ, постараюсь сделать попозже.

Patron
24.02.2013, 00:07
Там Inc R0 быстрее 13 тактов сработал - может, тест ещё разок для проверки запустить..

Titus
24.02.2013, 00:11
Там Inc R0 быстрее 13 тактов сработал - может, тест ещё разок для проверки запустить..
Может написать дробные тайминги? )))

Alex_K
24.02.2013, 00:12
Там Inc R0 быстрее 13 тактов сработал - может, тест ещё разок для проверки запустить..
На втором запуске 13 тактов, но УКНЦ стоит включенной уже несколько часов, так что горячая. А вообще, правильно Titus сказал, что результаты должны быть с дробной частью. В магистрали ЦП процессор несинхронен с памятью, да и выборка из памяти делается с разрешения видеоконтроллера. Выборка слова, в зависимости от того, когда поступил запрос на чтение, может варьироваться от 320 нс до 960 нс, вот такая вот арифметика.

Patron
24.02.2013, 00:18
Может написать дробные тайминги? )))Для качественного исследования ( качественного не в смысле качества, а в смысле НЕ-количественного ) от дробей только вред.

Сейчас разницу в десятки тактов надо находить и объяснять. Когда модель таймингов такого порядка будет полностью адекватна оригиналу - придёт время дробей.

---------- Post added at 23:18 ---------- Previous post was at 23:16 ----------


результаты должны быть с дробной частьюДля дробной части таймингов требуется специальное статистическое исследование. На этапе качественного исследования дроби только отвлекают.

Titus
24.02.2013, 00:27
Сейчас разницу в десятки тактов надо находить и объяснять. Когда модель таймингов такого порядка будет полностью адекватна оригиналу - придёт время дробей.
Точно) Придет время) И все тесты делать надо будет заново)

---------- Post added at 00:27 ---------- Previous post was at 00:26 ----------


Для дробной части таймингов требуется специальное статистическое исследование. На этапе качественного исследования дроби только отвлекают.
Ну что же, придется поддаться на уговоры Alex_K и самому сделать дробный тест)

Patron
24.02.2013, 00:32
Точно) Придет время) И все тесты делать надо будет заново)Именно так. Вычислять среднее значение и параметры распределения.

Alex_K
24.02.2013, 00:38
Ну что же, придется поддаться на уговоры Alex_K и самому сделать дробный тест)
С нетерпением ждем.

Patron
24.02.2013, 19:16
Универсальный тест: MOVPC.SAV (http://zx.pk.ru/attachment.php?attachmentid=40052) позволяет определить число тактов, затрачиваемых любым процессором архитектуры PDP-11 на выполнение команды MOV с различными способами адресации относительно PC.

При первом запуске теста нужно ввести правильное значение тактовой частоты тестируемого процессора в килогерцах.

Тест работает не быстро. Если (например) команда выполняется за 50 тактов - результата определния её продолжительности приходится ждать 10 сек.

...

Alex_K
24.02.2013, 23:44
Универсальный тест: MOVPC.SAV (http://zx.pk.ru/attachment.php?attachmentid=40052) позволяет определить число тактов, затрачиваемых любым процессором архитектуры PDP-11 на выполнение команды MOV с различными способами адресации относительно PC.
На 1801ВМ2 весьма интересные результаты, пришлось даже УКНЦ поменять, чтобы проверить. Тестировался УКНЦ КВАНТ литеры 7 с 1515ХМ2-001. Смотрите и удивляйтесь:

https://thumb.cloud.mail.ru/weblink/thumb/xw1/6Wvv/hX5VCQNER/MOVPC01.jpg
https://thumb.cloud.mail.ru/weblink/thumb/xw1/F6ht/oGCxMyWEK/MOVPC02.jpg
https://thumb.cloud.mail.ru/weblink/thumb/xw1/2Yf7/ZCob4NJdH/MOVPC03.jpg
https://thumb.cloud.mail.ru/weblink/thumb/xw1/7U7j/NUPH8sN2d/MOVPC04.jpg
https://thumb.cloud.mail.ru/weblink/thumb/xw1/kY3k/8zExkJ1tz/MOVPC05.jpg
https://thumb.cloud.mail.ru/weblink/thumb/xw1/HYjN/D6A8kmJtv/MOVPC06.jpg
https://thumb.cloud.mail.ru/weblink/thumb/xw1/EVuz/pze9pFb3m/MOVPC07.jpg
https://thumb.cloud.mail.ru/weblink/thumb/xw1/AKE4/t2vZ5GPS8/MOVPC08.jpg
https://thumb.cloud.mail.ru/weblink/thumb/xw1/CS5t/pZL2SsvAD/MOVPC09.jpg
https://thumb.cloud.mail.ru/weblink/thumb/xw1/JGjX/aXJkUEVBd/MOVPC10.jpg
https://thumb.cloud.mail.ru/weblink/thumb/xw1/FFKL/e3LYfGJ1d/MOVPC11.jpg
https://thumb.cloud.mail.ru/weblink/thumb/xw1/N5Sg/D17FAJ8vb/MOVPC12.jpg

Patron
25.02.2013, 00:12
Всё чудесатее и чудесатее..

Код там выполняется такой:


010400 [000000]: MOV (PC), R0 ; 010402:011700 -> R0
010402 [000000]: MOV (PC), R0 ; 010404:011700 -> R0
010404 [000000]: MOV (PC), R0 ; 010406:011700 -> R0
010406 [000000]: MOV (PC), R0 ; 010410:011700 -> R0
010410 [000000]: MOV (PC), R0 ; 010412:011700 -> R0
010412 [000000]: MOV (PC), R0 ; 010414:011700 -> R0
010414 [000000]: MOV (PC), R0 ; 010416:011700 -> R0
010416 [000000]: MOV (PC), R0 ; 010420:000240 -> R0
010420 [000000]: NOP
010422 [000000]: NOP
010424 [000000]: NOP
010426 [000000]: DEC R5 ; R5 :002044
010430 [000000]: BEQ 010444




010400 [000010]: MOVB (PC), R0 ; 010402: 300 -> R0
010402 [000010]: MOVB (PC), R0 ; 010404: 300 -> R0
010404 [000010]: MOVB (PC), R0 ; 010406: 300 -> R0
010406 [000010]: MOVB (PC), R0 ; 010410: 300 -> R0
010410 [000010]: MOVB (PC), R0 ; 010412: 300 -> R0
010412 [000010]: MOVB (PC), R0 ; 010414: 300 -> R0
010414 [000010]: MOVB (PC), R0 ; 010416: 300 -> R0
010416 [000010]: MOVB (PC), R0 ; 010420: 240 -> R0
010420 [000010]: NOP
010422 [000010]: NOP
010424 [000010]: NOP
010426 [000010]: DEC R5 ; R5 :002044
010430 [000000]: BEQ 010444

Titus
25.02.2013, 00:19
Чета все у вас плавает, господа)

Alex_K
25.02.2013, 00:21
Всё чудесатее и чудесатее..
Во-во!!! Сейчас загрузился на КВАНТ с 1515ХМ1-031 c IDE-Flash, так на MOV @PC,R0 все время TRAP4 по адресу 010416.
Сейчас загружусь с дисковода, там система немного другая.

---------- Post added at 00:21 ---------- Previous post was at 00:19 ----------


Чета все у вас плавает, господа)
Titus, у Вас нарушение предвыборки тоже съедало неизвестно куда 52 такта, так что ждем тестов от Вас с большим нетерпением.

Titus
25.02.2013, 00:25
Titus, у Вас нарушение предвыборки тоже съедало неизвестно куда 52 такта, так что ждем тестов от Вас с большим нетерпением.
Но человек наконец сделал дробные тайминги)

Patron
25.02.2013, 00:27
Я бы ещё понял, если бы глючила команда MovB (PC)+,(PC)
Она три завершающих NOPа плавно превращает вот в что:



014322 [000010]: MOVB #-27185., (PC) ; 014324: 317 -> 014326
014326 [000010]: MOVB #-27185., (PC) ; 014330: 317 -> 014332
014332 [000010]: MOVB #-27185., (PC) ; 014334: 317 -> 014336
014336 [000010]: MOVB #-27185., (PC) ; 014340: 317 -> 014342
014342 [000010]: SWAB (PC) ; 014344:000240
014344 [000004]: CMPB R0, R0 ;
014346 [000004]: NOP
014350 [000004]: DEC R5 ; R5 :002044
014352 [000000]: BEQ 014366

Alex_K
25.02.2013, 00:54
Ну вот собственно ошибка на другой системе:
https://thumb.cloud.mail.ru/weblink/thumb/xw1/Aam6/DuQdkvJxF/MOVPC_ERR.jpg
Хотя команда и MOV PC,@R0, но в R0 пишется байт.

Patron
25.02.2013, 01:55
На третьем проходе вылетела ( в начале первого прохода в R5 = 8013/5 = 1602 = 03102 ).

---------- Post added at 00:55 ---------- Previous post was at 00:03 ----------

Если блок питания во всех случаях был один и тот же - проблема может быть в нём.

Мне один раз довелось наблюдать, как после подключения второго блока дисководов к ДВК - у 1801ВМ2 начались вылеты по Trap_To_4 в ядре RMON RT-11.

Alex_K
25.02.2013, 02:06
Если блок питания во всех случаях был один и тот же - проблема может быть в нём.

Мне один раз довелось наблюдать, как после подключения второго блока дисководов к ДВК - у 1801ВМ2 начались вылеты по Trap_To_4 в ядре RMON RT-11.
Если бы проблема была в блоке питания, то я бы наверное и загрузится бы не смог. А так проблема возникает в одном месте, да и к тому же на одной из УКНЦ тест проходил, но показания слишком плавали. Другие тесты проходят без проблем. Грузился я с разных устройств (дисковод и IDE-Flash).
Надо, чтобы этот тест прогнали бы на другой УКНЦ несколько раз. Вот тогда можно делать кое-какие выводы.

Patron
25.02.2013, 02:15
Если бы проблема была в блоке питания, то я бы наверное и загрузится бы не смог.Играет роль скорость реакции блока питания на изменение нагрузки. Ведь ошибки чаще всего возникали при смене типа кода, а значит - и профиля потребления.

Обычный код имеет усреднённый профиль потребления, поэтому загрузка операционной системы и т.п. проходит без проблем. Но когда после тысячи команд MOV (PC),R0 подряд - вдруг появляется NOP - профиль потребления резко изменяется.

Когда к ДВК подключили второй блок дисководов - она тоже начала вылетать только в одной программе и только на одной и той же команде внутри RMON ( неделю без толку отлаживал, пока второй дисковод не отключили и всё не пришло в норму ).

Titus
25.02.2013, 04:40
Но когда после тысячи команд MOV (PC),R0 подряд - вдруг появляется NOP - профиль потребления резко изменяется.
Ерунда какая) Вам пора спать)

hobot
25.02.2013, 05:04
Ерунда какая)
Не такая уж и ерунда - не знаю как местная ошибка и случай из практики Patrona,
а вот на PC во времена аникуйства я сталкивался с таким. Замена БП на новый (хотя и старый вроде бы рабочий)
решала проблему (разную). Но тут это снова оффтоп получается )

---------- Post added at 05:04 ---------- Previous post was at 05:01 ----------

И почему на форуме нельзя самому себе сказать спасибо? )

Patron
25.02.2013, 13:12
Ерунда какая)Не буду настаивать на тонкостях формулировки диагноза, но то, что вылет/не вылет 1801ВМ2 по Trap_To_4 при выполнении обычных ( не предполагающих возможности зависания шины ) последовательностей команд связан именно с характеристиками питания - достоверный факт.

Нужно прогнать тест с разными блоками питания и сравнить результаты.

---------- Post added at 12:12 ---------- Previous post was at 12:03 ----------

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

В этом случае нужно подобрать максимально качественный блок питания и сравнивать в тесте разные платы с 1801ВМ2 ( от УКНЦ, ДВК и т.д. ).

Titus
25.02.2013, 13:26
Не буду настаивать на тонкостях формулировки диагноза, но то, что вылет/не вылет 1801ВМ2 по Trap_To_4 при выполнении обычных ( не предполагающих возможности зависания шины ) последовательностей команд связан именно с характеристиками питания - достоверный факт.
Уверен, что тут ошибка другого плана. Ведь команда MOV (PC)+,R0 ничем по своим характеристикам не отличается от подавляющего большинства других стандартных команд.

Alex_K
25.02.2013, 13:35
Уверен, что тут ошибка другого плана. Ведь команда MOV (PC)+,R0 ничем по своим характеристикам не отличается от подавляющего большинства других стандартных команд.
Во-первых не MOV (PC)+,R0, а MOV @PC,R0. А во-вторых уникальность ситуации в том, что значение источника уже считалось по предвыборке, да и предвыборка не нарушается.

По поводу блока питания - используется AT-блок, модели HIPRO HP-200PGN. Проблемы есть на двух УКНЦ, но адреса разные.

Titus, прогоните этот тест на своих.

Titus
25.02.2013, 13:37
Titus, прогоните этот тест на своих.
Доставать долго. Быстрее самому написать альтернативный тест для MOV (PC),R0, чтобы вы прогнали.

Patron
25.02.2013, 13:42
используется AT-блокТогда ничего удивительного - у плат PC используются дополнительные стабилизаторы питания возле разъёма процессора, поэтому стабильность блоков питания на порядок ниже, чем у любой PDP-11.

Даже самый зачуханный блок питания PDP-11 - превышает требования PC к блокам питания серверного класса.

---------- Post added at 12:42 ---------- Previous post was at 12:40 ----------


Быстрее самому написать альтернативный тест для MOV (PC),R0, чтобы вы прогнали.Другая последовательность команд даст другой результат.

Ведь под эмулятором тест по Trap_To_4 не вылетает - значит проблема именно в реальном железе..

Titus
25.02.2013, 13:43
Ведь под эмулятором тест по Trap_To_4 не вылетает - значит проблема именно в реальном железе..
Эмулятор, как один, так другой, весьма далеки от одеяла. Я имею ввиду УКНЦ)

Patron
25.02.2013, 13:52
Эмулятор, как один, так другой, весьма далеки от одеяла. Я имею ввиду УКНЦ)Но и на реальной УКНЦ тест не всегда вылетает.

А если вылетает - то на одной из этих команд:


010416 [000000]: MOV (PC), R0 ; 010420:000240 -> R0
010420 [000000]: NOP
010422 [000000]: NOP
010424 [000000]: NOP
010426 [000000]: DEC R5 ; R5 :002044
010430 [000000]: BEQ 010444


Почему существующие эмуляторы УКНЦ ещё не научились адекватно эмулировать эти команды ?

Titus
25.02.2013, 13:58
Почему существующие эмуляторы УКНЦ ещё не научились адекватно эмулировать эти команды ?
Потому что для этого нужно эмулировать процессор с точностью до ступеней конвейера, и железо УКНЦ с такой же точностью.

Alex_K
25.02.2013, 14:03
Тогда ничего удивительного - у плат PC используются дополнительные стабилизаторы питания возле разъёма процессора, поэтому стабильность блоков питания на порядок ниже, чем у любой PDP-11.

Даже самый зачуханный блок питания PDP-11 - превышает требования PC к блокам питания серверного класса.
Это у последних плат, в которых процессоры пожирают под сотню ватт. А это древний источник, который питал древнюю плату на Pentium-200 (даже не MMX). Да и на этой материнке кондеров под тысячи микрофарад не наблюдается. Могу сказать, что классический источник в УКНЦ похуже будет. Тут причина скорее в другом, может быть и обнаружили ошибку в процессоре.

Patron
25.02.2013, 14:07
Потому что для этого нужно эмулировать процессор с точностью до ступеней конвейера, и железо УКНЦ с такой же точностью.Но это, чтобы получить Trap_To_4 с нештатными параметрами питания.

Но когда всё штатно - эмуляторы УКНЦ эти команды эмулируют без проблем ( а именно - так, как работа этих команд описана в ТЗ и как она происходит на реальной УКНЦ при нормальной работе аппаратуры ).

Когда все работает штатно - тест не только не вылетает, но и не глючит, а потому - даёт правильные результаты:

http://kisly-alexey.pisem.net/MOVPC/1/MOVPC08.jpg

Alex_K
25.02.2013, 14:17
Почему существующие эмуляторы УКНЦ ещё не научились адекватно эмулировать эти команды ?
Patron, а что Вы понимаете под неадекватностью?

---------- Post added at 14:17 ---------- Previous post was at 14:16 ----------


Но это, чтобы получить Trap_To_4 с нештатными параметрами питания.

Но когда всё штатно - эмуляторы УКНЦ эти команды эмулируют без проблем ( а именно - так, как работа этих команд описана в ТЗ и как она происходит на реальной УКНЦ при нормальной работе аппаратуры ).

Когда все работает штатно - тест не только не вылетает, но и не глючит, а потому - даёт правильные результаты:

https://thumb.cloud.mail.ru/weblink/thumb/xw1/AKE4/t2vZ5GPS8/MOVPC08.jpg

А как объясняются результаты с 3 или 4 тактами на команду?

Patron
25.02.2013, 14:23
а что Вы понимаете под неадекватностью?Это было полемическое высказывание.

Понятно, что абстракные эмуляторы могут адекватно эмулировать только штатную работу цифровых схем.

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

---------- Post added at 13:23 ---------- Previous post was at 13:20 ----------


А как объясняются результаты с 3 или 4 тактами на команду?Ответ в коде теста:


010416 [000000]: MOV (PC), R0 ; 010420:000240 -> R0
010420 [000000]: NOP
010422 [000000]: NOP
010424 [000000]: NOP
010426 [000000]: DEC R5 ; R5 :002044
010430 [000000]: BEQ 010444

Если последняя команда выполняет переход BEQ до завершения всех циклов тестирования - результат вполне может оказаться и 0 тактов на команду.

Titus
25.02.2013, 14:48
Попробуйте мой тестик)

Titus
25.02.2013, 15:23
Понятно, что абстракные эмуляторы могут адекватно эмулировать только штатную работу цифровых схем.

Когда при одинаковых начальных условиях выполнение одинаковых последовательностей кода даёт на реальном оборудовании разные результаты - это нештатная работа, адекватно эмулировать которую методами абстрактной эмуляции невозможно в принципе.
Не знаю, что такое абстрактный эмулятор, но правильный эмулятор эмулирует все, что известно о эмулируемой машине. И если выполнение одной и той же программы дает разные результаты на железе, а на эмуляторе нет, значит эмулятор не отражает какие-то обьективные процессы железа. За исключением случаев, когда железо неисправно.

---------- Post added at 15:23 ---------- Previous post was at 15:22 ----------


Если последняя команда выполняет переход BEQ до завершения всех циклов тестирования - результат вполне может оказаться и 0 тактов на команду.
А вот эту фразу совсем не понял)

Patron
25.02.2013, 15:53
Не знаю, что такое абстрактный эмуляторАбстрактный эмулятор эмулирует суть происходящего, дискретный эмулятор эмулирует сигналы в виде логических уровней и время в виде тактов тактовой частоты, аналоговый эмулятор эмулирует сигналы в виде уровней напряжения и время в виде долей секунды ( тысячных, милллионных, миллиардных ).

Эмулировать аналоговые переходные процессы в печатных проводниках платы и полупроводниковых элементах микросхем удобнее всего при аналоговой эмуляции. Как это можно было бы сделать в виде абстрактной эмуляции - представить не могу.


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


А вот эту фразу совсем не понял)При проблемах с питанием процессор глючит безбожно.

Здесь, например - по содержимому R0 видно, что команда MOV (PC),R0 сработала как MOVB (PC),R0:

http://kisly-alexey.pisem.net/MOVPC/1/MOVPC_ERR.jpg

...

Когда вместо 40 тактов на команду в распечатке результатов теста появляется 3 - это означает, что или команда DEC R5 установила бит Z в PSW при R5 == 1000, или команда BEQ выполнила переход при сброшенном бите Z в PSW.

Titus
25.02.2013, 16:13
Абстрактный эмулятор эмулирует суть происходящего, дискретный эмулятор эмулирует сигналы в виде логических уровней и время в виде тактов тактовой частоты, аналоговый эмулятор эмулирует сигналы в виде уровней напряжения и время в виде долей секунды ( тысячных, милллионных, миллиардных ).

Эмулировать аналоговые переходные процессы в печатных проводниках платы и полупроводниковых элементах микросхем удобнее всего при аналоговой эмуляции. Как это можно было бы сделать в виде абстрактной эмуляции - представить не могу.

Зависит от сферы применения эмулятора. Иногда идеально правильная эмуляция фронтов распространения сигнала на шине - гораздо важнее идеально правильной эмуляции результатов выполнения команды, хотя в подавляющем большинстве случаев - наоборот.
Это слишком академический подход к эмуляторописанию и эмуляторопониманию. Либо абстрактный, либо логический, либо аналоговый.
На деле, в моем понимании, чтобы написать абсолютно достоверный эмулятор, вовсе не обязательно писать на уровне логических элементов. Достаточно хорошо понимать работу и взаимодействие законченных логических автоматов, и умело описать это в своей программе. Тогда будет и быстрый и точный.

Patron
25.02.2013, 16:37
Достаточно хорошо понимать работу и взаимодействие законченных логических автоматовЭто позволяет точно эмулировать абстрактную спецификацию электронно-логического устройства, но не его реальную работу.

Когда время прихода того или иного логического сигнала не синхронно тактовой частоте и определяется аналоговыми характеристиками реальных линий передачи - абстрактные правила эмуляции такой системы (на мой взгляд) выходят за пределы логики автоматов.

Titus
25.02.2013, 16:59
Это позволяет точно эмулировать абстрактную спецификацию электронно-логического устройства, но не его реальную работу.

Когда время прихода того или иного логического сигнала не синхронно тактовой частоте и определяется аналоговыми характеристиками реальных линий передачи - абстрактные правила эмуляции такой системы (на мой взгляд) выходят за пределы логики автоматов.

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

Скажем так, несинхронных вещей не бывает. Все они с чем-нибудь синхронны. С каким-то источником тактирования.

Patron
25.02.2013, 20:23
Универсальный тест: MOVPC2.SAV (http://zx.pk.ru/attachment.php?attachmentid=40077) позволяет определить число тактов, затрачиваемых любым процессором архитектуры PDP-11 на выполнение команды MOV с различными способами адресации относительно PC, не вошедшими в предыдущий тест MOVPC.SAV (http://zx.pk.ru/attachment.php?attachmentid=40052).

При первом запуске теста нужно ввести правильное значение тактовой частоты тестируемого процессора в килогерцах.

Команды типа MOV R0,(PC) невозможно тестировать в цикле, поэтому тест использует линейный движок. Если адрес возврата при входе в прерывание превышает верхний адрес свободной памяти - вместо числа заходов в буфер команд в первой позиции строки результата выводится *.

На эмуляторе ДВК результаты запуска выглядят так:



.RU MOVPC2
MovPC2 - v1.0
Memory Top: 137554
BUF words: 23108
CPU KHz: 5300 >

1: Nop 14
1: Mov R0, R0 14
1: Mov R0, (PC) 37
1: MovB R0, (PC) 37
1: Mov (PC), R0 30
1: MovB (PC), R0 30
::: SP = PC :::
1: Mov R0, (SP)+ 41
1: MovB R0, (SP)+ 41
1: Mov (SP),(SP)+ 49
1: MovB (SP),(SP)+ 49

Program completed.

.

Alex_K
25.02.2013, 22:57
Попробуйте мой тестик)
Начнем. Выбрал только экраны для новых тестов.
ПП:

https://thumb.cloud.mail.ru/weblink/thumb/xw1/DMbZ/y4hHgpBUC/TSSPDi_01.jpg
https://thumb.cloud.mail.ru/weblink/thumb/xw1/N7kh/iaLG51P1K/TSSPDi_02.jpg
https://thumb.cloud.mail.ru/weblink/thumb/xw1/DLQk/DJUXiUt4c/TSSPDi_03.jpg
https://thumb.cloud.mail.ru/weblink/thumb/xw1/By89/6aHBeueVi/TSSPDi_04.jpg

ЦП:

https://thumb.cloud.mail.ru/weblink/thumb/xw1/L9ev/Q3t7NMTc9/TSSPDi_05.jpg
https://thumb.cloud.mail.ru/weblink/thumb/xw1/K2CR/aGpuFzUVM/TSSPDi_06.jpg
https://thumb.cloud.mail.ru/weblink/thumb/xw1/J9NG/URoT4Kozz/TSSPDi_07.jpg


---------- Post added at 22:57 ---------- Previous post was at 22:53 ----------


Универсальный тест: MOVPC2.SAV (http://zx.pk.ru/attachment.php?attachmentid=40077) позволяет определить число тактов, затрачиваемых любым процессором архитектуры PDP-11 на выполнение команды MOV с различными способами адресации относительно PC, не вошедшими в предыдущий тест MOVPC.SAV (http://zx.pk.ru/attachment.php?attachmentid=40052).
https://thumb.cloud.mail.ru/weblink/thumb/xw1/Kx4J/1JzSywnVZ/MOVPC2_01.jpg

Patron
25.02.2013, 23:16
Если добавить результаты из предыдущего теста, получится так:




:::::: SP = PC ::::::

Mov R0, (PC) 47
Mov R0, (PC)+ 47
Mov R0, (SP)+ 85

MovB R0, (PC) 57
MovB R0, (PC)+ 57
MovB R0, (SP)+ 94

Mov (PC),(PC) 82
Mov (SP),(SP)+ 102

MovB (PC),(PC) 84
MovB (SP),(SP)+ 113


---------- Post added at 22:16 ---------- Previous post was at 22:07 ----------

Возникает интересный вопрос - а читает ли повторно 1801ВМ2 следующую ячейку памяти, если записать её с адресацией относительно PC ..

Очень любопытно выглядит совпадение скорости выполнения команд, и исполняющих, и пропускающих следующее записанное слово.

Titus
25.02.2013, 23:17
Начнем. Выбрал только экраны для новых тестов.
Эта ваша машина с плавающими таймингами для ПП не очень хороший вариант для тестов. На большинстве машин все тайминги ПП стоят как прибитые в диапазоне кратном 4 тактам.

Кстати, и никаких сенсаций.

Alex_K
25.02.2013, 23:45
Эта ваша машина с плавающими таймингами для ПП не очень хороший вариант для тестов. На большинстве машин все тайминги ПП стоят как прибитые в диапазоне кратном 4 тактам.

Кстати, и никаких сенсаций.
Посмотрите повнимательней результаты новых тестов относительно тестов Patron-а. Кое-где расхождение в два раза.

---------- Post added at 23:45 ---------- Previous post was at 23:43 ----------


Возникает интересный вопрос - а читает ли повторно 1801ВМ2 следующую ячейку памяти, если записать её с адресацией относительно PC ..

Очень любопытно выглядит совпадение скорости выполнения команд, и исполняющих, и пропускающих следующее записанное слово.
Если пишется слово по адресу предвыборки, то процессор заново перечитывает его после исполнения текущей команды. У Titus-а в тестах в таких случаях получалось различие в 52 такта.

Patron
26.02.2013, 00:00
Кое-где расхождение в два раза.При тесте команд


Mov (PC),(PC)+
MovB (PC),(PC)+
похоже не было учтено, что следующее слово пропускается - поэтому, если не разделить количество "пройденных" слов на 2 - скорость получается в два раза выше.

Что же до команд


Mov (PC),R0
MovB (PC),R0
весьма похоже, что в отличие от всех остальных команд - скорость у них и в словном, и байтовом вариантах одинаковая.

Однако относительно их скорости трудно дать однозначное заключение - ведь в результате глюков часть из них могут выполняться с инкрементной адресацией.

Titus
26.02.2013, 00:04
Посмотрите повнимательней результаты новых тестов относительно тестов Patron-а. Кое-где расхождение в два раза.
Если с тем, что был зависающим - то с ним я не сравниваю, он вообще глючный.

---------- Post added at 00:04 ---------- Previous post was at 00:02 ----------



Что же до команд


Mov (PC),R0
MovB (PC),R0
весьма похоже, что в отличие от всех остальных команд - скорость у них и в словном, и байтовом вариантах одинаковая.

Однако относительно их скорости трудно дать однозначное заключение - ведь в результате глюков часть из них могут выполняться с инкрементной адресацией.
Никаких глюков нет, все стабильно, как часы.

Patron
26.02.2013, 00:07
Если пишется слово по адресу предвыборки, то процессор заново перечитывает его после исполнения текущей команды. У Titus-а в тестах в таких случаях получалось различие в 52 такта.


:::::: SP = PC ::::::

Mov R0, (PC) 47
Mov R0, (PC)+ 47
Mov R0, (SP)+ 85

MovB R0, (PC) 57
MovB R0, (PC)+ 57
MovB R0, (SP)+ 94

Mov (PC),(PC) 82
Mov (SP),(SP)+ 102

MovB (PC),(PC) 84
MovB (SP),(SP)+ 113
При выполнении указанных команд SP и PC всегда имеют одинаковые значения.

Т.е. команды

MovB (PC),(PC) 84
MovB (SP),(SP)+ 113
делают с алгоритмической точки зрения абсолютно одно и то же - читают и пишут следующее слово по ходу выполнения программы.

Alex_K
26.02.2013, 00:08
Что же до команд


Mov (PC),R0
MovB (PC),R0
весьма похоже, что в отличие от всех остальных команд - скорость у них и в словном, и байтовом вариантах одинаковая.

Однако относительно их скорости трудно дать однозначное заключение - ведь в результате глюков часть из них могут выполняться с инкрементной адресацией.
Что до этих команд, то при исполнении есть глюки, если следующая команда после них не нарушает предвыборку. Patron, измените тесты, вместо трех NOP-ов вставьте три команды BR .+2 (код 0400), хотя достаточно одной, и все изменится.
Я тут проводил тесты в пультовом отладчике, заполнял память с 01000 по 157764 командой MOV @PC,R0, оставшиеся ячейки - три NOP и JMP @#1000. В этом варианте получал TRAP4. Вместо NOP-ов пробовал другие команды, если вместо трех NOP ставил MOV @PC,R0, то все нормально, если команды, которые не нарушают предвыборку, например MOV R0,R0, то получал TRAP4.
Вот такие вот дела. Что-то не учли разработчики в реализации предвыборки, потому такой глюк и происходит.

Patron
26.02.2013, 00:21
Никаких глюков нет, все стабильно, как часы.Стабильность и отсутствие глюков - не одно и то же.

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

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

---------- Post added at 23:21 ---------- Previous post was at 23:15 ----------


Что-то не учли разработчики в реализации предвыборки, потому такой глюк и происходит.Если бы вылет происходил каждый раз - это одно дело. Но когда вылетает только один раз из нескольких ( а зачастую - из нескольких тысяч, т.к. если при вылете теста MOVPC.SAV в R5 находится 0 - значит было выполнено больше тысячи "проходов через NOP" ) - тогда это больше похоже на резкий скачок потребления тока, приводящий к сбою.

Alex_K
26.02.2013, 00:30
Если бы вылет происходил каждый раз - это одно дело. Но когда вылетает только один раз из нескольких ( а зачастую - из нескольких тысяч, т.к. если при вылете теста MOVPC.SAV в R5 находится 0 - значит было выполнено больше тысячи "проходов через NOP" ) - тогда это больше похоже на резкий скачок потребления тока, приводящий к сбою.
Да, здесь Вас не убедить, что если бы проблемы были в источнике, то УКНЦ все время глючила бы, но глюк происходит только при определенных обстоятельствах. Да и о каком резком скачке потребления может идти речь, вроде ничего энергосберегающего в УКНЦ нет, да и жрет он мало.

Собственно тесты на других УКНЦ и с другими источниками питания могут дать ответ, но вот только никто кроме меня их запускать не хочет.

Patron
26.02.2013, 00:54
вместо трех NOP-ов вставьте три команды BR .+2 (код 0400), хотя достаточно одной, и все изменится.В приложении - изменённый вариант теста MovPC v1.1 (http://zx.pk.ru/attachment.php?attachmentid=40082).


Foot0:
Br .+2.

Dec R5
BEQ 1$

Jmp @#LoopStart
1$:
Mov #R.T.I, @#100
Return
Foot1:

Протестировать в цикле команду MovB (PC)+,(PC) без трёх NOPов невозможно, но зато без теста этой команды количество заглушек удалось сократить до одной.

Мой прогноз - вылетать будет немного меньше, но глючить не перестанет.

...

Patron
26.02.2013, 01:01
Да, здесь Вас не убедить, что если бы проблемы были в источнике, то УКНЦ все время глючила бы, но глюк происходит только при определенных обстоятельствах. Да и о каком резком скачке потребления может идти речь, вроде ничего энергосберегающего в УКНЦ нет, да и жрет он мало.Вылет по Trap_To_4 ещё можно кое-как объяснить сбоем предвыборки. Но выполнение MOV как MOVB, уменьшение 1600. в R5 до нуля за пару сотен декрементов - это ничем кроме просадки питания объяснить нельзя.


Собственно тесты на других УКНЦ и с другими источниками питания могут дать ответ, но вот только никто кроме меня их запускать не хочет.hobot хочет ( он сам говорил ).
Видно - он просто ещё не понял, насколько СИЛЬНО этого хочет :)

Alex_K
26.02.2013, 01:24
Мой прогноз - вылетать будет немного меньше, но глючить не перестанет.

Вылет по Trap_To_4 ещё можно кое-как объяснить сбоем предвыборки. Но выполнение MOV как MOVB, уменьшение 1600. в R5 до нуля за пару сотен декрементов - это ничем кроме просадки питания объяснить нельзя.
Я думаю прогноз неверный, покопался в пультовом отладчике и выявил закономерность, но сейчас уже ночь, расскажу сегодня, но уже вечером.

hobot
26.02.2013, 02:13
hobot хочет ( он сам говорил ).
Видно - он просто ещё не понял, насколько СИЛЬНО этого хочет :)
Всё верно, просто есть причины по которым откладываю, сейчас уже потерял всякую надежду актуальные версии собственно ручно собрать - хотя вроде - бы все архивы
Patrona и Titusa вижу у себя, всё равно я бы очень попросил образ дискеты с актуальными версиями чтобы просто гнать и скрины делать прилепить,
Alex_K, наверняка самый актуальный сборник у вас ?
Запуск и прогон на живых машинках планирую на конец этой недели, так что образ то же не к спеху - идеально к выходным? (вдруг ещё какие то тесты или вариации появятся за это время). Я на форуме постоянно, как только начну сразу начну и результаты выкладывать. Тему читаю и слежу.

Patron
26.02.2013, 11:03
Я думаю прогноз неверныйВполне возможно, что команда BR поможет радикально. Но диагноз это не опровергнет - алгоритмические ошибки микрокода процессора должны давать одинаковый эффект при каждом исполнении "целевого" кода на всех машинах с таким процессором.

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

Alex_K
26.02.2013, 11:31
Вполне возможно, что команда BR поможет радикально. Но диагноз это не опровергнет - алгоритмические ошибки микрокода процессора должны давать одинаковый эффект при каждом исполнении "целевого" кода на всех машинах с таким процессором.

Когда же разные прогоны теста дают разные глюки, когда холодная машина глючит меньше, а горячая больше, когда у разных машин на одном и том же коде глюки отличаются - это невозможно объяснить чисто цифровыми причинами.
Терпение, еще раз терпение. Могу сразу сказать, что перед тем как лечь спать, прогнал новый тест, все в полном порядке. А ошибки есть в микрокоде, да еще какие. А результаты разные потому, что еще работают прерывания по таймеру, и судя по всему они на условно работающей машине попадали куда надо. Т.к. вроде и УКНЦ с виду одинаковые и источник питания один, и грузится одна система, но быстродействие чуть-чуть может плавать, т.к. ЦП и сетевой таймер питаются от разных кварцев.

---------- Post added at 11:31 ---------- Previous post was at 11:25 ----------

Т.к. на сейчас на работе и УКНЦ нету тута, то привожу небольшой кусочек кода, хочется услышать ваше мнение о результатах исполнения.
Итак, начальные аргументы - R0 = R1 = R2 = R3 = R4 = 0. PSW = 0200. Ячейка 02000 = 0 (команда HALT).
А вот и код:


1000:011700 MOV @PC,R0
1002:005201 INC R1
1004:005202 INC R2
1006:005203 INC R3
1010:005204 INC R4
1012:000137 JMP @#1000
1014:001000 .WORD 2000
1016:002000

Ваши прогнозы, что получим на выходе?

Patron
26.02.2013, 12:06
что получим на выходе?В свете открывшихся перспектив - боюсь даже подумать.

Но и у меня есть любопытное "кодовое предложение":



Clr R1
Clr R2
Mov (PC)+, R0
Inc R2
Mov R0, (PC)
Inc R1что будет в R1 и R2 после выполнения..

...


результаты разные потому, что еще работают прерывания по таймеру, и судя по всему они на условно работающей машине попадали куда надоВ циклическом тесте ( в отличие от линейного ) прерывания ключевой роли не играют. Можно сделать вариант с запрещёнными прерываниями и результат будет тем же ( в смысле глюков, а не в смысле подсчитанного числа тиков ).

Alex_K
26.02.2013, 12:29
В свете открывшихся перспектив - боюсь даже подумать.
Ладно, скажу. R0=005201, R1=2, R2=1, R3=1, R4=1, останов будет на адресе 2000.

Titus
26.02.2013, 12:36
Ладно, скажу. R0=005201, R1=2, R2=1, R3=1, R4=1, останов будет на адресе 2000.
Ну и как это получилось?

Alex_K
26.02.2013, 12:37
Но и у меня есть любопытное "кодовое предложение":



Clr R1
Clr R2
Mov (PC)+, R0
Inc R2
Mov R0, (PC)
Inc R1что будет в R1 и R2 после выполнения..

Обязательно попробую вечером. Но предсказываю: R0=005202, R1=0, R2=1. Но в свете открывшихся обстоятельств с адресацией 17, результаты могут отличаться от предполагаемых.

Есть другой тест:


MOV #LBL,R0
INC R0
MOV (PC)+,R3
INC R2
CLR R1
CLR R2
MOV R3,@R0
LBL: INC R1
HALT

Ваши предположения?

---------- Post added at 12:37 ---------- Previous post was at 12:36 ----------


Ну и как это получилось?
А что, из кода вроде и так ясно. Плюс еще глюк с предвыборкой.

Titus
26.02.2013, 12:40
А что, из кода вроде и так ясно. Плюс еще глюк с предвыборкой.
Мне не ясно, расшифруйте)

Patron
26.02.2013, 12:46
Ваши предположенияЭто для меня слишком сложно.
Что при правильной работе должно произойти..

Типа, в момент выполнения команды MOV R3,(R0) - на её место должна записаться команда INC R2.

А зачем нечётный R0 - с чётным R0 результат будет другой ?

Alex_K
26.02.2013, 12:52
Мне не ясно, расшифруйте)
Начнем по порядку. Команда MOV @PC,R0 как и надо, ложит в R0 значение 005201. А вот далее самое интересное: использовался тип адресации 17, выборка значения происходит по адресу предвыборки, но предвыборка не нарушается, и в итоге следующая команда INC R1 исполняется два раза. Судя по всему происходит какой-то глюк с тремя счетчиками команд, т.к. следующие команды исполняются нормально, а вот JMP выборку значения по адресации 37 производит не за следующим словом после команды, а еще дальше, т.е. выбирается не 1000, а 2000.
Надо этот код прогнать в режиме HALT, там счетчик копии заморожен при запрещенных прерываниях, может там и конвеер не работает.

Titus
26.02.2013, 12:54
Начнем по порядку. Команда MOV @PC,R0 как и надо, ложит в R0 значение 005201. А вот далее самое интересное: использовался тип адресации 17, выборка значения происходит по адресу предвыборки, но предвыборка не нарушается, и в итоге следующая команда INC R1 исполняется два раза. Судя по всему происходит какой-то глюк с тремя счетчиками команд, т.к. следующие команды исполняются нормально, а вот JMP выборку значения по адресации 37 производит не за следующим словом после команды, а еще дальше, т.е. выбирается не 1000, а 2000.
Надо этот код прогнать в режиме HALT, там счетчик копии заморожен при запрещенных прерываниях, может там и конвеер не работает.
Т.е. после такой адресации все счетчики сбиваются, и потом идет выполнение всех последующих команд с неправильными счетчиками?

Alex_K
26.02.2013, 12:57
Это для меня слишком сложно.
Что при правильной работе должно произойти..

Типа, в момент выполнения команды MOV R3,(R0) - на её место должна записаться команда INC R2.

А зачем нечётный R0 - с чётным R0 результат будет другой ?
Подредактировал код, поставил неверно метку LBL. Теперь можно глянуть, но эффект связан с предвыборкой и записью нового слова по адресу предвыборки. Но процессор адрес сравнивает абсолютно по всем 16 разрядам, поэтому успеет считаться и выполниться именно INC R1, хотя по этому адресу после исполнения MOV R3,@R0 будет уже INC R2.

Patron
26.02.2013, 12:58
Т.е. после такой адресации все счетчики сбиваются, и потом идет выполнение всех последующих команд с неправильными счетчиками?И спасает только BR, т.к. не используя счётчики - обнуляет их.

Alex_K
26.02.2013, 13:00
Т.е. после такой адресации все счетчики сбиваются, и потом идет выполнение всех последующих команд с неправильными счетчиками?
Что-то типа того. Но после этого исполняется два раза INC R1, вот это номер. Тут еще эффект связан если последующие команды не нарушают предвыборки, т.е. состоят из одного слова.

---------- Post added at 13:00 ---------- Previous post was at 12:59 ----------


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

Patron
26.02.2013, 13:21
процессор адрес сравнивает абсолютно по всем 16 разрядам, поэтому успеет считаться и выполниться именно INC R1, хотя по этому адресу после исполнения MOV R3,@R0 будет уже INC R2.Гениально!

Вот любопытная модификация проведённого теста:


Clr R1
Clr R2
Clr R3
MovB (PC),(PC)
Inc R1
Inc R2
Inc R3
Jmp @#1000
.Word 2000
.Word 3000
MovB перед записью ещё раз читает ячейку, не добавит ли это дополнительных глюков..

---------- Post added at 12:06 ---------- Previous post was at 12:04 ----------


Любая команда, нарушающая принцип предвыборки.Но если эта команда сама использует сбитый счётчик - она скорее вынесет в Trap_To_4, чем спасёт. А из всех команд, нарушающих предвыборку - только BR не использует ни одного счётчика ( или ошибаюсь? ).

---------- Post added at 12:21 ---------- Previous post was at 12:06 ----------

Ещё один вариант:


Clr R1
Clr R2
Clr R3
Mov (PC),R0
Mov (PC),R0
Inc R1
Inc R2
Inc R3
Jmp @#1000
.Word 2000
.Word 3000

Alex_K
26.02.2013, 19:26
Но и у меня есть любопытное "кодовое предложение":


Clr R1
Clr R2
Mov (PC)+, R0
Inc R2
Mov R0, (PC)
Inc R1что будет в R1 и R2 после выполнения..

Обязательно попробую вечером. Но предсказываю: R0=005202, R1=0, R2=1. Но в свете открывшихся обстоятельств с адресацией 17, результаты могут отличаться от предполагаемых.
Ну вот собственно и ответ:https://thumb.cloud.mail.ru/weblink/thumb/xw1/HirX/c9E5HjPuX/TSTPC_01.jpg

---------- Post added at 19:15 ---------- Previous post was at 18:52 ----------


Вот любопытная модификация проведённого теста:


Clr R1
Clr R2
Clr R3
MovB (PC),(PC)
Inc R1
Inc R2
Inc R3
Jmp @#1000
.Word 2000
.Word 3000
MovB перед записью ещё раз читает ячейку, не добавит ли это дополнительных глюков..
Глюков здесь нет, все в пределах нормы. Т.к. эта команда делает запись по адресу предвыборки, то все сбрасывается и начинается сначала.
https://thumb.cloud.mail.ru/weblink/thumb/xw1/Ec73/yGEWhiuH7/TSTPC_02.jpg

---------- Post added at 19:26 ---------- Previous post was at 19:15 ----------


Ещё один вариант:


Clr R1
Clr R2
Clr R3
Mov (PC),R0
Mov (PC),R0
Inc R1
Inc R2
Inc R3
Jmp @#1000
.Word 2000
.Word 3000

Это тот вариант, что я описывал. Количество команд MOV @PC,R0 роли не играет.
https://thumb.cloud.mail.ru/weblink/thumb/xw1/GYQX/7nTiTF11c/TSTPC_03.jpg

Patron
26.02.2013, 19:34
Получается, что запись следующей ячейки после команды занимает весьма разное время при адресации относительно PC и относительно любого другого регистра:



:::::: SP = PC ::::::
Mov R0, (PC) 47
Mov R0, (SP)+ 85


---------- Post added at 18:34 ---------- Previous post was at 18:32 ----------

На первый взгляд могло показаться, что в первом случае запись не происходит, однако последние тесты показали, что команда Mov R0, (PC) честно пишет в следующую ячейку, но просто делает это гораздо быстрее.

Alex_K
26.02.2013, 20:16
Два кода для анализа с результатами:

https://thumb.cloud.mail.ru/weblink/thumb/xw1/9vMj/bCTmPk8HB/TSTPC_04_01.jpg
https://thumb.cloud.mail.ru/weblink/thumb/xw1/Egrn/VK6XDdvbK/TSTPC_04_02.jpg


---------- Post added at 20:16 ---------- Previous post was at 19:56 ----------

Еще интересный случай.
https://thumb.cloud.mail.ru/weblink/thumb/xw1/Ep1y/SmskpFQFk/TSTPC_04_03.jpg

Patron
26.02.2013, 20:41
Супер!

Titus
26.02.2013, 22:51
Ну так если подытожить?

Alex_K
26.02.2013, 23:24
Ну так если подытожить?
А вот теперь надо думать, что к чему и от чего. Но чтение с методом адресации 17 дает очень интересные результаты. Кстати, попробовал запускать эти тесты в режиме HALT, все тоже самое.

Patron
27.02.2013, 19:52
Кстати, и никаких сенсаций.Там в двух позициях есть сомнительные результаты:

http://emulator.pdp-11.org.ru/misc/Test1.png

http://emulator.pdp-11.org.ru/misc/Test2.png

Во втором случае точно должно быть в 2 раза больше, а в первом - надо ещё проверить.

...

Специально для проверки первого пункта - более точный вариант линейного теста: MovPC2_v1.2 (http://zx.pk.ru/attachment.php?attachmentid=40099)

При первом запуске теста нужно ввести правильное значение частоты тестируемого процессора в килогерцах.

Результат запуска в эмуляторе ДВК выглядит так:



.RU MOVPC2
MovPC2 - v1.2
Memory Top: 137554
BUF words: 22867
CPU KHz: 5300 >

1: Nop Evt: 14 ; Run: 7557 ; Res: 7571 ; CLC: 14.0
1: Mov R0, R0 Evt: 14 ; Run: 7557 ; Res: 7571 ; CLC: 14.0
1: Mov R0, (PC) Evt: 5 ; Run: 2861 ; Res: 2866 ; CLC: 37.0
1: MovB R0, (PC) Evt: 5 ; Run: 2861 ; Res: 2866 ; CLC: 37.0
1: Mov (PC), R0 Evt: 6 ; Run: 3528 ; Res: 3534 ; CLC: 30.0
1: MovB (PC), R0 Evt: 6 ; Run: 3528 ; Res: 3534 ; CLC: 30.0
::: SP = PC :::
1: Mov R0, (SP)+ Evt: 4 ; Run: 2582 ; Res: 2586 ; CLC: 41.0
1: MovB R0, (SP)+ Evt: 4 ; Run: 2582 ; Res: 2586 ; CLC: 41.0
1: Mov (SP),(SP)+ Evt: 4 ; Run: 2161 ; Res: 2165 ; CLC: 49.0
1: MovB (SP),(SP)+ Evt: 4 ; Run: 2161 ; Res: 2165 ; CLC: 49.0

Program completed.

.

Где:

Evt - Число тестируемых команд, выполнившихся за промежуток времени между началом и концом первого прерывания таймера.
Run - Число тестируемых команд, выполнившихся за промежуток времени между концом первого и началом второго прерывания таймера.
Res - Общее число тестируемых команд, выполнившихся между началом первого и началом второго прерывания таймера.
CLC - Подсчитанное число тактов.

...

В приложении два варианта теста - MovPC2_v1.1 (http://zx.pk.ru/attachment.php?attachmentid=40098) выходит из первого прерывания таймера по RTI, а MovPC2_v1.2 (http://zx.pk.ru/attachment.php?attachmentid=40099) - по BR.

...