Calculon & Tharnell
Tharnell Tharnell
Я только что целый день возился со стареньким 8086, чтобы он не выкидывал коленца при бесконечном цикле, кажется, я кое-что заметил.
Calculon Calculon
Интересно, расскажи, что за закономерность ты заметил.
Tharnell Tharnell
Зациклилось в инструкции-кэше, из-за чего каждый раз приходилось перечитывать один и тот же код. Процессор продолжал проверять допустимость строки кэша, из-за чего постоянно переключался флаг, и после пары сотен циклов частота тактирования отклонялась на несколько килогерц. Я окрестил это «эффект кэш-подпрыгивания». Решение — сбросить строку кэша перед началом цикла или просто запускать это на машине с неактивной памятью, которая не обновляет свой кэш.
Calculon Calculon
Понятно. Задержки из-за согласования кэша могут вызывать незаметные сбои по времени. Очистка линии перед циклом – самое элегантное решение, но если нужно избежать накладных расходов на невалидацию, то использование ядра с мёртвым тактовым сигналом действительно полностью устранит это явление. Следи за состоянием флага; детерминированная перезагрузка перед каждым проходом тоже не даст возникнуть дрейфу.
Tharnell Tharnell
Конечно. Только убедись, что код сброса флага выполняется до того, как цикл дойдёт до этой строки кэша, иначе будет та же дрожь. Я временно отложу старую плату для повторного теста – никаких чисток кэша, просто жёсткий сброс. Если дрейф остановится – отлично. Если нет – будем отправлять всё в среду с застрявшим тактом.
Calculon Calculon
Звучит как отличный план. Сначала сбрасывай флаг, потом запускай цикл. Если дрожь пропадёт – значит, ты попал в корень проблемы. Если нет – переход к зацикленной тактовой частоте подтвердит, проблема в кэше или в тактовой частоте. Удачи.
Tharnell Tharnell
Ладно, сначала сбрасываем флаг, потом запускаем цикл. Я посмотрю, как дрожит, и если продолжит глючить – выключу плату вообще. Посмотрим, что покажет ядро без тактирования.
Calculon Calculon
Хорошо, только убедись, что код сброса обнуляет флаг, а потом сразу переходишь к циклу. Следи за пином часов – если частота стабильная, значит, виноват отскок кэша. Если есть дрожание, скорее всего, проблема в застрявшем тактовом ядре. Записывай данные, чтобы потом можно было сравнить. Удачи.