Rocketcore中的“ wxd”是什么?

时间:2018-11-15 19:52:23

标签: riscv chisel rocket-chip

在火箭核心旁通逻辑中

 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 :(得分:1)

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

据我了解,ex_ctrlmem_ctrl分别在其流水线阶段ex和mem引用指令,因此ex_ctrl.wxd在ex阶段的指令时设置是一个写入寄存器的寄存器(即使它要等到wb阶段才进行写操作)。


背景

当在wb管道阶段为指令声明wxd时,火箭微体系结构将暂停读取协处理器结果-因为读取协处理器结果意味着写入处理器寄存器,因此也写入处理器的寄存器文件。 ,赋予处理器指令优先于协处理器指令的权限。仅当wxd设置为false时,协处理器结果值才被传送到处理器寄存器文件中(这意味着处理器指令将不会写入)。

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