|
| 1 | +from fractions import Fraction |
| 2 | + |
1 | 3 | from migen.fhdl.std import *
|
2 | 4 | from migen.bank.description import *
|
3 | 5 | from migen.bank import wbgen
|
|
13 | 15 |
|
14 | 16 |
|
15 | 17 | class _RTIOCRG(Module, AutoCSR):
|
16 |
| - def __init__(self, platform): |
| 18 | + def __init__(self, platform, clk_freq): |
17 | 19 | self._clock_sel = CSRStorage()
|
18 | 20 | self.clock_domains.cd_rtio = ClockDomain(reset_less=True)
|
19 | 21 |
|
20 |
| - # 75MHz -> 125MHz |
| 22 | + f = Fraction(125*1000*1000, clk_freq) |
21 | 23 | rtio_internal_clk = Signal()
|
22 | 24 | self.specials += Instance("DCM_CLKGEN",
|
23 | 25 | p_CLKFXDV_DIVIDE=2,
|
24 |
| - p_CLKFX_DIVIDE=3, |
| 26 | + p_CLKFX_DIVIDE=f.denominator, |
25 | 27 | p_CLKFX_MD_MAX=1.6,
|
26 |
| - p_CLKFX_MULTIPLY=5, |
27 |
| - p_CLKIN_PERIOD=1e3/75, |
| 28 | + p_CLKFX_MULTIPLY=f.numerator, |
| 29 | + p_CLKIN_PERIOD=1e9/clk_freq, |
28 | 30 | p_SPREAD_SPECTRUM="NONE",
|
29 | 31 | p_STARTUP_WAIT="FALSE",
|
30 | 32 | i_CLKIN=ClockSignal(),
|
@@ -123,7 +125,7 @@ def __init__(self, platform, cpu_type="or1k", **kwargs):
|
123 | 125 | ififo_depth=4))
|
124 | 126 |
|
125 | 127 | # RTIO core
|
126 |
| - self.submodules.rtio_crg = _RTIOCRG(platform) |
| 128 | + self.submodules.rtio_crg = _RTIOCRG(platform, self.clk_freq) |
127 | 129 | self.submodules.rtio = rtio.RTIO(rtio_channels,
|
128 | 130 | clk_freq=125000000)
|
129 | 131 | self.add_constant("RTIO_FINE_TS_WIDTH", self.rtio.fine_ts_width)
|
|
0 commit comments