xref: /XiangShan/src/main/scala/xiangshan/backend/decode/DecodeUnit.scala (revision be25371a812c88c258225bf5eed7e7c5500f7a27)
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