+ # use a bunch of Value.matches() and boolean logic rather than a
+ # giant Switch()/If() to avoid
+ # https://github.com/YosysHQ/yosys/issues/3268
+ expected_v = False
+ for leading_zeros in range(width + 1):
+ pattern = '0' * leading_zeros + '1' + '-' * width
+ pattern = pattern[0:width]
+ a_has_count = Signal(name=f"a_has_{leading_zeros}")
+ b_has_count = Signal(name=f"b_has_{leading_zeros}")
+ m.d.comb += [
+ a_has_count.eq(dut.a.matches(pattern)),
+ b_has_count.eq(dut.b.matches(pattern)),
+ ]
+ expected_v |= a_has_count & b_has_count