5 Commits

Author SHA1 Message Date
Alex Forencich
74dd47ca99 Release v0.1.14 2021-11-07 12:39:42 -08:00
Reto Meier
cde2056bb0 Remove deprecated <= assignments
Starting from cocotb v1.6 the use of <= syntax has been deprecated. This
commit replaces all use of this syntax with the ``.value =`` syntax.
2021-10-25 18:27:18 +02:00
Alex Forencich
b6870716ed Fix active state tracking for AXI stream sink/monitor 2021-09-15 00:46:01 -07:00
Alex Forencich
44da562db9 Add cocotb framework classifier 2021-08-31 14:43:59 -07:00
Alex Forencich
8dcdbfefb8 Bump to dev version 2021-04-12 22:56:51 -07:00
7 changed files with 38 additions and 33 deletions

View File

@@ -459,19 +459,19 @@ class AxiStreamSource(AxiStreamBase, AxiStreamPause):
super()._handle_reset(state) super()._handle_reset(state)
if state: if state:
self.bus.tdata <= 0 self.bus.tdata.value = 0
if hasattr(self.bus, "tvalid"): if hasattr(self.bus, "tvalid"):
self.bus.tvalid <= 0 self.bus.tvalid.value = 0
if hasattr(self.bus, "tlast"): if hasattr(self.bus, "tlast"):
self.bus.tlast <= 0 self.bus.tlast.value = 0
if hasattr(self.bus, "tkeep"): if hasattr(self.bus, "tkeep"):
self.bus.tkeep <= 0 self.bus.tkeep.value = 0
if hasattr(self.bus, "tid"): if hasattr(self.bus, "tid"):
self.bus.tid <= 0 self.bus.tid.value = 0
if hasattr(self.bus, "tdest"): if hasattr(self.bus, "tdest"):
self.bus.tdest <= 0 self.bus.tdest.value = 0
if hasattr(self.bus, "tuser"): if hasattr(self.bus, "tuser"):
self.bus.tuser <= 0 self.bus.tuser.value = 0
if self.current_frame: if self.current_frame:
self.log.warning("Flushed transmit frame during reset: %s", self.current_frame) self.log.warning("Flushed transmit frame during reset: %s", self.current_frame)
@@ -528,24 +528,24 @@ class AxiStreamSource(AxiStreamBase, AxiStreamPause):
self.current_frame = None self.current_frame = None
break break
self.bus.tdata <= tdata_val self.bus.tdata.value = tdata_val
if hasattr(self.bus, "tvalid"): if hasattr(self.bus, "tvalid"):
self.bus.tvalid <= 1 self.bus.tvalid.value = 1
if hasattr(self.bus, "tlast"): if hasattr(self.bus, "tlast"):
self.bus.tlast <= tlast_val self.bus.tlast.value = tlast_val
if hasattr(self.bus, "tkeep"): if hasattr(self.bus, "tkeep"):
self.bus.tkeep <= tkeep_val self.bus.tkeep.value = tkeep_val
if hasattr(self.bus, "tid"): if hasattr(self.bus, "tid"):
self.bus.tid <= tid_val self.bus.tid.value = tid_val
if hasattr(self.bus, "tdest"): if hasattr(self.bus, "tdest"):
self.bus.tdest <= tdest_val self.bus.tdest.value = tdest_val
if hasattr(self.bus, "tuser"): if hasattr(self.bus, "tuser"):
self.bus.tuser <= tuser_val self.bus.tuser.value = tuser_val
else: else:
if hasattr(self.bus, "tvalid"): if hasattr(self.bus, "tvalid"):
self.bus.tvalid <= 0 self.bus.tvalid.value = 0
if hasattr(self.bus, "tlast"): if hasattr(self.bus, "tlast"):
self.bus.tlast <= 0 self.bus.tlast.value = 0
self.active = bool(frame) self.active = bool(frame)
if not frame and self.queue.empty(): if not frame and self.queue.empty():
self.idle_event.set() self.idle_event.set()
@@ -629,9 +629,9 @@ class AxiStreamMonitor(AxiStreamBase):
else: else:
frame = AxiStreamFrame([], [], [], [], []) frame = AxiStreamFrame([], [], [], [], [])
frame.sim_time_start = get_sim_time() frame.sim_time_start = get_sim_time()
self.active = True
for offset in range(self.byte_lanes): for offset in range(self.byte_lanes):
frame.tdata.append((self.bus.tdata.value.integer >> (offset * self.byte_size)) & self.byte_mask) frame.tdata.append((self.bus.tdata.value.integer >> (offset * self.byte_size)) & self.byte_mask)
if hasattr(self.bus, "tkeep"): if hasattr(self.bus, "tkeep"):
frame.tkeep.append((self.bus.tkeep.value.integer >> offset) & 1) frame.tkeep.append((self.bus.tkeep.value.integer >> offset) & 1)
@@ -653,6 +653,8 @@ class AxiStreamMonitor(AxiStreamBase):
self.active_event.set() self.active_event.set()
frame = None frame = None
else:
self.active = bool(frame)
class AxiStreamSink(AxiStreamMonitor, AxiStreamPause): class AxiStreamSink(AxiStreamMonitor, AxiStreamPause):
@@ -685,7 +687,7 @@ class AxiStreamSink(AxiStreamMonitor, AxiStreamPause):
if state: if state:
if hasattr(self.bus, "tready"): if hasattr(self.bus, "tready"):
self.bus.tready <= 0 self.bus.tready.value = 0
async def _run(self): async def _run(self):
frame = None frame = None
@@ -705,9 +707,9 @@ class AxiStreamSink(AxiStreamMonitor, AxiStreamPause):
else: else:
frame = AxiStreamFrame([], [], [], [], []) frame = AxiStreamFrame([], [], [], [], [])
frame.sim_time_start = get_sim_time() frame.sim_time_start = get_sim_time()
self.active = True
for offset in range(self.byte_lanes): for offset in range(self.byte_lanes):
frame.tdata.append((self.bus.tdata.value.integer >> (offset * self.byte_size)) & self.byte_mask) frame.tdata.append((self.bus.tdata.value.integer >> (offset * self.byte_size)) & self.byte_mask)
if hasattr(self.bus, "tkeep"): if hasattr(self.bus, "tkeep"):
frame.tkeep.append((self.bus.tkeep.value.integer >> offset) & 1) frame.tkeep.append((self.bus.tkeep.value.integer >> offset) & 1)
@@ -729,6 +731,8 @@ class AxiStreamSink(AxiStreamMonitor, AxiStreamPause):
self.active_event.set() self.active_event.set()
frame = None frame = None
else:
self.active = bool(frame)
if hasattr(self.bus, "tready"): if hasattr(self.bus, "tready"):
self.bus.tready <= (not self.full() and not self.pause) self.bus.tready.value = (not self.full() and not self.pause)

View File

@@ -228,7 +228,7 @@ class StreamSource(StreamBase, StreamPause):
if state: if state:
if self.valid is not None: if self.valid is not None:
self.valid <= 0 self.valid.value = 0
async def _run(self): async def _run(self):
while True: while True:
@@ -243,11 +243,11 @@ class StreamSource(StreamBase, StreamPause):
self.bus.drive(self.queue.get_nowait()) self.bus.drive(self.queue.get_nowait())
self.dequeue_event.set() self.dequeue_event.set()
if self.valid is not None: if self.valid is not None:
self.valid <= 1 self.valid.value = 1
self.active = True self.active = True
else: else:
if self.valid is not None: if self.valid is not None:
self.valid <= 0 self.valid.value = 0
self.active = not self.queue.empty() self.active = not self.queue.empty()
if self.queue.empty(): if self.queue.empty():
self.idle_event.set() self.idle_event.set()
@@ -319,7 +319,7 @@ class StreamSink(StreamMonitor, StreamPause):
if state: if state:
if self.ready is not None: if self.ready is not None:
self.ready <= 0 self.ready.value = 0
async def _run(self): async def _run(self):
while True: while True:
@@ -336,7 +336,7 @@ class StreamSink(StreamMonitor, StreamPause):
self.active_event.set() self.active_event.set()
if self.ready is not None: if self.ready is not None:
self.ready <= (not self.full() and not self.pause) self.ready.value = (not self.full() and not self.pause)
def define_stream(name, signals, optional_signals=None, valid_signal=None, ready_signal=None, signal_widths=None): def define_stream(name, signals, optional_signals=None, valid_signal=None, ready_signal=None, signal_widths=None):

View File

@@ -1 +1 @@
__version__ = "0.1.12" __version__ = "0.1.14"

View File

@@ -17,9 +17,10 @@ long-description-content-type = text/markdown
platforms = any platforms = any
classifiers = classifiers =
Development Status :: 3 - Alpha Development Status :: 3 - Alpha
Programming Language :: Python :: 3 Framework :: cocotb
License :: OSI Approved :: MIT License License :: OSI Approved :: MIT License
Operating System :: OS Independent Operating System :: OS Independent
Programming Language :: Python :: 3
Topic :: Scientific/Engineering :: Electronic Design Automation (EDA) Topic :: Scientific/Engineering :: Electronic Design Automation (EDA)
[options] [options]

View File

@@ -73,10 +73,10 @@ class TB:
self.dut.rst.setimmediatevalue(0) self.dut.rst.setimmediatevalue(0)
await RisingEdge(self.dut.clk) await RisingEdge(self.dut.clk)
await RisingEdge(self.dut.clk) await RisingEdge(self.dut.clk)
self.dut.rst <= 1 self.dut.rst.value = 1
await RisingEdge(self.dut.clk) await RisingEdge(self.dut.clk)
await RisingEdge(self.dut.clk) await RisingEdge(self.dut.clk)
self.dut.rst <= 0 self.dut.rst.value = 0
await RisingEdge(self.dut.clk) await RisingEdge(self.dut.clk)
await RisingEdge(self.dut.clk) await RisingEdge(self.dut.clk)

View File

@@ -70,10 +70,10 @@ class TB:
self.dut.rst.setimmediatevalue(0) self.dut.rst.setimmediatevalue(0)
await RisingEdge(self.dut.clk) await RisingEdge(self.dut.clk)
await RisingEdge(self.dut.clk) await RisingEdge(self.dut.clk)
self.dut.rst <= 1 self.dut.rst.value = 1
await RisingEdge(self.dut.clk) await RisingEdge(self.dut.clk)
await RisingEdge(self.dut.clk) await RisingEdge(self.dut.clk)
self.dut.rst <= 0 self.dut.rst.value = 0
await RisingEdge(self.dut.clk) await RisingEdge(self.dut.clk)
await RisingEdge(self.dut.clk) await RisingEdge(self.dut.clk)

View File

@@ -63,10 +63,10 @@ class TB:
self.dut.rst.setimmediatevalue(0) self.dut.rst.setimmediatevalue(0)
await RisingEdge(self.dut.clk) await RisingEdge(self.dut.clk)
await RisingEdge(self.dut.clk) await RisingEdge(self.dut.clk)
self.dut.rst <= 1 self.dut.rst.value = 1
await RisingEdge(self.dut.clk) await RisingEdge(self.dut.clk)
await RisingEdge(self.dut.clk) await RisingEdge(self.dut.clk)
self.dut.rst <= 0 self.dut.rst.value = 0
await RisingEdge(self.dut.clk) await RisingEdge(self.dut.clk)
await RisingEdge(self.dut.clk) await RisingEdge(self.dut.clk)