Что такое машинный цикл?

Я немного смущен точным определением «машинного цикла».

Например, некоторый источник в Интернете сообщает, что это:

Четыре шага, которые CPU выполняет для каждой инструкции машинного языка: выборка, декодирование, выполнение и сохранение.

Хотя книга Программирование Z80, предположительно хорошая репутация, говорит:

Мы видели, что все инструкции выполняются в три этапа: FETCH, DECODE, EXECUTE. Теперь нам нужно ввести некоторые определения. Каждая из этих фаз потребует нескольких тактов. Z80 выполняет каждую фазу в одном или нескольких логических циклах, называемых «машинным циклом».

Что меня здесь смущает, так это то, что, насколько я понял, первый в основном говорит: Машинный цикл - это цикл выборки-декодирования-выполнения, в то время как книга в основном говорит: A машинный цикл - это один или несколько тактов, которые происходят в каждом цикле выборки, декодирования или выполнения индивидуально.

Итак, что есть что?


person Abdelrahman Eid    schedule 06.08.2016    source источник
comment
en.wikipedia.org/wiki/Instruction_cycle   -  person YOU    schedule 06.08.2016
comment
@YOU Да, я читал это, и это то, что я показываю в первом примере. Значит ли это, что определение книги неверно?   -  person Abdelrahman Eid    schedule 06.08.2016
comment
первый говорит шаги. он явно не называет концепцию.   -  person Karoly Horvath    schedule 06.08.2016
comment
во всяком случае, в современных процессорах эти шаги перекрываются ...   -  person Karoly Horvath    schedule 06.08.2016
comment
Я бы не стал слишком увлекаться определениями. В этой дисциплине существует много несоответствий в терминологии, потому что она коренится в нескольких других и меняется так быстро. Разные авторы обычно выбирают одного, а затем поясняют, что они имеют в виду. Вот что вы здесь видите. По другим менее динамичным предметам терминология более последовательна. IME, цикл может означать выполнение одной инструкции или такт машинных часов. Современные процессоры имеют очень сложные каналы данных и многофазные часы, поэтому ни один термин не является точным.   -  person Gene    schedule 06.08.2016


Ответы (2)


z80 имеет два разных понятия «цикл». Различие имеет значение, потому что z80 - это многоцикловая архитектура, в которой используется как несколько тактов на «шаг», так и (часто) несколько «шагов» на инструкцию.

«Шаги» называются машинными циклами (M-циклами), они выполняют задачи «высокого уровня», такие как чтение из памяти, выполнение операции ALU и т. Д. Сложные инструкции, такие как inc (iy+42), занимают много машинных циклов, для декодирования префикса, основной код операции, считывание смещения, добавление его к iy, выполнение приращения и обратная запись результата. У условных переходов даже есть переменное количество M-циклов, они пропускают M-цикл, который выполняет этот фактический переход, если условие ложно.

Затем каждый M-цикл занимает несколько (от 3 до 6) тактовых циклов (также известный как T-цикл или T-состояние, эта терминология в основном исчезла, если не относится к старым многоцикловым процессорам). Например, чтение из памяти займет 3 цикла, декодирование кода операции обычно занимает 4, некоторые внутренние операции занимают 5, а 16-битные приращения каким-то образом расширяют OCF на 2 других цикла.

Это все довольно специфично для z80.

В другом месте термин «машинный цикл» использовался для обозначения своего рода «полного отключения» инструкции от начала до конца. Это не то, что имелось бы в виду в контексте z80.

person harold    schedule 06.08.2016
comment
Педантичность: условная JP стоит одинаково вне зависимости от того, взята ли ветка; JR, CALL и RET имеют переменную синхронизацию, поэтому я классифицирую этот комментарий как, возможно, не столь необходимый. CALL, хотя и интересный: согласно документации он решает, будет ли он выполнять вызов до того, как закончит чтение операнда, и бросает дополнительное состояние ожидания в выборку третьего байта только в том случае, если ему нужно настроить SP. Таким образом, он загружает дополнительную работу в существующий машинный цикл (хотя, вероятно, это реализовано как выбор другого машинного цикла). - person Tommy; 20.06.2017

Четыре шага, которые CPU выполняет для каждой инструкции машинного языка: выборка, декодирование, выполнение и сохранение.

Каждый из этих шагов обычно происходит в другом цикле. «Выполнение» - это сложный процесс, включающий несколько подэтапов и множество транзисторов, но для большинства инструкций он все же может быть выполнен за один цикл. Это одна из причин, по которой в этих местах устанавливаются границы между частями процессора.


первый в основном говорит: Машинный цикл - это цикл выборки-декодирования-выполнения

Нет, это не так. Это совершенно неверно. Старые неконвейерные процессоры обычно имеют пропускную способность менее одной инструкции за цикл, потому что каждая инструкция занимает несколько циклов, прежде чем может начаться следующая.


Тактовый цикл ЦП или машинный цикл - это цикл от низкого напряжения до высокого и обратно. https://en.wikipedia.org/wiki/Clock_signal. ЦП использует этот тактовый вход для синхронизации различных шагов.

Максимальная тактовая частота процессора ограничена самой медленной вещью, которая должна произойти за один такт. например возможно, на этапе декодирования много задержек затвора, поэтому, если часы работают быстрее, результат не будет зафиксирован в защелке между этим этапом и следующим этапом, когда часы перейдут с высокого на низкий.

Конвейерный ЦП будет пытаться поддерживать занятость своих различных этапов одновременно, вместо того, чтобы ждать завершения выполнения одной инструкции перед декодированием (или, возможно, даже выборкой) следующей. См. https://en.wikipedia.org/wiki/Classic_RISC_pipeline.

person Peter Cordes    schedule 06.08.2016
comment
Спасибо за это простое объяснение. Но я думаю, что это чистое / абстрактное определение машинного цикла, верно? Если да, то какой из двух приведенных мной примеров правильный? Потому что, насколько я понял, они оба работают одним и тем же фундаментальным образом, который вы только что объяснили. - person Abdelrahman Eid; 06.08.2016
comment
@ Abd-ElrhmanEid: Обновлено, чтобы ответить на конкретный вопрос. В первый раз я в основном отвечал на заголовок. - person Peter Cordes; 06.08.2016