Bring out max_burst_len as a parameter in AXI master model
This commit is contained in:
@@ -34,7 +34,7 @@ from .axi_channels import AxiAWSource, AxiWSource, AxiBSink, AxiARSource, AxiRSi
|
|||||||
|
|
||||||
|
|
||||||
class AxiMasterWrite(object):
|
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 = SimLog("cocotb.%s.%s" % (entity._name, name))
|
||||||
|
|
||||||
self.log.info("AXI master model")
|
self.log.info("AXI master model")
|
||||||
@@ -70,7 +70,7 @@ class AxiMasterWrite(object):
|
|||||||
self.byte_width = self.width // self.byte_size
|
self.byte_width = self.width // self.byte_size
|
||||||
self.strb_mask = 2**self.byte_width-1
|
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()
|
self.max_burst_size = (self.byte_width-1).bit_length()
|
||||||
|
|
||||||
assert self.byte_width == len(self.w_channel.bus.wstrb)
|
assert self.byte_width == len(self.w_channel.bus.wstrb)
|
||||||
@@ -324,7 +324,7 @@ class AxiMasterWrite(object):
|
|||||||
|
|
||||||
|
|
||||||
class AxiMasterRead(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.log = SimLog("cocotb.%s.%s" % (entity._name, name))
|
||||||
|
|
||||||
self.reset = reset
|
self.reset = reset
|
||||||
@@ -353,7 +353,7 @@ class AxiMasterRead(object):
|
|||||||
self.byte_size = 8
|
self.byte_size = 8
|
||||||
self.byte_width = self.width // self.byte_size
|
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()
|
self.max_burst_size = (self.byte_width-1).bit_length()
|
||||||
|
|
||||||
assert self.byte_width * self.byte_size == self.width
|
assert self.byte_width * self.byte_size == self.width
|
||||||
@@ -607,12 +607,12 @@ class AxiMasterRead(object):
|
|||||||
|
|
||||||
|
|
||||||
class AxiMaster(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.write_if = None
|
||||||
self.read_if = None
|
self.read_if = None
|
||||||
|
|
||||||
self.write_if = AxiMasterWrite(entity, name, clock, reset)
|
self.write_if = AxiMasterWrite(entity, name, clock, reset, max_burst_len)
|
||||||
self.read_if = AxiMasterRead(entity, name, clock, reset)
|
self.read_if = AxiMasterRead(entity, name, clock, reset, max_burst_len)
|
||||||
|
|
||||||
def init_read(self, address, length, burst=AxiBurstType.INCR, size=None,
|
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):
|
lock=AxiLockType.NORMAL, cache=0b0011, prot=AxiProt.NONSECURE, qos=0, region=0, user=0, token=None):
|
||||||
|
|||||||
Reference in New Issue
Block a user