1
0

tilelink2: Message and Permisison types from Henry

This commit is contained in:
Wesley W. Terpstra 2016-08-19 15:25:51 -07:00
parent 9a460322da
commit 8592cbf0e3

View File

@ -19,10 +19,60 @@ abstract class TLBundleBase(val params: TLBundleParameters) extends Bundle
} }
} }
object TLMessages
{
// A B C D E
val Get = UInt(0) // . .
val PutFullData = UInt(1) // . .
val PutPartialData = UInt(2) // . .
val AtomicData = UInt(3) // . .
val Hint = UInt(4) // . .
val AccessAck = UInt(0) // . .
val AccessAckData = UInt(1) // . .
val Acquire = UInt(5) // .
val Probe = UInt(5) // .
val ProbeAck = UInt(2) // .
val ProbeAckData = UInt(3) // .
val Release = UInt(4) // .
val ReleaseData = UInt(5) // .
//val PutThroughData = UInt(6) // . // future extension
val ReleaseAck = UInt(2) // .
val Grant = UInt(3) // .
val GrantData = UInt(4) // .
val GrantAck = UInt(0) // .
}
object TLPermissions
{
// Cap types (Grant = new permissions, Probe = permisions <= target)
val toT = UInt(0)
val toB = UInt(1)
val toN = UInt(2)
// Grow types (Acquire = permissions >= target)
val NtoB = UInt(0)
val NtoT = UInt(1)
val BtoT = UInt(2)
// Shrink types (ProbeAck, Release)
val TtoB = UInt(0)
val TtoN = UInt(1)
val BtoN = UInt(2)
// Report types (ProbeAck)
val TtoT = UInt(3)
val BtoB = UInt(4)
val NtoN = UInt(5)
}
object TLAtomics
{
}
class TLBundleA(params: TLBundleParameters) extends TLBundleBase(params) class TLBundleA(params: TLBundleParameters) extends TLBundleBase(params)
{ {
val opcode = UInt(width = 3) val opcode = UInt(width = 3)
val param = UInt(width = 3) // amo_opcode || perms(req) val param = UInt(width = 4) // amo_opcode || perms || hint
val size = UInt(width = params.sizeBits) val size = UInt(width = params.sizeBits)
val source = UInt(width = params.sourceBits) // from val source = UInt(width = params.sourceBits) // from
val address = UInt(width = params.addressBits) // to val address = UInt(width = params.addressBits) // to
@ -33,7 +83,7 @@ class TLBundleA(params: TLBundleParameters) extends TLBundleBase(params)
class TLBundleB(params: TLBundleParameters) extends TLBundleBase(params) class TLBundleB(params: TLBundleParameters) extends TLBundleBase(params)
{ {
val opcode = UInt(width = 3) val opcode = UInt(width = 3)
val param = UInt(width = 3) // amo_opcode || perms(req) val param = UInt(width = 4)
val size = UInt(width = params.sizeBits) val size = UInt(width = params.sizeBits)
val source = UInt(width = params.sourceBits) // to val source = UInt(width = params.sourceBits) // to
val address = UInt(width = params.addressBits) // from val address = UInt(width = params.addressBits) // from
@ -44,8 +94,9 @@ class TLBundleB(params: TLBundleParameters) extends TLBundleBase(params)
class TLBundleC(params: TLBundleParameters) extends TLBundleBase(params) class TLBundleC(params: TLBundleParameters) extends TLBundleBase(params)
{ {
val opcode = UInt(width = 3) val opcode = UInt(width = 3)
val param = UInt(width = 3) // perms(from=>to) val param = UInt(width = 3)
val size = UInt(width = params.sizeBits) val size = UInt(width = params.sizeBits)
val source = UInt(width = params.sourceBits) // from
val address = UInt(width = params.addressBits) // to val address = UInt(width = params.addressBits) // to
val data = UInt(width = params.dataBits) val data = UInt(width = params.dataBits)
val error = Bool() val error = Bool()
@ -54,7 +105,7 @@ class TLBundleC(params: TLBundleParameters) extends TLBundleBase(params)
class TLBundleD(params: TLBundleParameters) extends TLBundleBase(params) class TLBundleD(params: TLBundleParameters) extends TLBundleBase(params)
{ {
val opcode = UInt(width = 3) val opcode = UInt(width = 3)
val param = UInt(width = 3) // perms(to) val param = UInt(width = 2)
val size = UInt(width = params.sizeBits) val size = UInt(width = params.sizeBits)
val source = UInt(width = params.sourceBits) // to val source = UInt(width = params.sourceBits) // to
val sink = UInt(width = params.sinkBits) // from val sink = UInt(width = params.sinkBits) // from