1*be25371aSYikeZhoupackage xiangshan.backend.decode 2*be25371aSYikeZhou 3*be25371aSYikeZhouimport chisel3._ 4*be25371aSYikeZhouimport chisel3.util._ 5*be25371aSYikeZhou 6*be25371aSYikeZhouimport xiangshan._ 7*be25371aSYikeZhouimport utils._ 8*be25371aSYikeZhouimport xiangshan.backend._ 9*be25371aSYikeZhou 10*be25371aSYikeZhou// TODO Add lookup table here 11*be25371aSYikeZhou/** 12*be25371aSYikeZhou * Abstract trait giving defaults and other relevant values to different Decode constants/ 13*be25371aSYikeZhou */ 14*be25371aSYikeZhouabstract trait DecodeConstants { 15*be25371aSYikeZhou def decodeDefault: List[BitPat] = 16*be25371aSYikeZhou // TODO set default value for ctrl signal 17*be25371aSYikeZhou List(???) 18*be25371aSYikeZhou val table: Array[(BitPat, List[BitPat])] 19*be25371aSYikeZhou} 20*be25371aSYikeZhou 21*be25371aSYikeZhou/** 22*be25371aSYikeZhou * Decoded control signals 23*be25371aSYikeZhou * See xiangshan/package.scala 24*be25371aSYikeZhou */ 25*be25371aSYikeZhou 26*be25371aSYikeZhou/** 27*be25371aSYikeZhou * Decode constants for RV64 28*be25371aSYikeZhou */ 29*be25371aSYikeZhouobject X64Decode extends DecodeConstants { 30*be25371aSYikeZhou val table: Array[(BitPat, List[BitPat])] = Array() 31*be25371aSYikeZhou} 32*be25371aSYikeZhou 33*be25371aSYikeZhou/** 34*be25371aSYikeZhou * Overall Decode constants 35*be25371aSYikeZhou */ 36*be25371aSYikeZhouobject XDecode extends DecodeConstants { 37*be25371aSYikeZhou val table: Array[(BitPat, List[BitPat])] = Array() 38*be25371aSYikeZhou} 39*be25371aSYikeZhou 40*be25371aSYikeZhou/** 41*be25371aSYikeZhou * FP Decode constants 42*be25371aSYikeZhou */ 43*be25371aSYikeZhouobject FDecode extends DecodeConstants{ 44*be25371aSYikeZhou val table: Array[(BitPat, List[BitPat])] = Array() 45*be25371aSYikeZhou} 46*be25371aSYikeZhou 47*be25371aSYikeZhou/** 48*be25371aSYikeZhou * FP Divide SquareRoot Constants 49*be25371aSYikeZhou */ 50*be25371aSYikeZhouobject FDivSqrtDecode extends DecodeConstants { 51*be25371aSYikeZhou val table: Array[(BitPat, List[BitPat])] = Array() 52*be25371aSYikeZhou} 53*be25371aSYikeZhou 54*be25371aSYikeZhou 55*be25371aSYikeZhou 56*be25371aSYikeZhou// TODO Add BitPat of Instructions somewhere else 57*be25371aSYikeZhou 58*be25371aSYikeZhou/** 59*be25371aSYikeZhou * IO bundle for the Decode unit 60*be25371aSYikeZhou */ 61*be25371aSYikeZhouclass DecodeUnitIO extends XSBundle { 62*be25371aSYikeZhou val enq = new Bundle { val ctrl_flow = Input(new CtrlFlow) } 63*be25371aSYikeZhou val deq = new Bundle { val cf_ctrl = Output(new CfCtrl) } 64*be25371aSYikeZhou} 65*be25371aSYikeZhou 66*be25371aSYikeZhou/** 67*be25371aSYikeZhou * Decode unit that takes in a single CtrlFlow and generates a CfCtrl. 68*be25371aSYikeZhou */ 69*be25371aSYikeZhouclass DecodeUnit extends XSModule { 70*be25371aSYikeZhou val io = IO(new DecodeUnitIO) 71*be25371aSYikeZhou 72*be25371aSYikeZhou val ctrl_flow = Wire(new CtrlFlow) 73*be25371aSYikeZhou ctrl_flow := io.enq.ctrl_flow 74*be25371aSYikeZhou 75*be25371aSYikeZhou var decode_table = ??? // TODO build table 76*be25371aSYikeZhou 77*be25371aSYikeZhou val inst = ctrl_flow.instr 78*be25371aSYikeZhou 79*be25371aSYikeZhou val cs = ??? // TODO add ctrl signals 80*be25371aSYikeZhou 81*be25371aSYikeZhou 82*be25371aSYikeZhou 83*be25371aSYikeZhou //------------------------------------------------------------- 84*be25371aSYikeZhou // Debug Info 85*be25371aSYikeZhou 86*be25371aSYikeZhou // TODO add more debug info 87*be25371aSYikeZhou} 88