+ yield in_a.v.eq(a)
+ yield in_a.valid_i.eq(1)
+ yield
+ yield
+ yield
+ yield
+ a_ack = (yield in_a.ready_o)
+ assert a_ack == 0
+
+ yield in_a.valid_i.eq(0)
+
+ yield in_b.v.eq(b)
+ yield in_b.valid_i.eq(1)
+ yield
+ yield
+ b_ack = (yield in_b.ready_o)
+ assert b_ack == 0
+
+ yield in_b.valid_i.eq(0)
+
+ yield out_z.ready_i.eq(1)
+
+ while True:
+ out_z_stb = (yield out_z.valid_o)
+ if not out_z_stb:
+ yield
+ continue
+ vout_z = yield out_z.v
+ #out_mid = yield dut.ids.out_mid
+ yield out_z.ready_i.eq(0)
+ yield
+ break
+
+ return vout_z, mid
+
+def check_rs_case(dut, a, b, z, mid=None):
+ if mid is None:
+ mid = randint(0, 6)
+ mid = 0
+ out_z, out_mid = yield from get_rs_case(dut, a, b, mid)
+ assert out_z == z, "Output z 0x%x not equal to expected 0x%x" % (out_z, z)
+ assert out_mid == mid, "Output mid 0x%x != expected 0x%x" % (out_mid, mid)
+
+
+def get_case(dut, a, b, mid):
+ #yield dut.in_mid.eq(mid)