что такое wxd в рокеткоре?

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

 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?


person Shibo Chen    schedule 15.11.2018    source источник


Ответы (1)


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

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


Фон

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

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

person Erik Eidt    schedule 15.11.2018