s = set(( '10xxxxxxxxxxxx' '01xxxxxxxxxxxx', '001111111xxxxx', '001111110111xx', '001111110110xx', '001111110101xx', '00111111010011', '00111111010010'))from posixpath import commonprefixdef emit(p, q): signame = 'cs%s' % p basesig = 'cs%s' % q test = '(addr(%2d to %2d) == B"%s")' % (len(q), len(p), p[len(q):]) if q == '': print 'signal %15s = %14s %s;' % (signame, '', test) else: print 'signal %15s = %14s and %s;' % (signame, basesig, test)def output(s, q): p = commonprefix(s) if len(p) == len(q): for j in '01': p = q + j t = set(i for i in s if i.startswith(p)) if len(t) > 1: emit(p, q) output(t, p) else: emit(p, q) t = set(i for i in s if i.startswith(p)) if len(t) > 1: output(t, p)output(s, '')