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 |