XSCore.scala 2.6 KB
Newer Older
L
LinJiawei 已提交
1 2 3 4 5 6 7
package xiangshan

import chisel3._
import chisel3.util._
import bus.simplebus._
import noop.{Cache, CacheConfig, HasExceptionNO, TLB, TLBConfig}
import xiangshan.backend._
8 9
import xiangshan.backend.exu.ExuConfig
import xiangshan.frontend.Frontend
L
LinJiawei 已提交
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

trait HasXSParameter {
  val XLEN = 64
  val HasMExtension = true
  val HasCExtension = true
  val HasDiv = true
  val HasIcache = true
  val HasDcache = true
  val EnableStoreQueue = false
  val AddrBits = 64 // AddrBits is used in some cases
  val VAddrBits = 39 // VAddrBits is Virtual Memory addr bits
  val PAddrBits = 32 // PAddrBits is Phyical Memory addr bits
  val AddrBytes = AddrBits / 8 // unused
  val DataBits = XLEN
  val DataBytes = DataBits / 8
  val HasFPU = true
  val FetchWidth = 8
27
  val IBufSize = 64
28 29 30
  val DecodeWidth = 8
  val DecBufSize = 8
  val RenameWidth = 6
L
LinJiawei 已提交
31
  val CommitWidth = 6
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
  val BrqSize = 16
  val BrTagWidth = log2Up(BrqSize)
  val NRPhyRegs = 96
  val PhyRegIdxWidth = log2Up(NRPhyRegs)
  val NRReadPorts = 14
  val NRWritePorts = 8
  val RoqSize = 128
  val RoqIdxWidth = log2Up(RoqSize)
  val IntDqDeqWidth = 4
  val FpDqDeqWidth = 4
  val LsDqDeqWidth = 4
  val exuConfig = ExuConfig(
    AluCnt = 4,
    BruCnt = 1,
    MulCnt = 1,
    MduCnt = 1,
    FmacCnt = 4,
    FmiscCnt = 1,
    FmiscDivSqrtCnt = 1,
51 52
    LduCnt = 1,
    StuCnt = 1
53
  )
L
LinJiawei 已提交
54 55 56 57 58 59
}

abstract class XSModule extends Module
  with HasXSParameter
  with HasExceptionNO

60 61 62 63 64 65 66 67 68
//remove this trait after impl module logic
trait NeedImpl { this: Module =>
  override protected def IO[T <: Data](iodef: T): T = {
    val io = chisel3.experimental.IO(iodef)
    io <> DontCare
    io
  }
}

L
LinJiawei 已提交
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
abstract class XSBundle extends Bundle
  with HasXSParameter

case class XSConfig
(
  FPGAPlatform: Boolean = true,
  EnableDebug: Boolean = false
)

class XSCore(implicit val p: XSConfig) extends XSModule {
  val io = IO(new Bundle {
    val imem = new SimpleBusC
    val dmem = new SimpleBusC
    val mmio = new SimpleBusUC
    val frontend = Flipped(new SimpleBusUC())
  })

  io.imem <> DontCare

  val dmemXbar = Module(new SimpleBusCrossbarNto1(3))

90
  val front = Module(new Frontend)
L
LinJiawei 已提交
91 92
  val backend = Module(new Backend)

93
  front.io.backend <> backend.io.frontend
L
LinJiawei 已提交
94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113

  backend.io.memMMU.imem <> DontCare

  val dtlb = TLB(
    in = backend.io.dmem,
    mem = dmemXbar.io.in(1),
    flush = false.B,
    csrMMU = backend.io.memMMU.dmem
  )(TLBConfig(name = "dtlb", totalEntry = 64))
  dmemXbar.io.in(0) <> dtlb.io.out
  dmemXbar.io.in(2) <> io.frontend

  io.dmem <> Cache(
    in = dmemXbar.io.out,
    mmio = Seq(io.mmio),
    flush = "b00".U,
    empty = dtlb.io.cacheEmpty,
    enable = HasDcache
  )(CacheConfig(name = "dcache"))
}