
Сообщение от
Vslav
пока ясная закономерность не выявлена
Закономерность приведённых на картинке таймингов станет вполне понятной, если учесть запрет предвыборки.
Запрет предвыборки происходит при любом переходе, при любом обращении к памяти в последнем операнде и в некоторых других случаях ( в исходнике A-модели MPI_1801VM1.cpp запрет предвыборки кодируется так: bPreFetchEnabled = false ).
Общий алгоритм вычисления добавочных тактов nALU_Delay после чтения кода команды ( в обсуждаемой ситуации нулевых задержек RPLY ) следующий:
1. Если предыдущая команда запретила предвыборку: nALU_Delay = 2
2. Если предыдущая команда не запретила предвыборку: nALU_Delay = 3 + nOverrun
3. Если предыдущая команда NOP или SWAB Rx - nOverrun = 1
Для интереса - если предыдущая команда MovB x, Rx - то nOverrun = 3, а для команды MovB Rx, Rx на ВМ1г: nOverrun = 5.
Поэтому, если на ВМ1г выполнить последовательность:
Код:
MOVB R0, R1
TST R0
TST R0
TST R0
То между первым циклом чтения и вторым пройдёт 2 такта, между вторым и третьим - 8 тактов, а между третьим и четвёртым - 3 такта.
На шине это будет выглядеть так:
Код:
;
000000 [000340] MOVB R0, R1 ; R0 : 177 -> R1
-------------------------------------------------
C B S D D W R B I I D D S I H E A D I S S
L AD S Y I O T P S R A M M A N A V C C R L L
C Y N N U B L 7 Q K R G C I L N L L 3 1 2
-------------------------------------------------
1 000000 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 000000 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 110001 1 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 110001 1 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 000000 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
000002 [000340] TST R0 ; R0 :077577
-------------------------------------------------
C B S D D W R B I I D D S I H E A D I S S
L AD S Y I O T P S R A M M A N A V C C R L L
C Y N N U B L 7 Q K R G C I L N L L 3 1 2
-------------------------------------------------
1 000002 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 000002 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 005700 1 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 005700 1 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 000000 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
000004 [000340] TST R0 ; R0 :077577
-------------------------------------------------
C B S D D W R B I I D D S I H E A D I S S
L AD S Y I O T P S R A M M A N A V C C R L L
C Y N N U B L 7 Q K R G C I L N L L 3 1 2
-------------------------------------------------
1 000004 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 000004 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 005700 1 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 005700 1 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 000000 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
000006 [000340] TST R0 ; R0 :077577
-------------------------------------------------
C B S D D W R B I I D D S I H E A D I S S
L AD S Y I O T P S R A M M A N A V C C R L L
C Y N N U B L 7 Q K R G C I L N L L 3 1 2
-------------------------------------------------
1 000006 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 000006 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 005700 1 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 005700 1 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 000000 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0