111 lines
3.2 KiB
Scala
111 lines
3.2 KiB
Scala
|
package uncore
|
||
|
|
||
|
import Chisel._
|
||
|
import Constants._
|
||
|
|
||
|
class PhysicalAddress extends Bundle {
|
||
|
val addr = UFix(width = PADDR_BITS - OFFSET_BITS)
|
||
|
}
|
||
|
|
||
|
class MemData extends Bundle {
|
||
|
val data = Bits(width = MEM_DATA_BITS)
|
||
|
}
|
||
|
|
||
|
class MemReqCmd extends PhysicalAddress {
|
||
|
val rw = Bool()
|
||
|
val tag = Bits(width = MEM_TAG_BITS)
|
||
|
}
|
||
|
|
||
|
class MemResp extends MemData {
|
||
|
val tag = Bits(width = MEM_TAG_BITS)
|
||
|
}
|
||
|
|
||
|
class ioMem extends Bundle {
|
||
|
val req_cmd = (new FIFOIO) { new MemReqCmd() }
|
||
|
val req_data = (new FIFOIO) { new MemData() }
|
||
|
val resp = (new FIFOIO) { new MemResp() }.flip
|
||
|
}
|
||
|
|
||
|
class ioMemPipe extends Bundle {
|
||
|
val req_cmd = (new FIFOIO) { new MemReqCmd() }
|
||
|
val req_data = (new FIFOIO) { new MemData() }
|
||
|
val resp = (new PipeIO) { new MemResp() }.flip
|
||
|
}
|
||
|
|
||
|
class TransactionInit extends PhysicalAddress {
|
||
|
val x_type = Bits(width = X_INIT_TYPE_MAX_BITS)
|
||
|
val tile_xact_id = Bits(width = TILE_XACT_ID_BITS)
|
||
|
val write_mask = Bits(width = X_INIT_WRITE_MASK_BITS)
|
||
|
val subword_addr = Bits(width = X_INIT_SUBWORD_ADDR_BITS)
|
||
|
val atomic_opcode = Bits(width = X_INIT_ATOMIC_OP_BITS)
|
||
|
}
|
||
|
|
||
|
object TransactionInit
|
||
|
{
|
||
|
def apply(x_type: Bits, addr: UFix, tile_xact_id: UFix) = {
|
||
|
val init = new TransactionInit
|
||
|
init.x_type := x_type
|
||
|
init.addr := addr
|
||
|
init.tile_xact_id := tile_xact_id
|
||
|
init
|
||
|
}
|
||
|
def apply(x_type: Bits, addr: UFix, tile_xact_id: UFix, write_mask: Bits) = {
|
||
|
val init = new TransactionInit
|
||
|
init.x_type := x_type
|
||
|
init.addr := addr
|
||
|
init.tile_xact_id := tile_xact_id
|
||
|
init.write_mask := write_mask
|
||
|
init
|
||
|
}
|
||
|
def apply(x_type: Bits, addr: UFix, tile_xact_id: UFix, subword_addr: UFix, atomic_opcode: UFix) = {
|
||
|
val init = new TransactionInit
|
||
|
init.x_type := x_type
|
||
|
init.addr := addr
|
||
|
init.tile_xact_id := tile_xact_id
|
||
|
init.subword_addr := subword_addr
|
||
|
init.atomic_opcode := atomic_opcode
|
||
|
init
|
||
|
}
|
||
|
}
|
||
|
|
||
|
class TransactionInitData extends MemData
|
||
|
|
||
|
class TransactionAbort extends Bundle {
|
||
|
val tile_xact_id = Bits(width = TILE_XACT_ID_BITS)
|
||
|
}
|
||
|
|
||
|
class ProbeRequest extends PhysicalAddress {
|
||
|
val p_type = Bits(width = P_REQ_TYPE_MAX_BITS)
|
||
|
val global_xact_id = Bits(width = GLOBAL_XACT_ID_BITS)
|
||
|
}
|
||
|
|
||
|
class ProbeReply extends Bundle {
|
||
|
val p_type = Bits(width = P_REP_TYPE_MAX_BITS)
|
||
|
val global_xact_id = Bits(width = GLOBAL_XACT_ID_BITS)
|
||
|
}
|
||
|
|
||
|
class ProbeReplyData extends MemData
|
||
|
|
||
|
class TransactionReply extends MemData {
|
||
|
val x_type = Bits(width = X_REP_TYPE_MAX_BITS)
|
||
|
val tile_xact_id = Bits(width = TILE_XACT_ID_BITS)
|
||
|
val global_xact_id = Bits(width = GLOBAL_XACT_ID_BITS)
|
||
|
val require_ack = Bool()
|
||
|
}
|
||
|
|
||
|
class TransactionFinish extends Bundle {
|
||
|
val global_xact_id = Bits(width = GLOBAL_XACT_ID_BITS)
|
||
|
}
|
||
|
|
||
|
class ioTileLink extends Bundle {
|
||
|
val xact_init = (new FIFOIO) { new TransactionInit }
|
||
|
val xact_init_data = (new FIFOIO) { new TransactionInitData }
|
||
|
val xact_abort = (new FIFOIO) { new TransactionAbort }.flip
|
||
|
val probe_req = (new FIFOIO) { new ProbeRequest }.flip
|
||
|
val probe_rep = (new FIFOIO) { new ProbeReply }
|
||
|
val probe_rep_data = (new FIFOIO) { new ProbeReplyData }
|
||
|
val xact_rep = (new FIFOIO) { new TransactionReply }.flip
|
||
|
val xact_finish = (new FIFOIO) { new TransactionFinish }
|
||
|
val incoherent = Bool(OUTPUT)
|
||
|
}
|