2012-02-16 12:02:37 -05:00
|
|
|
from fractions import Fraction
|
|
|
|
|
|
|
|
from migen.fhdl.structure import *
|
|
|
|
|
|
|
|
class M1CRG:
|
|
|
|
def __init__(self, infreq, outfreq1x):
|
|
|
|
self.clkin = Signal()
|
|
|
|
self.trigger_reset = Signal()
|
|
|
|
|
2012-09-10 17:47:06 -04:00
|
|
|
self.cd_sys = ClockDomain("sys")
|
2012-09-10 18:21:07 -04:00
|
|
|
self.cd_sys2x_270 = ClockDomain("sys2x_270")
|
|
|
|
self.cd_sys4x_wr = ClockDomain("sys4x_wr")
|
|
|
|
self.cd_sys4x_rd = ClockDomain("sys4x_rd")
|
|
|
|
self.cd_vga = ClockDomain("vga")
|
2012-09-10 17:47:06 -04:00
|
|
|
|
|
|
|
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),
|
|
|
|
Instance.Input("clkin", self.clkin),
|
|
|
|
Instance.Input("trigger_reset", self.trigger_reset),
|
|
|
|
|
|
|
|
Instance.Output("sys_clk", self.cd_sys.clk),
|
2012-09-10 18:21:07 -04:00
|
|
|
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),
|
|
|
|
Instance.Output("vga_clk", self.cd_vga.clk)
|
2012-09-10 17:47:06 -04:00
|
|
|
]
|
|
|
|
|
2012-02-16 12:02:37 -05:00
|
|
|
for name in [
|
|
|
|
"ac97_rst_n",
|
|
|
|
"videoin_rst_n",
|
|
|
|
"flash_rst_n",
|
2012-02-19 12:43:42 -05:00
|
|
|
"clk4x_wr_strb",
|
2012-05-19 18:30:03 -04:00
|
|
|
"clk4x_rd_strb",
|
2012-09-10 18:21:07 -04:00
|
|
|
"eth_clk_pad",
|
2012-06-17 07:41:26 -04:00
|
|
|
"vga_clk_pad"
|
2012-02-17 05:04:44 -05:00
|
|
|
]:
|
2012-02-16 12:02:37 -05:00
|
|
|
s = Signal(name=name)
|
|
|
|
setattr(self, name, s)
|
2012-09-10 17:47:06 -04:00
|
|
|
inst_items.append(Instance.Output(name, s))
|
2012-02-16 12:02:37 -05:00
|
|
|
|
2012-09-10 17:47:06 -04:00
|
|
|
self._inst = Instance("m1crg", *inst_items)
|
|
|
|
|
2012-02-16 12:02:37 -05:00
|
|
|
|
|
|
|
def get_fragment(self):
|
2012-04-02 13:22:17 -04:00
|
|
|
return Fragment(instances=[self._inst])
|