在火箭核心旁通逻辑中
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 代表什么?
答案 0 :(得分:1)
据我了解,wxd
是为将值写入寄存器(即具有结果值)的指令设置的,因此将其写入寄存器文件。一些相当简单的解码逻辑(例如,测试R型指令)可以识别每个指令是否是这样的编写器。
据我了解,ex_ctrl
和mem_ctrl
分别在其流水线阶段ex和mem引用指令,因此ex_ctrl.wxd
在ex阶段的指令时设置是一个写入寄存器的寄存器(即使它要等到wb阶段才进行写操作)。
背景
当在wb管道阶段为指令声明wxd
时,火箭微体系结构将暂停读取协处理器结果-因为读取协处理器结果意味着写入处理器寄存器,因此也写入处理器的寄存器文件。 ,赋予处理器指令优先于协处理器指令的权限。仅当wxd
设置为false时,协处理器结果值才被传送到处理器寄存器文件中(这意味着处理器指令将不会写入)。
此机制限制了写入寄存器文件所需的端口数。