Электроника 100-25, книга 3, глава 4. Время выполнения команд.
Если свести всё разнообразие таймингов команд процессора 1801ВМ1 в единую "формулу быстродействия", позволяющую точно определить число тактов, необходимых процессору для выполнения любой команды ( при возможном нахождении различных операндов в различных типах памяти ), то формула в самом общем виде будет выглядеть так:
[Время выполнения команды] = [Суммарное время всех циклов шины] + [Суммарное время всех штрафов].
Процессор 1801ВМ1 использует следующие циклы шины Q-Bus:
1. DATI ( Чтение ) - для выборки команд и не модифицируемых данных из памяти.
2. DATO / DATOB ( Запись / Запись байта ) - только в командах MOV и MOVB для записи результата в память.
3. DATIO ( Чтение-Модификация-Запись ) - для доступа ко всем модифицируемым данным в памяти.
Время выполнения циклов процессором 1801ВМ1 зависит от продолжительности периода тактовой частоты T и времени задержки памяти tn:
В дальнейшем изложении (для простоты) множитель *T упоминаться не будет, поэтому формулы продолжительности циклов шины будут иметь такой вид:Код:DATI : [ 7*T+tn]
DATO : [10*T+tn]
DATIO: [13*T+tn+tn]
Время задержки памяти (в тактах) для ОЗУ ДВК-1: tn = 6, для ПЗУ ДВК-1: tn = 2.Код:DATI : [7+tn]
DATO : [10+tn]
DATIO: [13+2tn]
Поэтому, например - в ОЗУ ДВК-1 цикл чтения ( DATI ) будет выполняться за 7 + 6 = 13 тактов.
...
Теперь рассмотрим какие штрафы быстродействия (в тактах) имеет процессор 1801ВМ1 при выполнении команд:
Кроме того, команда MOV имеет при некоторых режимах адресации дополнительные штрафы от 1 до 4 тактов, природа которых пока совсем не понятна.Код:1. [Штраф исполнения] = 1 - для всех команд.
2. [Штраф второго операнда] = 1 - для команд, использующих два операнда,
если один из них в памяти.
3. [Штраф отмены предвыборки] = 2 - для команд, выполняющих больше одного
цикла шины.
4. [Штраф префиксной адресации] = 1 - для каждого операнда с
префиксной адресацией.
5. [Штраф невзаимности] = 5 ( для MOV = 4 ) - для команд, у которых
первый операнд не обращается к памяти,
а второй - обращается.
Теперь попробуем определить при помощи предложенного формализма продолжительность выполнения процессором 1801ВМ1 в ОЗУ ДВК-1 команды1. Сначала определим используемые циклы шины и их продолжительность: DATI (чтение кода команды) + DATI (чтение смещения к адресу первого операнда) + DATI (чтение адреса первого операнда) + DATI (чтение первого операнда) + DATIO (чтение-модификация-запись второго операнда) = [7+tn]+[7+tn]+[7+tn]+[7+tn]+[13+2tn] = 77 тактов.Код:Add @TAB(R1), -(R0)
2. Теперь определим используемые штрафы: [Штраф исполнения]+[Штраф второго операнда]+[Штраф отмены предвыборки]+[Штраф префиксной адресации ( за второй операнд ) ] = 1+1+2+1 = 5 тактов.
3. Определим суммарную продолжительность выполнения команды: 77 + 5 = 82 такта ( что полностью соответствует измеренной величине ) .
Так команды с байтами получаются быстрее или медленнее? И насколько?
Таблицы таймингов рулят.
По идее - во 2-й и 3-й колонках везде должно быть 40 тактов, а не 41.Код: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
>Таблицы таймингов рулят.
Это конечно, но элементарных вопросов, когда всё познаёшь с нуля не избежать.
Как я понимаю по таблице, с байтами команды работают то же время, что и со словами. Это же таблица для однооперандных команд? И почему время выполнения OPR @(R0)+ и ORP @-(R0) отличается на такт? Неужели из-за того, что постинкремент мог параллелиться с основной командой?
Именно!
Вообще, независимая параллельная работа отдельных блоков ( шинного, управляющего и арифметического ) применяется в процессорах ВМх везде, где только можно.
Разработчики стремились сделать так, чтобы на каждом такте каждый блок процессора вносил максимальный вклад в итоговое быстродействие.
Например, судя по итогам проведённого тестирования - шинный блок 1801ВМ1 сам начинает (предположительно) предвыборку кода следующей команды, пока управляющий блок ещё не раскодировал текущую. Из-за этого в тех случаях, когда текущая команда запрашивает дополнительный цикл шины ( чтобы прочитать или записать операнд ) - происходит удлинение выполнения команды из-за отмены предвыборки (это может быть и просто задержка получения исполнительного адреса). Штраф отмены предвыборки у 1801ВМ1 составляет 2 такта ( или, возможно, только 1 такт - это ещё предстоит уточнить ).
Ого, таки не лаптем щи у нас хлебали! =)