Basic support for new clock domain and instance API
[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 self.cd_sys = ClockDomain("sys")
11
12 ratio = Fraction(outfreq1x)/Fraction(infreq)
13 in_period = float(Fraction(1000000000)/Fraction(infreq))
14
15 inst_items = [
16 Instance.Parameter("in_period", in_period),
17 Instance.Parameter("f_mult", ratio.numerator),
18 Instance.Parameter("f_div", ratio.denominator),
19 Instance.Input("clkin", self.clkin),
20 Instance.Input("trigger_reset", self.trigger_reset),
21
22 Instance.Output("sys_clk", self.cd_sys.clk),
23 Instance.Output("sys_rst", self.cd_sys.rst)
24 ]
25
26 for name in [
27 "ac97_rst_n",
28 "videoin_rst_n",
29 "flash_rst_n",
30 "clk2x_270",
31 "clk4x_wr",
32 "clk4x_wr_strb",
33 "clk4x_rd",
34 "clk4x_rd_strb",
35 "phy_clk",
36 "vga_clk",
37 "vga_clk_pad"
38 ]:
39 s = Signal(name=name)
40 setattr(self, name, s)
41 inst_items.append(Instance.Output(name, s))
42
43 self._inst = Instance("m1crg", *inst_items)
44
45
46 def get_fragment(self):
47 return Fragment(instances=[self._inst])