I'm trying to get someone to attach their stuff to Rocket Chip for the upcoming tapout. TileLink sounded too complicated, but Smi went over well. Since the mmioNetwork in Rocket Chip is based on TileLink, it seemed like the easiest thing to do was to write a TileLink to Smi converter so people could use it. It turns out there was already one inside the groundtest unit tests, so I just moved that into uncore (it was inlined into a test case so you couldn't actually use it before). Internally the converter uses Nasti, but I figured that's good enough for now.
32 lines
896 B
Scala
32 lines
896 B
Scala
// See LICENSE for details
|
|
|
|
package uncore
|
|
|
|
import Chisel._
|
|
import junctions._
|
|
import cde.Parameters
|
|
|
|
/** Convert TileLink protocol to Smi protocol */
|
|
class SmiIOTileLinkIOConverter(val dataWidth: Int, val addrWidth: Int)
|
|
(implicit p: Parameters) extends Module {
|
|
val io = new Bundle {
|
|
val tl = (new ClientUncachedTileLinkIO).flip
|
|
val smi = new SmiIO(dataWidth, addrWidth)
|
|
}
|
|
|
|
def decoupledNastiConnect(outer: NastiIO, inner: NastiIO) {
|
|
outer.ar <> Queue(inner.ar)
|
|
outer.aw <> Queue(inner.aw)
|
|
outer.w <> Queue(inner.w)
|
|
inner.r <> Queue(outer.r)
|
|
inner.b <> Queue(outer.b)
|
|
}
|
|
|
|
val tl2nasti = Module(new NastiIOTileLinkIOConverter())
|
|
val nasti2smi = Module(new SmiIONastiIOConverter(dataWidth, addrWidth))
|
|
|
|
tl2nasti.io.tl <> io.tl
|
|
decoupledNastiConnect(nasti2smi.io.nasti, tl2nasti.io.nasti)
|
|
io.smi <> nasti2smi.io.smi
|
|
}
|