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])
+ 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)
j = 0
for name, width in self._layout_to.payload_layout:
src = getattr(self.sink, name)[i*width:(i+1)*width]
- dst = self.converter.sink.data[i *
- nbits_to+j:i*nbits_to+j+width]
+ dst = self.converter.sink.data[i*nbits_to+j:i*nbits_to+j+width]
m.d.comb += dst.eq(src)
j += width
else:
for i in range(ratio):
j = 0
for name, width in self._layout_from.payload_layout:
- src = self.converter.source.data[i *
- nbits_from+j:i*nbits_from+j+width]
+ src = self.converter.source.data[i*nbits_from+j:i*nbits_from+j+width]
dst = getattr(self.source, name)[i*width:(i+1)*width]
m.d.comb += dst.eq(src)
j += width
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