diplomacy: update to new API (#40)
[sifive-blocks.git] / src / main / scala / devices / spi / TLSPIFlash.scala
index 1ded823a89b5d2427af9d041a85583f3d62566a9..a66ca1c9a2f4b802f807765002883da898e8a88e 100644 (file)
@@ -11,6 +11,7 @@ import freechips.rocketchip.util.HeterogeneousBag
 trait SPIFlashParamsBase extends SPIParamsBase {
   val fAddress: BigInt
   val fSize: BigInt
+  val fBufferDepth: Int
 
   val insnAddrBytes: Int
   val insnPadLenBits: Int
@@ -22,6 +23,7 @@ trait SPIFlashParamsBase extends SPIParamsBase {
 case class SPIFlashParams(
     rAddress: BigInt,
     fAddress: BigInt,
+    fBufferDepth: Int = 0,
     rSize: BigInt = 0x1000,
     fSize: BigInt = 0x20000000,
     rxDepth: Int = 8,
@@ -39,16 +41,13 @@ case class SPIFlashParams(
   require(sampleDelay >= 0)
 }
 
-class SPIFlashTopBundle(i: HeterogeneousBag[Vec[Bool]], r: HeterogeneousBag[TLBundle], val f: HeterogeneousBag[TLBundle]) extends SPITopBundle(i, r)
-
-class SPIFlashTopModule[B <: SPIFlashTopBundle]
-    (c: SPIFlashParamsBase, bundle: => B, outer: TLSPIFlashBase)
-  extends SPITopModule(c, bundle, outer) {
+class SPIFlashTopModule(c: SPIFlashParamsBase, outer: TLSPIFlashBase)
+  extends SPITopModule(c, outer) {
 
   val flash = Module(new SPIFlashMap(c))
   val arb = Module(new SPIArbiter(c, 2))
 
-  private val f = io.tl.f.head
+  private val (f, _) = outer.fnode.in(0)
   // Tie unused channels
   f.b.valid := Bool(false)
   f.c.ready := Bool(true)
@@ -66,7 +65,7 @@ class SPIFlashTopModule[B <: SPIFlashTopBundle]
   flash.io.addr.valid := f.a.valid
   f.a.ready := flash.io.addr.ready
 
-  f.d.bits := outer.fnode.edgesIn.head.AccessAck(a, UInt(0), flash.io.data.bits)
+  f.d.bits := outer.fnode.edges.in.head.AccessAck(a, flash.io.data.bits)
   f.d.valid := flash.io.data.valid
   flash.io.data.ready := f.d.ready
 
@@ -94,18 +93,19 @@ class SPIFlashTopModule[B <: SPIFlashTopBundle]
 
 abstract class TLSPIFlashBase(w: Int, c: SPIFlashParamsBase)(implicit p: Parameters) extends TLSPIBase(w,c)(p) {
   require(isPow2(c.fSize))
-  val fnode = TLManagerNode(1, TLManagerParameters(
-    address     = Seq(AddressSet(c.fAddress, c.fSize-1)),
-    resources   = device.reg("mem"),
-    regionType  = RegionType.UNCACHED,
-    executable  = true,
-    supportsGet = TransferSizes(1, 1),
-    fifoId      = Some(0)))
+  val fnode = TLManagerNode(Seq(TLManagerPortParameters(
+    managers = Seq(TLManagerParameters(
+      address     = Seq(AddressSet(c.fAddress, c.fSize-1)),
+      resources   = device.reg("mem"),
+      regionType  = RegionType.UNCACHED,
+      executable  = true,
+      supportsGet = TransferSizes(1, 1),
+      fifoId      = Some(0))),
+    beatBytes = 1)))
 }
 
 class TLSPIFlash(w: Int, c: SPIFlashParams)(implicit p: Parameters) extends TLSPIFlashBase(w,c)(p) {
-  lazy val module = new SPIFlashTopModule(c,
-    new SPIFlashTopBundle(intnode.bundleOut, rnode.bundleIn, fnode.bundleIn), this) {
+  lazy val module = new SPIFlashTopModule(c, this) {
 
     arb.io.inner(0) <> flash.io.link
     arb.io.inner(1) <> fifo.io.link