rle: expose length parameter to user, add assertion on dw to encode counter and autom...
authorFlorent Kermarrec <florent@enjoy-digital.fr>
Thu, 19 Feb 2015 09:42:13 +0000 (10:42 +0100)
committerFlorent Kermarrec <florent@enjoy-digital.fr>
Thu, 19 Feb 2015 09:42:13 +0000 (10:42 +0100)
litescope/core/storage.py
litescope/frontend/la.py

index d1c8cb297879072036f7f939e2aae25163ea6008..6707b20766dd26fd10a37c2945ac86c696f01f49 100644 (file)
@@ -25,9 +25,11 @@ class LiteScopeSubSampler(LiteScopeSubSamplerUnit, AutoCSR):
                self.comb += self.value.eq(self._value.storage)
 
 class LiteScopeRunLengthEncoderUnit(Module):
-       def __init__(self, dw, length=1024):
+       def __init__(self, dw, length):
                self.dw = dw
                self.length = length
+               if dw < (log2_int(length) + 1):
+                       raise ValueError("Not enough bits to encode RLE length, increase dw or reduce RLE length")
 
                self.sink = sink = Sink(data_layout(dw))
                self.source = source = Source(data_layout(dw))
index 16be1facae31dcbe1db8d87158a9052fbd52711a..07bb02acfb2c3a090c558986417c8435223f6fa9 100644 (file)
@@ -6,13 +6,18 @@ from mibuild.tools import write_to_file
 
 class LiteScopeLA(Module, AutoCSR):
        def __init__(self, layout, depth, clk_domain="sys",
-                       with_input_buffer=False, with_rle=False, with_subsampler=False):
+                       with_input_buffer=False,
+                       with_rle=False, rle_length=256,
+                       with_subsampler=False):
                self.layout = layout
                self.data = Cat(*layout)
                self.dw = flen(self.data)
+               if with_rle:
+                       self.dw += 1
                self.depth = depth
                self.clk_domain = clk_domain
                self.with_rle = with_rle
+               self.rle_length = rle_length
                self.with_input_buffer = with_input_buffer
                self.with_subsampler = with_subsampler
 
@@ -56,7 +61,7 @@ class LiteScopeLA(Module, AutoCSR):
                # connect recorder
                self.comb += Record.connect(self.trigger.source, self.recorder.trigger_sink)
                if self.with_rle:
-                       self.submodules.rle = LiteScopeRunLengthEncoder(self.dw)
+                       self.submodules.rle = LiteScopeRunLengthEncoder(self.dw, self.rle_length)
                        self.comb += [
                                Record.connect(sink, self.rle.sink),
                                Record.connect(self.rle.source, self.recorder.data_sink),