litex/misoclib/mxcrg/__init__.py

49 lines
1.8 KiB
Python
Raw Normal View History

2012-02-16 12:02:37 -05:00
from fractions import Fraction
2013-05-22 11:10:13 -04:00
from migen.fhdl.std import *
2012-02-16 12:02:37 -05:00
2013-09-17 12:15:22 -04:00
class MXCRG(Module):
2013-03-26 12:57:17 -04:00
def __init__(self, pads, outfreq1x):
2013-03-15 14:17:05 -04:00
self.clock_domains.cd_sys = ClockDomain()
self.clock_domains.cd_sdram_half = ClockDomain()
self.clock_domains.cd_sdram_full_wr = ClockDomain()
self.clock_domains.cd_sdram_full_rd = ClockDomain()
2013-03-15 14:17:05 -04:00
self.clock_domains.cd_eth_rx = ClockDomain()
self.clock_domains.cd_eth_tx = ClockDomain()
2013-09-17 12:15:22 -04:00
self.clock_domains.cd_base50 = ClockDomain(reset_less=True)
2013-03-26 12:57:17 -04:00
self.clk4x_wr_strb = Signal()
self.clk4x_rd_strb = Signal()
###
2013-03-26 12:57:17 -04:00
infreq = 50*1000000
ratio = Fraction(outfreq1x)/Fraction(infreq)
in_period = float(Fraction(1000000000)/Fraction(infreq))
2013-07-04 13:19:39 -04:00
self.specials += Instance("mxcrg",
Instance.Parameter("in_period", in_period),
Instance.Parameter("f_mult", ratio.numerator),
Instance.Parameter("f_div", ratio.denominator),
2013-03-26 12:57:17 -04:00
Instance.Input("clk50_pad", pads.clk50),
Instance.Input("trigger_reset", pads.trigger_reset),
2013-03-26 12:57:17 -04:00
Instance.Input("eth_rx_clk_pad", pads.eth_rx_clk),
Instance.Input("eth_tx_clk_pad", pads.eth_tx_clk),
2013-02-11 12:23:06 -05:00
Instance.Output("sys_clk", self.cd_sys.clk),
Instance.Output("sys_rst", self.cd_sys.rst),
Instance.Output("clk2x_270", self.cd_sdram_half.clk),
Instance.Output("clk4x_wr", self.cd_sdram_full_wr.clk),
Instance.Output("clk4x_rd", self.cd_sdram_full_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),
2013-09-17 12:15:22 -04:00
Instance.Output("base50_clk", self.cd_base50.clk),
2013-03-26 12:57:17 -04:00
Instance.Output("clk4x_wr_strb", self.clk4x_wr_strb),
Instance.Output("clk4x_rd_strb", self.clk4x_rd_strb),
Instance.Output("norflash_rst_n", pads.norflash_rst_n),
Instance.Output("ddr_clk_pad_p", pads.ddr_clk_p),
Instance.Output("ddr_clk_pad_n", pads.ddr_clk_n),
2013-09-17 12:15:22 -04:00
Instance.Output("eth_phy_clk_pad", pads.eth_phy_clk))