11e3fad10SLinJiaweipackage xiangshan 21e3fad10SLinJiawei 31e3fad10SLinJiaweiimport chisel3._ 4*5844fcf0SLinJiaweiimport chisel3.util._ 51e3fad10SLinJiawei 6*5844fcf0SLinJiawei// Fetch FetchWidth x 32-bit insts from Icache 71e3fad10SLinJiaweiclass FetchPacket extends XSBundle { 81e3fad10SLinJiawei val instrs = Vec(FetchWidth, UInt(32.W)) 91e3fad10SLinJiawei val mask = UInt(FetchWidth.W) 101e3fad10SLinJiawei val pc = UInt(VAddrBits.W) // the pc of first inst in the fetch group 111e3fad10SLinJiawei} 121e3fad10SLinJiawei 13*5844fcf0SLinJiawei// Dequeue DecodeWidth insts from Ibuffer 14*5844fcf0SLinJiaweiclass CtrlFlow extends XSBundle { 15*5844fcf0SLinJiawei val instr = UInt(32.W) 16*5844fcf0SLinJiawei val pc = UInt(VAddrBits.W) 17*5844fcf0SLinJiawei val exceptionVec = Vec(16, Bool()) 18*5844fcf0SLinJiawei val intrVec = Vec(12, Bool()) 19*5844fcf0SLinJiawei} 20*5844fcf0SLinJiawei 21*5844fcf0SLinJiawei// Decode DecodeWidth insts at Decode Stage 22*5844fcf0SLinJiaweiclass CtrlSignals extends XSBundle { 23*5844fcf0SLinJiawei 24*5844fcf0SLinJiawei} 25*5844fcf0SLinJiawei 26*5844fcf0SLinJiaweiclass CfCtrl extends XSBundle { 27*5844fcf0SLinJiawei val cf = new CtrlFlow 28*5844fcf0SLinJiawei val ctrl = new CtrlSignals 29*5844fcf0SLinJiawei} 30*5844fcf0SLinJiawei 31*5844fcf0SLinJiawei// CfCtrl -> MicroOp at Rename Stage 32*5844fcf0SLinJiaweiclass MicroOp extends CfCtrl { 33*5844fcf0SLinJiawei 34*5844fcf0SLinJiawei val psrc1, psrc2, psrc3, pdst, old_pdst = UInt(PhyRegIdxWidth.W) 35*5844fcf0SLinJiawei 36*5844fcf0SLinJiawei val brMask = UInt(BrqSize.W) 37*5844fcf0SLinJiawei val brTag = UInt(BrTagWidth.W) 38*5844fcf0SLinJiawei 39*5844fcf0SLinJiawei val roqIdx = UInt(RoqIdxWidth.W) 40*5844fcf0SLinJiawei} 41*5844fcf0SLinJiawei 421e3fad10SLinJiaweiclass Redirect extends XSBundle { 431e3fad10SLinJiawei val target = UInt(VAddrBits.W) 44*5844fcf0SLinJiawei val brTag = UInt(BrTagWidth.W) 45*5844fcf0SLinJiawei} 46*5844fcf0SLinJiawei 47*5844fcf0SLinJiaweiclass Dp1ToDp2IO extends XSBundle { 48*5844fcf0SLinJiawei val intDqToDp2 = Vec(IntDqDeqWidth, DecoupledIO(new MicroOp)) 49*5844fcf0SLinJiawei val fpDqToDp2 = Vec(FpDqDeqWidth, DecoupledIO(new MicroOp)) 50*5844fcf0SLinJiawei val lsDqToDp2 = Vec(LsDqDeqWidth, DecoupledIO(new MicroOp)) 51*5844fcf0SLinJiawei} 52*5844fcf0SLinJiawei 53*5844fcf0SLinJiawei 54*5844fcf0SLinJiaweiclass ExuInput extends XSBundle { 55*5844fcf0SLinJiawei val uop = new MicroOp 56*5844fcf0SLinJiawei val src1, src2, src3 = UInt(XLEN.W) 57*5844fcf0SLinJiawei val isRVF = Bool() 58*5844fcf0SLinJiawei} 59*5844fcf0SLinJiawei 60*5844fcf0SLinJiaweiclass ExuOutput extends XSBundle { 61*5844fcf0SLinJiawei val uop = new MicroOp 62*5844fcf0SLinJiawei val data = UInt(XLEN.W) 63*5844fcf0SLinJiawei} 64*5844fcf0SLinJiawei 65*5844fcf0SLinJiaweiclass ExuIO extends XSBundle { 66*5844fcf0SLinJiawei val in = Flipped(DecoupledIO(new ExuInput)) 67*5844fcf0SLinJiawei val out = DecoupledIO(new ExuOutput) 68*5844fcf0SLinJiawei} 69*5844fcf0SLinJiawei 70*5844fcf0SLinJiaweiclass RoqCommit extends XSBundle { 71*5844fcf0SLinJiawei val uop = new MicroOp 72*5844fcf0SLinJiawei} 73*5844fcf0SLinJiawei 74*5844fcf0SLinJiaweiclass FrontendToBackendIO extends XSBundle { 75*5844fcf0SLinJiawei // to backend end 76*5844fcf0SLinJiawei val cfVec = Vec(DecodeWidth, DecoupledIO(new CtrlFlow)) 77*5844fcf0SLinJiawei // from backend 78*5844fcf0SLinJiawei val redirect = Flipped(ValidIO(new Redirect)) 79*5844fcf0SLinJiawei val commits = Vec(CommitWidth, Flipped(ValidIO(new RoqCommit))) // update branch pred 801e3fad10SLinJiawei}