diff --git a/src/main/scala/tilelink/CacheCork.scala b/src/main/scala/tilelink/CacheCork.scala index 53a54e24..69964e7e 100644 --- a/src/main/scala/tilelink/CacheCork.scala +++ b/src/main/scala/tilelink/CacheCork.scala @@ -20,9 +20,8 @@ class TLCacheCork(unsafe: Boolean = false)(implicit p: Parameters) extends LazyM mp.copy( endSinkId = 1, managers = mp.managers.map { m => m.copy( - regionType = if (m.regionType == RegionType.UNCACHED) RegionType.TRACKED else m.regionType, - supportsAcquireB = m.supportsGet, - supportsAcquireT = m.supportsPutFull)})}) + supportsAcquireB = if (m.regionType == RegionType.UNCACHED) m.supportsGet else m.supportsAcquireB, + supportsAcquireT = if (m.regionType == RegionType.UNCACHED) m.supportsPutFull else m.supportsAcquireT)})}) lazy val module = new LazyModuleImp(this) { val io = new Bundle { @@ -37,6 +36,7 @@ class TLCacheCork(unsafe: Boolean = false)(implicit p: Parameters) extends LazyM require (caches.size <= 1 || unsafe, "Only one caching client allowed") edgeOut.manager.managers.foreach { case m => require (!m.supportsAcquireB || unsafe, "Cannot support caches beyond the Cork") + require (m.regionType <= RegionType.UNCACHED) } // The Cork turns [Acquire=>Get] => [AccessAckData=>GrantData] diff --git a/src/main/scala/tilelink/Parameters.scala b/src/main/scala/tilelink/Parameters.scala index 716b5284..d36c9229 100644 --- a/src/main/scala/tilelink/Parameters.scala +++ b/src/main/scala/tilelink/Parameters.scala @@ -38,8 +38,9 @@ case class TLManagerParameters( require (supportsAcquireB.contains(supportsAcquireT)) // Make sure that the regionType agrees with the capabilities - require ((regionType == RegionType.CACHED || regionType == RegionType.TRACKED) != supportsAcquireB.none) - require (regionType != RegionType.UNCACHED || supportsGet) + require (!supportsAcquireB || regionType >= RegionType.UNCACHED) // acquire -> uncached, tracked, cached + require (regionType <= RegionType.UNCACHED || supportsAcquireB) // tracked, cached -> acquire + require (regionType != RegionType.UNCACHED || supportsGet) // uncached -> supportsGet val name = nodePath.lastOption.map(_.lazyModule.name).getOrElse("disconnected") val maxTransfer = List( // Largest supported transfer of all types