А сколько должно пройти тактов от начала транзакции до REPLY, чтобы глюк проявился?
Вид для печати
Сходу не скажу. Но прикинем. Предвыборка приводящая к ошибке запрашивается в микрокоманде 0x10, далее в микрокоманде 0x13 идет собственно вычисление ALU. И выборка следующей инструкции начинается в микрокоманде 0x01.
Значит получается, что предвыборка должна завершиться за 8 тактов, чтобы глюков не было. Но это такие общие прикидки, надо смотреть точнее.
В моей схеме при чтении DRAM от фронта wb_stb до фронта wb_ack (reply) проходит 12 тактов. Не самый лучший, конечно, DRAM-контроллер, но глюк по идее должен проявиться. Впрочем, я не знаю, должен ли он вообще в моем случае проявиться:
Команда, идущая вслед за проблемной mov @pc,sp, также использует адресацию от PC, только в форме (PC)+. Это может влиять на проявление глюка?Код:3 000000 START:
4 000000 011706 MOV @PC,SP
5 000002 012702 000200 MOV #200,R2
6 000006 005000 CLR R0
7 000010 000000 HALT
Может.
Подробно я это не разбирал, т.к. @Alex_K наше на реале какие-то странные глюки, которые микропрограммой и сбоем в кэше пока не обьяснились. Хотя, все остальные глюки с предвыборкой обьяснились хорошо.
Кроме того, надо иметь ввиду, что синхронная модель это не асинхронная, и уж тем более не оригинал. И вполне могут быть отличия в таком специфическом деле.
А чего так медленно? На оригинальной МС1201.02 контроллер на 1801ВП1-013 довольно резво читает память и глюк не проявляется.
Вот на оригинальном 1801ВМ2 представленный вами фрагмент работает идеально, без всяких глюков. Чтобы глюк проявился надо также, чтобы команда, идущая за командой с адресацией @PC, не нарушала предвыборку, т.е. состояла бы из одного слова. А команда MOV #200,R2 фактически состоит из двух слов и предвыборку нарушает.
Я в выходные постараюсь заняться фиксом. Разберу кусочек микрокода и попробую разные варианты. Всем спасибо за помощь и информацию.
Alex_K, если ещё надо прогнать тест для 1806ВМ2 пишите в личку, я запущу машину.
Просто при адресациях @PC, -(PC) и @-(PC) надо делать недействительным кеш. Проблемы могут появится с декрементными адресациями, уж больно там интересные эффекты наблюдаются.
- - - Добавлено - - -
Да, кстати, в 1806ВМ2 по некоторым сведениям, эта проблема решена.
Микрокод менять нет смысла, ибо микрокоманда 0x13, в которой принимается решение о переходе на 0x01 или на 0x21, состоит из записей, применяемых и в других микрокомандах, в частности запись 11 (не микрокоманда) как раз отвечает за добавление 0x20 к адресу микрокоманды. При попытке это поменять, слетит весь микрокод. Лучше попробуй сделать, как я предложил выше.
Код:11: .............111 .0..00 ... ... 1..... ............................... Если dd=R7, то следующий адрес + 0x20 (т.е. адреса 0x21 для простых операций)