devices: TL2 version of ROM
This commit is contained in:
		@@ -4,9 +4,46 @@ import Chisel._
 | 
			
		||||
import unittest.UnitTest
 | 
			
		||||
import junctions._
 | 
			
		||||
import uncore.tilelink._
 | 
			
		||||
import uncore.tilelink2._
 | 
			
		||||
import uncore.util._
 | 
			
		||||
import cde.{Parameters, Field}
 | 
			
		||||
 | 
			
		||||
class TLROM(val base: BigInt, val size: Int, contentsDelayed: => Seq[Byte], beatBytes: Int = 4) extends LazyModule
 | 
			
		||||
{
 | 
			
		||||
  val node = TLManagerNode(beatBytes, TLManagerParameters(
 | 
			
		||||
    address     = List(AddressSet(base, size-1)),
 | 
			
		||||
    regionType  = RegionType.UNCACHED,
 | 
			
		||||
    supportsGet = TransferSizes(1, beatBytes),
 | 
			
		||||
    fifoId      = Some(0)))
 | 
			
		||||
 | 
			
		||||
  lazy val module = new LazyModuleImp(this) {
 | 
			
		||||
    val io = new Bundle {
 | 
			
		||||
      val in = node.bundleIn
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    val contents = contentsDelayed
 | 
			
		||||
    require (contents.size <= size)
 | 
			
		||||
 | 
			
		||||
    val in = io.in(0)
 | 
			
		||||
    val edge = node.edgesIn(0)
 | 
			
		||||
 | 
			
		||||
    val words = (contents ++ Seq.fill(size-contents.size)(0.toByte)).grouped(beatBytes).toSeq
 | 
			
		||||
    val bigs = words.map(_.foldRight(BigInt(0)){ case (x,y) => (x.toInt & 0xff) | y << 8})
 | 
			
		||||
    val rom = Vec(bigs.map(x => UInt(x, width = 8*beatBytes)))
 | 
			
		||||
 | 
			
		||||
    in.d.valid := in.a.valid
 | 
			
		||||
    in.a.ready := in.d.ready
 | 
			
		||||
 | 
			
		||||
    val index = in.a.bits.addr_hi(log2Ceil(size/beatBytes)-1,0)
 | 
			
		||||
    in.d.bits := edge.AccessAck(in.a.bits, UInt(0), rom(index))
 | 
			
		||||
 | 
			
		||||
    // Tie off unused channels
 | 
			
		||||
    in.b.valid := Bool(false)
 | 
			
		||||
    in.c.ready := Bool(true)
 | 
			
		||||
    in.e.ready := Bool(true)
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class ROMSlave(contents: Seq[Byte])(implicit val p: Parameters) extends Module
 | 
			
		||||
    with HasTileLinkParameters
 | 
			
		||||
    with HasAddrMapParameters {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user