Bring out max_burst_len as a parameter in AXI master model

This commit is contained in:
Alex Forencich
2020-11-26 21:01:40 -08:00
parent 81f8906548
commit 7f68f5e73f

View File

@@ -34,7 +34,7 @@ from .axi_channels import AxiAWSource, AxiWSource, AxiBSink, AxiARSource, AxiRSi
class AxiMasterWrite(object):
def __init__(self, entity, name, clock, reset=None):
def __init__(self, entity, name, clock, reset=None, max_burst_len=256):
self.log = SimLog("cocotb.%s.%s" % (entity._name, name))
self.log.info("AXI master model")
@@ -70,7 +70,7 @@ class AxiMasterWrite(object):
self.byte_width = self.width // self.byte_size
self.strb_mask = 2**self.byte_width-1
self.max_burst_len = 256
self.max_burst_len = max(min(max_burst_len, 256), 1)
self.max_burst_size = (self.byte_width-1).bit_length()
assert self.byte_width == len(self.w_channel.bus.wstrb)
@@ -324,7 +324,7 @@ class AxiMasterWrite(object):
class AxiMasterRead(object):
def __init__(self, entity, name, clock, reset=None):
def __init__(self, entity, name, clock, reset=None, max_burst_len=256):
self.log = SimLog("cocotb.%s.%s" % (entity._name, name))
self.reset = reset
@@ -353,7 +353,7 @@ class AxiMasterRead(object):
self.byte_size = 8
self.byte_width = self.width // self.byte_size
self.max_burst_len = 256
self.max_burst_len = max(min(max_burst_len, 256), 1)
self.max_burst_size = (self.byte_width-1).bit_length()
assert self.byte_width * self.byte_size == self.width
@@ -607,12 +607,12 @@ class AxiMasterRead(object):
class AxiMaster(object):
def __init__(self, entity, name, clock, reset=None):
def __init__(self, entity, name, clock, reset=None, max_burst_len=256):
self.write_if = None
self.read_if = None
self.write_if = AxiMasterWrite(entity, name, clock, reset)
self.read_if = AxiMasterRead(entity, name, clock, reset)
self.write_if = AxiMasterWrite(entity, name, clock, reset, max_burst_len)
self.read_if = AxiMasterRead(entity, name, clock, reset, max_burst_len)
def init_read(self, address, length, burst=AxiBurstType.INCR, size=None,
lock=AxiLockType.NORMAL, cache=0b0011, prot=AxiProt.NONSECURE, qos=0, region=0, user=0, token=None):