litex/milkymist/m1crg/__init__.py

63 lines
1.9 KiB
Python
Raw Normal View History

2012-02-16 12:02:37 -05:00
from fractions import Fraction
from migen.fhdl.structure import *
2013-02-24 07:07:25 -05:00
from migen.fhdl.specials import Instance
2013-02-11 12:23:06 -05:00
from mibuild.crg import CRG
2012-02-16 12:02:37 -05:00
2013-02-11 12:23:06 -05:00
class M1CRG(CRG):
2012-02-16 12:02:37 -05:00
def __init__(self, infreq, outfreq1x):
2013-02-11 12:23:06 -05:00
self.clk50_pad = Signal()
2012-02-16 12:02:37 -05:00
self.trigger_reset = Signal()
2013-02-11 12:23:06 -05:00
self.eth_rx_clk_pad = Signal()
self.eth_tx_clk_pad = Signal()
self.cd_sys = ClockDomain("sys")
self.cd_sys2x_270 = ClockDomain("sys2x_270")
self.cd_sys4x_wr = ClockDomain("sys4x_wr")
self.cd_sys4x_rd = ClockDomain("sys4x_rd")
2013-02-11 12:23:06 -05:00
self.cd_eth_rx = ClockDomain("eth_rx")
self.cd_eth_tx = ClockDomain("eth_tx")
self.cd_vga = ClockDomain("vga")
ratio = Fraction(outfreq1x)/Fraction(infreq)
in_period = float(Fraction(1000000000)/Fraction(infreq))
inst_items = [
Instance.Parameter("in_period", in_period),
Instance.Parameter("f_mult", ratio.numerator),
Instance.Parameter("f_div", ratio.denominator),
2013-02-11 12:23:06 -05:00
Instance.Input("clk50_pad", self.clk50_pad),
Instance.Input("trigger_reset", self.trigger_reset),
2013-02-11 12:23:06 -05:00
Instance.Input("eth_rx_clk_pad", self.eth_rx_clk_pad),
Instance.Input("eth_tx_clk_pad", self.eth_tx_clk_pad),
Instance.Output("sys_clk", self.cd_sys.clk),
Instance.Output("sys_rst", self.cd_sys.rst),
Instance.Output("clk2x_270", self.cd_sys2x_270.clk),
Instance.Output("clk4x_wr", self.cd_sys4x_wr.clk),
Instance.Output("clk4x_rd", self.cd_sys4x_rd.clk),
2013-02-11 12:23:06 -05:00
Instance.Output("eth_rx_clk", self.cd_eth_rx.clk),
Instance.Output("eth_tx_clk", self.cd_eth_tx.clk),
Instance.Output("vga_clk", self.cd_vga.clk)
]
2012-02-16 12:02:37 -05:00
for name in [
2013-02-11 12:23:06 -05:00
"norflash_rst_n",
2012-02-19 12:43:42 -05:00
"clk4x_wr_strb",
2012-05-19 18:30:03 -04:00
"clk4x_rd_strb",
2013-02-11 12:23:06 -05:00
"ddr_clk_pad_p",
"ddr_clk_pad_n",
"eth_phy_clk_pad",
2012-06-17 07:41:26 -04:00
"vga_clk_pad"
]:
2012-02-16 12:02:37 -05:00
s = Signal(name=name)
setattr(self, name, s)
inst_items.append(Instance.Output(name, s))
2012-02-16 12:02:37 -05:00
self._inst = Instance("m1crg", *inst_items)
2012-02-16 12:02:37 -05:00
def get_fragment(self):
2013-02-24 07:07:25 -05:00
return Fragment(specials={self._inst})