- with m.If(self.p_mux.active):
- m.d.comb += eq(self.n[ni].o_data,
- self.stage.process(r_data[mid]))
+ for i in range(p_len):
+ m.d.comb += p_i_valid[i].eq(0)
+ m.d.comb += self.p[i].o_ready.eq(0)
+ m.d.comb += p_i_valid[mid].eq(self.p_mux.active)
+ m.d.comb += self.p[mid].o_ready.eq(~data_valid[mid] | \
+ self.n[ni].i_ready)
+ m.d.comb += self.n[ni].o_valid.eq(data_valid[mid])
+
+ for i in range(p_len):
+ m.d.comb += n_i_readyn[i].eq(~self.n[ni].i_ready & \
+ data_valid[i])
+ m.d.sync += data_valid[i].eq(p_i_valid[i] | \
+ (n_i_readyn[i] & data_valid[i]))
+ with m.If(self.p[i].i_valid & self.p[i].o_ready):
+ m.d.sync += eq(r_data[i], self.p[i].i_data)
+
+ m.d.comb += eq(self.n[ni].o_data,
+ self.stage.process(r_data[mid]))