在火箭核心旁路逻辑中
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代表什么?
发布于 2018-11-15 23:10:48
据我所知,wxd
是为将值写入寄存器的指令设置的,即有一个结果值,因此将其写入寄存器文件。一些相当简单的解码逻辑(例如R型指令的测试)确定每条指令是否是这样的写入器。
另外,据我所理解,ex_ctrl
和mem_ctrl
分别引用了它们的管道阶段的指令ex和mem,因此,当ex阶段的指令是写到寄存器的指令时(即使它要到wb阶段才能完成写入),就会设置ex_ctrl.wxd
。
背景
火箭微架构暂停读取协处理器结果--就像读取协处理器结果意味着写入处理器寄存器,因此也是对处理器寄存器文件的写入--在wb流水线级为指令断言wxd
时,给予处理器指令优先于协处理器指令的优先级。协处理器结果值仅在wxd
设置为假时才传送到处理器寄存器文件中(这意味着处理器指令不会写入)。
这种机制限制了写入寄存器文件所需的端口数。
https://stackoverflow.com/questions/53326977
复制相似问题