Насколько я понимаю, wxd
устанавливается для инструкции, которая записывает значение в регистр, то есть имеет значение результата, поэтому записывает в файл регистра. Некоторая достаточно простая логика декодирования (например, тест для команды R-типа) определяет, является ли каждая команда таким писателем или нет.
Также, насколько я понимаю, ex_ctrl
и mem_ctrl
относятся к инструкциям на их этапах конвейера, ex и mem, соответственно - поэтому ex_ctrl.wxd
устанавливается, когда инструкция на этапе ex - это та, которая записывает в зарегистрироваться (хотя запись не будет выполняться до этапа wb).
Фон
Ракетная микроархитектура приостанавливает чтение результатов сопроцессора - поскольку чтение результатов сопроцессора означает запись регистра процессора, а также запись в файл регистров процессора - когда wxd
утверждается для инструкций на этапе конвейера wb, давая приоритет команд процессора перед командами сопроцессора. Значение результата сопроцессора передается в регистровый файл процессора только в том случае, если для wxd
установлено значение false (то есть инструкция процессора не будет записываться).
Этот механизм ограничивает количество портов, необходимых для записи файла регистра.