Statistics
| Branch: | Tag: | Revision:

root / firmware / zpu / divisors.py @ 22ed61f9

History | View | Annotate | Download (773 Bytes)

1 d088a11b Josh Blum
#!/usr/bin/env python
2
3
speeds = (9600, 19200, 38400, 57600, 115200, 230400)
4
5
master_clk = 100e6
6
wb_clk = master_clk / 2
7
8
def divisor(speed):
9
    div0 = wb_clk // (speed * 16)
10
    div1 = div0 + 1
11
    actual0 = actual_speed(div0)
12
    actual1 = actual_speed(div1)
13
    if abs(actual0 - speed) < abs(actual1 - speed):
14
        return div0
15
    else:
16
        return div1
17
18
def actual_speed(divisor):
19
    return (wb_clk // divisor) / 16
20
21
def doit(speed):
22
    div = divisor(speed)
23
    actual = actual_speed(div)
24
    rel_error = (actual - speed) / speed
25
    print "target: %6d  divisor: %6d  actual: %11.4f  %6.3f%%" % (speed, div, actual, rel_error*100)
26
27
def main():
28
    print "wb_clk = %f" % (wb_clk,)
29
    for s in speeds:
30
        doit(s)
31
32
if __name__ == '__main__':
33
    main()
34