All pastes #513850 Raw Edit

chip select generator mk2

public python v1 · immutable
#513850 ·published 2007-05-27 13:19 UTC
rendered paste body
# Output:# signal              cs0 =                     (addr( 0 to  1) == B"0");# signal             cs00 =             cs0 and (addr( 1 to  2) == B"0");# signal       cs00111111 =            cs00 and (addr( 2 to  8) == B"111111");# signal      cs001111110 =      cs00111111 and (addr( 8 to  9) == B"0");# signal     cs0011111101 =     cs001111110 and (addr( 9 to 10) == B"1");# signal    cs00111111010 =    cs0011111101 and (addr(10 to 11) == B"0");# signal   cs001111110100 =   cs00111111010 and (addr(11 to 12) == B"0");# signal  cs0011111101001 =  cs001111110100 and (addr(12 to 13) == B"1");# signal cs00111111010010 = cs0011111101001 and (addr(13 to 14) == B"0");# signal cs00111111010011 = cs0011111101001 and (addr(13 to 14) == B"1");# signal   cs001111110101 =   cs00111111010 and (addr(11 to 12) == B"1");# signal    cs00111111011 =    cs0011111101 and (addr(10 to 11) == B"1");# signal   cs001111110110 =   cs00111111011 and (addr(11 to 12) == B"0");# signal   cs001111110111 =   cs00111111011 and (addr(11 to 12) == B"1");# signal      cs001111111 =      cs00111111 and (addr( 8 to  9) == B"1");# signal             cs01 =             cs0 and (addr( 1 to  2) == B"1");# signal              cs1 =                     (addr( 0 to  1) == B"1");# signal             cs10 =             cs1 and (addr( 1 to  2) == B"0");from posixpath import commonprefixdef make_signal(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 %16s = %15s     %s;' % (signame, '', test)    else:        print 'signal %16s = %15s and %s;' % (signame, basesig, test)def make_chip_selects(s, q):    p = commonprefix(s)    if len(p) == len(q):        for j in '01':            p = q + j            t = [i for i in s if i.startswith(p)]            if t:		make_signal(p, q)                make_chip_selects(t, p)    else:	make_signal(p, q)        t = [i for i in s if i.startswith(p)]        if len(t) > 1:            make_chip_selects(t, p)if __name__ == '__main__':    s = [        '10xxxxxxxxxxxx',        '01xxxxxxxxxxxx',        '001111111xxxxx',        '001111110111xx',        '001111110110xx',        '001111110101xx',        '00111111010011',        '00111111010010']    s = [a.rstrip("x") for a in s]    make_chip_selects(s, '')