PDP-11/83, Электроника МС0511 (УК-НЦ), DECserver 90M
Q-Bus: H9278-A, DLV11-J, DZQ11, DHV11, DELQA-M, LPV11, CQD-420/TM, DRV11
PMI: KDJ11-BF, MSV11-JE
VT220, CM7209
Если свести всё разнообразие таймингов команд процессора 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 такта ( что полностью соответствует измеренной величине ) .
Последний раз редактировалось Patron; 18.12.2012 в 13:03.
Так команды с байтами получаются быстрее или медленнее? И насколько?
Таблицы таймингов рулят.
По идее - во 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) отличается на такт? Неужели из-за того, что постинкремент мог параллелиться с основной командой?
Последний раз редактировалось NovaStorm; 19.12.2012 в 14:25.
Именно!
Вообще, независимая параллельная работа отдельных блоков ( шинного, управляющего и арифметического ) применяется в процессорах ВМх везде, где только можно.
Разработчики стремились сделать так, чтобы на каждом такте каждый блок процессора вносил максимальный вклад в итоговое быстродействие.
Например, судя по итогам проведённого тестирования - шинный блок 1801ВМ1 сам начинает (предположительно) предвыборку кода следующей команды, пока управляющий блок ещё не раскодировал текущую. Из-за этого в тех случаях, когда текущая команда запрашивает дополнительный цикл шины ( чтобы прочитать или записать операнд ) - происходит удлинение выполнения команды из-за отмены предвыборки (это может быть и просто задержка получения исполнительного адреса). Штраф отмены предвыборки у 1801ВМ1 составляет 2 такта ( или, возможно, только 1 такт - это ещё предстоит уточнить ).
Последний раз редактировалось Patron; 20.12.2012 в 12:17.
Ого, таки не лаптем щи у нас хлебали! =)
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)