что такое "WXD" в ракетном - PullRequest
0 голосов
/ 15 ноября 2018

В логике обхода ядра ракеты

 val bypass_sources = IndexedSeq(
(Bool(true), UInt(0), UInt(0)), // treat reading x0 as a bypass
(ex_reg_valid && ex_ctrl.wxd, ex_waddr, mem_reg_wdata),
(mem_reg_valid && mem_ctrl.wxd && !mem_ctrl.mem, mem_waddr, wb_reg_wdata),
(mem_reg_valid && mem_ctrl.wxd, mem_waddr, dcache_bypass_data))

Что означают ex_ctrl.wxd и mem_ctrl.wxd ?

1 Ответ

0 голосов
/ 16 ноября 2018

Насколько я понимаю, wxd устанавливается для инструкции, которая записывает значение в регистр, то есть имеет значение результата, поэтому записывает в файл регистра. Некоторая достаточно простая логика декодирования (например, тест для команды R-типа) определяет, является ли каждая команда таким писателем или нет.

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


Фон

Ракетная микроархитектура приостанавливает чтение результатов сопроцессора - поскольку чтение результатов сопроцессора означает запись регистра процессора, а также запись в файл регистров процессора - когда wxd утверждается для инструкций на этапе конвейера wb, давая приоритет команд процессора перед командами сопроцессора. Значение результата сопроцессора передается в регистровый файл процессора только в том случае, если для wxd установлено значение false (то есть инструкция процессора не будет записываться).

Этот механизм ограничивает количество портов, необходимых для записи файла регистра.

...