Prepare for new DDR PHY
[litex.git] / milkymist / m1crg / __init__.py
1 from fractions import Fraction
2
3 from migen.fhdl.structure import *
4
5 class M1CRG:
6 def __init__(self, infreq, outfreq1x):
7 self.clkin = Signal()
8 self.trigger_reset = Signal()
9
10 generated = []
11 for name in [
12 "sys_clk",
13 "sys_rst",
14 "ac97_rst_n",
15 "videoin_rst_n",
16 "flash_rst_n",
17 "clk2x_90",
18 "clk4x_wr",
19 "clk4x_wr_strb",
20 "clk4x_rd",
21 "clk4x_rd_strb"
22 ]:
23 s = Signal(name=name)
24 setattr(self, name, s)
25 generated.append((name, s))
26
27 ratio = Fraction(outfreq1x)/Fraction(infreq)
28 in_period = float(Fraction(1000000000)/Fraction(infreq))
29
30 self._inst = Instance("m1crg",
31 generated,
32 [
33 ("clkin", self.clkin),
34 ("trigger_reset", self.trigger_reset)
35 ],
36 parameters=[
37 ("in_period", in_period),
38 ("f_mult", ratio.numerator),
39 ("f_div", ratio.denominator)
40 ]
41 )
42
43 def get_fragment(self):
44 return Fragment(instances=[self._inst],
45 pads={self.clkin, self.ac97_rst_n, self.videoin_rst_n, self.flash_rst_n})