def default_clk_constraint(self):
if self.default_clk is None:
raise AttributeError("Platform '{}' does not define a default clock"
- .format(self.__class__.__name__))
+ .format(type(self).__name__))
return self.lookup(self.default_clk).clock
@property
constraint = self.default_clk_constraint
if constraint is None:
raise AttributeError("Platform '{}' does not constrain its default clock"
- .format(self.__class__.__name__))
+ .format(type(self).__name__))
return constraint.frequency
def add_file(self, filename, content):
"""
Extract bitstream for fragment ``name`` from ``products`` and download it to a target.
"""
- raise NotImplementedError("Platform {} does not support programming"
- .format(self.__class__.__name__))
+ raise NotImplementedError("Platform '{}' does not support programming"
+ .format(type(self).__name__))
def _check_feature(self, feature, pin, attrs, valid_xdrs, valid_attrs):
if not valid_xdrs:
- raise NotImplementedError("Platform {} does not support {}"
- .format(self.__class__.__name__, feature))
+ raise NotImplementedError("Platform '{}' does not support {}"
+ .format(type(self).__name__, feature))
elif pin.xdr not in valid_xdrs:
- raise NotImplementedError("Platform {} does not support {} for XDR {}"
- .format(self.__class__.__name__, feature, pin.xdr))
+ raise NotImplementedError("Platform '{}' does not support {} for XDR {}"
+ .format(type(self).__name__, feature, pin.xdr))
if not valid_attrs and attrs:
- raise NotImplementedError("Platform {} does not support attributes for {}"
- .format(self.__class__.__name__, feature))
+ raise NotImplementedError("Platform '{}' does not support attributes for {}"
+ .format(type(self).__name__, feature))
@staticmethod
def _invert_if(invert, value):
return platform.get_ff_sync(self)
if self._max_input_delay is not None:
- raise NotImplementedError("Platform {!r} does not support constraining input delay "
- "for FFSynchronizer".format(platform))
+ raise NotImplementedError("Platform '{}' does not support constraining input delay "
+ "for FFSynchronizer"
+ .format(type(platform).__name__))
m = Module()
flops = [Signal(self.i.shape(), name="stage{}".format(index),
return platform.get_reset_sync(self)
if self._max_input_delay is not None:
- raise NotImplementedError("Platform {!r} does not support constraining input delay "
- "for ResetSynchronizer".format(platform))
+ raise NotImplementedError("Platform '{}' does not support constraining input delay "
+ "for ResetSynchronizer"
+ .format(type(platform).__name__))
m = Module()
m.domains += ClockDomain("reset_sync", async_reset=True, local=True)
def get_ff_sync(self, ff_sync):
if ff_sync._max_input_delay is not None:
- raise NotImplementedError("Platform {!r} does not support constraining input delay "
- "for FFSynchronizer".format(self))
+ raise NotImplementedError("Platform '{}' does not support constraining input delay "
+ "for FFSynchronizer"
+ .format(type(self).__name__))
m = Module()
flops = [Signal(ff_sync.i.shape(), name="stage{}".format(index),
def get_reset_sync(self, reset_sync):
if reset_sync._max_input_delay is not None:
- raise NotImplementedError("Platform {!r} does not support constraining input delay "
- "for ResetSynchronizer".format(self))
+ raise NotImplementedError("Platform '{}' does not support constraining input delay "
+ "for ResetSynchronizer"
+ .format(type(self).__name__))
m = Module()
m.domains += ClockDomain("reset_sync", async_reset=True, local=True)