diff --git a/.gitmodules b/.gitmodules index 0577778b..8ccfce66 100644 --- a/.gitmodules +++ b/.gitmodules @@ -19,3 +19,6 @@ [submodule "fpga-zynq"] path = fpga-zynq url = https://github.com/ucb-bar/fpga-zynq.git +[submodule "zscale"] + path = zscale + url = https://github.com/ucb-bar/zscale diff --git a/Makefrag b/Makefrag index 076aacd2..fc427760 100644 --- a/Makefrag +++ b/Makefrag @@ -30,7 +30,7 @@ timeout_cycles = 100000000 #-------------------------------------------------------------------- $(generated_dir)/$(MODEL).$(CONFIG).v: $(chisel_srcs) - cd $(base_dir) && mkdir -p $(generated_dir) && $(SBT) "project rocketchip" "elaborate $(MODEL) --backend $(BACKEND) --targetDir $(generated_dir) --configDump --noInlineMem --configInstance rocketchip.$(CONFIG)" + cd $(base_dir) && mkdir -p $(generated_dir) && $(SBT) "project rocketchip" "elaborate $(MODEL) --backend $(BACKEND) --targetDir $(generated_dir) --W0W --configDump --noInlineMem --configInstance rocketchip.$(CONFIG)" cd $(generated_dir) && \ if [ -a $(MODEL).$(CONFIG).conf ]; then \ $(mem_gen) $(generated_dir)/$(MODEL).$(CONFIG).conf >> $(generated_dir)/$(MODEL).$(CONFIG).v; \ @@ -43,7 +43,7 @@ $(generated_dir)/consts.$(CONFIG).vh: $(generated_dir)/$(MODEL).$(CONFIG).v echo "\`endif // CONST_VH" >> $@ $(generated_dir)/memdessertMemDessert.$(CONFIG).v: $(base_dir)/$(src_path)/*.scala $(base_dir)/uncore/$(src_path)/*.scala - cd $(base_dir) && mkdir -p $(generated_dir) && $(SBT) "project rocketchip" "elaborate MemDessert --backend v --targetDir $(generated_dir) --moduleNamePrefix memdessert --configInstance rocketchip.$(CONFIG)" + cd $(base_dir) && mkdir -p $(generated_dir) && $(SBT) "project rocketchip" "elaborate MemDessert --backend v --targetDir $(generated_dir) --W0W --moduleNamePrefix memdessert --configInstance rocketchip.$(CONFIG)" #-------------------------------------------------------------------- # DRAMSim2 diff --git a/project/build.scala b/project/build.scala index 9b0b2da2..e1504bba 100644 --- a/project/build.scala +++ b/project/build.scala @@ -31,8 +31,9 @@ object BuildSettings extends Build { lazy val hardfloat = Project("hardfloat", file("hardfloat"), settings = buildSettings) dependsOn(chisel) lazy val uncore = Project("uncore", file("uncore"), settings = buildSettings) dependsOn(hardfloat) lazy val rocket = Project("rocket", file("rocket"), settings = buildSettings) dependsOn(uncore) + lazy val zscale = Project("zscale", file("zscale"), settings = buildSettings) dependsOn(rocket) - val baselist = Vector("chisel", "uncore", "rocket", "hardfloat") + val baselist = Vector("chisel", "uncore", "rocket", "zscale", "hardfloat") def getsubdirs = { val blacklist = (baselist ++ Vector("target", "project")) IO.listFiles(file(".")) map (_.toString.split("/").last) filter (f=> !blacklist.contains(f) && (f(0)!='.')) filter (f=> !IO.listFiles(file(f+"/src/main/scala")).isEmpty) @@ -54,8 +55,8 @@ object BuildSettings extends Build { lazy val addons = Project("addons", file(".addons-dont-touch"), settings = buildSettings ++ Seq( prepareTask := prepareTaskImpl, (compile in Compile) <<= (compile in Compile) dependsOn (prepareTask) - )) dependsOn(chisel, hardfloat, uncore, rocket) - lazy val rocketchip = Project("rocketchip", file("."), settings = buildSettings ++ chipSettings).dependsOn(chisel, uncore, rocket, addons) + )) dependsOn(chisel, hardfloat, uncore, rocket, zscale) + lazy val rocketchip = Project("rocketchip", file("."), settings = buildSettings ++ chipSettings).dependsOn(chisel, uncore, rocket, zscale, addons) val elaborateTask = InputKey[Unit]("elaborate", "convert chisel components into backend source code") val makeTask = InputKey[Unit]("make", "trigger backend-specific makefile command") diff --git a/src/main/scala/ZscaleChip.scala b/src/main/scala/ZscaleChip.scala new file mode 100644 index 00000000..ec9beeab --- /dev/null +++ b/src/main/scala/ZscaleChip.scala @@ -0,0 +1,69 @@ +// See LICENSE for license details. + +package rocketchip + +import Chisel._ +import uncore._ +import rocket._ +import zscale._ + +class ZscaleSystem extends Module { + val io = new Bundle { + 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 + } + + val core = Module(new Zscale(io.host.reset), {case TLId => "L1ToL2"}) + + 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) + + 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))) + + 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) +} + +class ZscaleTop extends Module { + val io = new Bundle { + val host = new HTIFIO + } + + val sys = Module(new ZscaleSystem) + val bootmem = Module(new HASTISRAM(4096)) + val dram = Module(new HASTISRAM(4194304)) + + sys.io.host <> io.host + bootmem.io <> sys.io.bootmem + dram.io <> sys.io.dram +} diff --git a/zscale b/zscale new file mode 160000 index 00000000..81f351bc --- /dev/null +++ b/zscale @@ -0,0 +1 @@ +Subproject commit 81f351bc9c59f2de26e2062f65079e9e72b37e59