2015-07-08 05:38:47 +02:00
|
|
|
// See LICENSE for license details.
|
|
|
|
|
|
|
|
package rocketchip
|
|
|
|
|
|
|
|
import Chisel._
|
2015-10-22 03:23:58 +02:00
|
|
|
import cde.{Parameters, Field}
|
2015-07-30 02:56:19 +02:00
|
|
|
import junctions._
|
2015-07-08 05:38:47 +02:00
|
|
|
import uncore._
|
|
|
|
import rocket._
|
|
|
|
import zscale._
|
|
|
|
|
2015-07-14 00:46:42 +02:00
|
|
|
case object UseZscale extends Field[Boolean]
|
2015-10-06 19:47:38 +02:00
|
|
|
case object BuildZscale extends Field[(Bool, Parameters) => Zscale]
|
2015-07-17 21:02:02 +02:00
|
|
|
case object BootROMCapacity extends Field[Int]
|
|
|
|
case object DRAMCapacity extends Field[Int]
|
2015-07-14 00:46:42 +02:00
|
|
|
|
2015-10-06 19:47:38 +02:00
|
|
|
class ZscaleSystem(implicit p: Parameters) extends Module {
|
2015-07-08 05:38:47 +02:00
|
|
|
val io = new Bundle {
|
2015-10-06 19:47:38 +02:00
|
|
|
val host = new HtifIO
|
|
|
|
val jtag = new HastiMasterIO().flip
|
|
|
|
val bootmem = new HastiSlaveIO().flip
|
|
|
|
val dram = new HastiSlaveIO().flip
|
|
|
|
val spi = new HastiSlaveIO().flip
|
|
|
|
val led = new PociIO
|
|
|
|
val corereset = new PociIO
|
2015-07-08 05:38:47 +02:00
|
|
|
}
|
|
|
|
|
2015-10-06 19:47:38 +02:00
|
|
|
val core = p(BuildZscale)(io.host.reset, p)
|
2015-07-08 05:38:47 +02:00
|
|
|
|
|
|
|
val bootmem_afn = (addr: UInt) => addr(31, 14) === UInt(0)
|
|
|
|
|
|
|
|
val sbus_afn = (addr: UInt) => addr(31, 29).orR
|
|
|
|
val dram_afn = (addr: UInt) => addr(31, 26) === UInt(8)
|
|
|
|
val spi_afn = (addr: UInt) => addr(31, 26) === UInt(9) && addr(25, 14) === UInt(0)
|
|
|
|
|
|
|
|
val pbus_afn = (addr: UInt) => addr(31) === UInt(1)
|
|
|
|
val led_afn = (addr: UInt) => addr(31) === UInt(1) && addr(30, 10) === UInt(0)
|
|
|
|
val corereset_afn = (addr: UInt) => addr(31) === UInt(1) && addr(30, 10) === UInt(1)
|
|
|
|
|
2015-10-06 19:47:38 +02:00
|
|
|
val xbar = Module(new HastiXbar(3, Seq(bootmem_afn, sbus_afn)))
|
|
|
|
val sadapter = Module(new HastiSlaveToMaster)
|
|
|
|
val sbus = Module(new HastiBus(Seq(dram_afn, spi_afn, pbus_afn)))
|
|
|
|
val padapter = Module(new HastiToPociBridge)
|
|
|
|
val pbus = Module(new PociBus(Seq(led_afn, corereset_afn)))
|
2015-07-08 05:38:47 +02:00
|
|
|
|
|
|
|
core.io.host <> io.host
|
|
|
|
xbar.io.masters(0) <> io.jtag
|
|
|
|
xbar.io.masters(1) <> core.io.dmem
|
|
|
|
xbar.io.masters(2) <> core.io.imem
|
|
|
|
|
|
|
|
io.bootmem <> xbar.io.slaves(0)
|
|
|
|
sadapter.io.in <> xbar.io.slaves(1)
|
|
|
|
|
|
|
|
sbus.io.master <> sadapter.io.out
|
|
|
|
io.dram <> sbus.io.slaves(0)
|
|
|
|
io.spi <> sbus.io.slaves(1)
|
|
|
|
padapter.io.in <> sbus.io.slaves(2)
|
|
|
|
|
|
|
|
pbus.io.master <> padapter.io.out
|
|
|
|
io.led <> pbus.io.slaves(0)
|
|
|
|
io.corereset <> pbus.io.slaves(1)
|
|
|
|
}
|
|
|
|
|
2015-10-06 19:47:38 +02:00
|
|
|
class ZscaleTop(implicit p: Parameters) extends Module {
|
2015-07-08 05:38:47 +02:00
|
|
|
val io = new Bundle {
|
2015-10-06 19:47:38 +02:00
|
|
|
val host = new HtifIO
|
2015-07-08 05:38:47 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
val sys = Module(new ZscaleSystem)
|
2015-10-06 19:47:38 +02:00
|
|
|
val bootmem = Module(new HastiSRAM(p(BootROMCapacity)/4))
|
|
|
|
val dram = Module(new HastiSRAM(p(DRAMCapacity)/4))
|
2015-07-08 05:38:47 +02:00
|
|
|
|
|
|
|
sys.io.host <> io.host
|
|
|
|
bootmem.io <> sys.io.bootmem
|
|
|
|
dram.io <> sys.io.dram
|
|
|
|
}
|