source_layout.append(("valid_token_count", bits_for(ratio)))
self.source = source = Endpoint(source_layout)
self.ratio = ratio
- self._nbits_from = nbits_from
+ self._nbits_from = nbits_from
self._reverse = reverse
self._report_valid_token_count = report_valid_token_count
for i in range(self.ratio):
with m.Case(i):
n = self.ratio-i-1 if self._reverse else i
- m.d.sync += self.source.payload.lower()[n*self._nbits_from:(n+1)*self._nbits_from].eq(self.sink.payload)
+ m.d.sync += self.source.payload.lower()[n*self._nbits_from:(
+ n+1)*self._nbits_from].eq(self.sink.payload)
if self._report_valid_token_count:
with m.If(load_part):
for i in range(self.ratio):
with m.Case(i):
n = self.ratio-i-1 if self._reverse else i
- m.d.comb += self.source.data.eq(self.sink.data[n*self._nbits_to:(n+1)*self._nbits_to])
+ m.d.comb += self.source.data.eq(
+ self.sink.data[n*self._nbits_to:(n+1)*self._nbits_to])
+ with m.Case():
+ n = self.ratio-self.ratio-1-1 if self._reverse else self.ratio-1
+ m.d.comb += self.source.data.eq(
+ self.sink.data[n*self._nbits_to:(n+1)*self._nbits_to])
if self._report_valid_token_count:
m.d.comb += self.source.valid_token_count.eq(last)
report_valid_token_count=False):
cls, ratio = _get_converter_ratio(nbits_from, nbits_to)
self.specialized = cls(nbits_from, nbits_to, ratio,
- reverse, report_valid_token_count)
+ reverse, report_valid_token_count)
self.sink = self.specialized.sink
self.source = self.specialized.source
nbits_from = len(self.sink.payload.lower())
nbits_to = len(self.source.payload.lower())
-
+
m.submodules += self.converter
# cast sink to converter.sink (user fields --> raw bits)
m.d.comb += dst.eq(src)
j += width
else:
- m.d.comb += self.converter.sink.payload.eq(self.sink.payload.lower())
-
+ m.d.comb += self.converter.sink.payload.eq(
+ self.sink.payload.lower())
# cast converter.source to source (raw bits --> user fields)
m.d.comb += [
return m
+
class Pipeline(Elaboratable):
def __init__(self, *modules):
self._modules = modules
n = len(self._modules)
mod = self._modules[0]
-
+
for i in range(1, n):
mod_n = self._modules[i]
+
if isinstance(mod, Endpoint):
source = mod
else:
source = mod.source
+
if isinstance(mod_n, Endpoint):
sink = mod_n
else:
sink = mod_n.sink
+
if mod is not mod_n:
m.d.comb += source.connect(sink)
+
mod = mod_n
return m