1
0

make sure CSR width is parameterizable

This commit is contained in:
Howard Mao 2016-01-28 14:06:38 -08:00
parent adaec18bec
commit 66e9cc8c82
3 changed files with 17 additions and 13 deletions

View File

@ -19,8 +19,6 @@ trait HasDmaParameters {
val addrBits = p(PAddrBits)
val dmaStatusBits = 2
val dmaWordSizeBits = 2
val csrDataBits = 64
val csrDataBytes = csrDataBits / 8
}
abstract class DmaModule(implicit val p: Parameters) extends Module with HasDmaParameters
@ -82,8 +80,12 @@ class DmaTrackerIO(implicit p: Parameters) extends DmaBundle()(p) {
val mmio = new NastiIO
}
class DmaManager(outstandingCSR: Int)(implicit p: Parameters) extends DmaModule()(p)
with HasNastiParameters with HasAddrMapParameters {
class DmaManager(outstandingCSR: Int)(implicit p: Parameters)
extends DmaModule()(p)
with HasNastiParameters
with HasAddrMapParameters
with HasHtifParameters {
val io = new Bundle {
val ctrl = (new NastiIO).flip
val mmio = new NastiIO

View File

@ -9,20 +9,22 @@ import cde.{Parameters, Field}
case object HtifKey extends Field[HtifParameters]
case class HtifParameters(width: Int, nCores: Int, offsetBits: Int, nSCR: Int = 64)
case class HtifParameters(width: Int, nCores: Int, offsetBits: Int, csrDataBits: Int, nSCR: Int = 64)
trait HasHtifParameters {
implicit val p: Parameters
val external = p(HtifKey)
val htifExternal = p(HtifKey)
val dataBits = p(TLKey(p(TLId))).dataBitsPerBeat
val dataBeats = p(TLKey(p(TLId))).dataBeats
val w = external.width
val nSCR = external.nSCR
val w = htifExternal.width
val nSCR = htifExternal.nSCR
val scrAddrBits = log2Up(nSCR)
val scrDataBits = 64
val scrDataBytes = scrDataBits / 8
val offsetBits = external.offsetBits
val nCores = external.nCores
val csrDataBits = htifExternal.csrDataBits
val csrDataBytes = csrDataBits / 8
val offsetBits = htifExternal.offsetBits
val nCores = htifExternal.nCores
}
abstract class HtifModule(implicit val p: Parameters) extends Module with HasHtifParameters
@ -40,7 +42,7 @@ class HostIO(w: Int) extends Bundle {
class HtifIO(implicit p: Parameters) extends HtifBundle()(p) {
val reset = Bool(INPUT)
val id = UInt(INPUT, log2Up(nCores))
val csr = new SmiIO(scrDataBits, 12).flip
val csr = new SmiIO(csrDataBits, 12).flip
val debug_stats_csr = Bool(OUTPUT)
// wired directly to stats register
// expected to be used to quickly indicate to testbench to do logging b/c in 'interesting' work

View File

@ -11,7 +11,7 @@ class RTC(csr_MTIME: Int)(implicit p: Parameters) extends HtifModule
val io = new NastiIO
val addrTable = Vec.tabulate(nCores) { i =>
UInt(addrMap(s"conf:csr$i").start + csr_MTIME * scrDataBytes)
UInt(addrMap(s"conf:csr$i").start + csr_MTIME * csrDataBytes)
}
val rtc = Reg(init=UInt(0, scrDataBits))
@ -50,7 +50,7 @@ class RTC(csr_MTIME: Int)(implicit p: Parameters) extends HtifModule
io.aw.bits := NastiWriteAddressChannel(
id = coreId,
addr = addrTable(coreId),
size = UInt(log2Up(scrDataBytes)))
size = UInt(log2Up(csrDataBytes)))
io.w.valid := sending_data
io.w.bits := NastiWriteDataChannel(data = rtc)