def elaborate(self, platform):
m = Module()
+ if hasattr(self.stage, "setup"):
+ self.stage.setup(m, self.i.data)
# establish some combinatorial temporaries
o_n_validn = Signal(reset_less=True)
# set up the input and output data
self.i.data = stage.ispec() # input type
self.r_data = stage.ispec() # input type
- self.o_comb = stage.ospec() # output data
+ self.result = stage.ospec() # output data
self.o.data = stage.ospec() # output type
self.o.data.name = "outdata"
+ def set_input(self, i):
+ """ helper function to set the input data
+ """
+ return eq(self.i.data, i)
+
def elaborate(self, platform):
m = Module()
- m.d.comb += eq(self.o_comb, self.stage.process(self.r_data))
+ if hasattr(self.stage, "setup"):
+ self.stage.setup(m, self.r_data)
+ m.d.comb += eq(self.result, self.stage.process(self.r_data))
m.d.comb += self.o.n_valid.eq(self._data_valid)
m.d.comb += self.o.p_ready.eq(~self._data_valid | self.i.n_ready)
m.d.sync += self._data_valid.eq(self.i.p_valid | \
(~self.i.n_ready & self._data_valid))
with m.If(self.i.p_valid & self.o.p_ready):
m.d.sync += eq(self.r_data, self.i.data)
- m.d.comb += eq(self.o.data, self.o_comb)
+ m.d.comb += eq(self.o.data, self.result)
return m
def ports(self):