def do_finalize(self, fragment): # Add the CRG crg = CRG(self.request("clk50")) fragment += crg.get_fragment() clocks = { "clk50": 50.0, "clk12": 12.0, ("ulpi", "clk"): 60.0, ("ftdi", "clk"): 60.0 } # Make sure init_b is used / added to the UCF self.request("init_b") for name, mhz in clocks.items(): period = 1000.0 / mhz try: if isinstance(name, tuple): clk = getattr(self.lookup_request(name[0]), name[1]) else: clk = self.lookup_request(name) self.add_platform_command(""" NET "{clk}" TNM_NET = "GRP{clk}"; TIMESPEC "TS{clk}" = PERIOD "GRP{clk}" %f ns HIGH 50%%; """ % period, clk=clk) except ConstraintError: pass
def finalize(self, fragment, *args, **kwargs): if self.finalized: raise ConstraintError("Already finalized") # if none exists, create a default clock domain and drive it if not fragment.clock_domains: if not hasattr(self, "default_clk_name"): raise NotImplementedError( "No default clock and no clock domain defined") crg = CRG(self.request(self.default_clk_name)) fragment += crg.get_fragment() self.do_finalize(fragment, *args, **kwargs) self.finalized = True