rocketcore 中的 "wxd" 是什么?

what is "wxd" in rocketcore?

在火箭核心旁路逻辑中

 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.wxdmem_ctrl.wxd分别代表什么?

据我了解,wxd是为一条指令设置的,该指令将值写入寄存器,即具有结果值,因此写入寄存器文件。一些相当简单的解码逻辑(例如测试 R 型指令)识别每条指令是否是这样的编写器。

据我了解,ex_ctrlmem_ctrl 分别指的是它们的流水线阶段 ex 和 mem 中的指令——所以当指令在ex 阶段是写入寄存器的阶段(即使直到 wb 阶段它才会写入)。


背景

火箭微架构暂停读取协处理器结果——因为读取协处理器结果意味着写入处理器寄存器,所以也写入处理器的寄存器文件——当 wxd 中的指令被断言时wb 流水线阶段,使处理器指令优先于协处理器指令。当 wxd 设置为 false(意味着处理器指令不会写入)时,协处理器结果值仅传输到处理器寄存器文件。

此机制限制了写入寄存器文件所需的端口数。