Source code for hwt.serializer.resourceAnalyzer.resourceTypes



[docs]class ResourceError(Exception): """ An error which means that the resource of this kind does not exists in current hardware. """
[docs]class RtlResourceType(): """ A base class for resource type desctiptions. """
[docs]class ResourceMUX(RtlResourceType):
[docs] def __init__(self, bitWidth, inputs): self.bitWidth = bitWidth self.inputs = inputs
def __repr__(self): return f"<{self.__class__.__name__:s} {self.bitWidth:d} bits, {self.inputs} inputs>"
[docs]class ResourceFF(RtlResourceType): pass
[docs]class ResourceLatch(RtlResourceType): pass
[docs]class ResourceRAM(RtlResourceType): """ Specifier of type of RAM like memory """
[docs] def __init__(self, width, items, rwSync: int, rSync: int, wSync: int, rSync_wAsync: int, rwAsync: int, rAsync: int, wAsync: int, rAsync_wSync: int): """ :param width: widtho of word in RAM/ROM :param items: number of words in RAM/ROM :param rwSync: count of read + write sychronous ports :param rSync: count of read only sychronous ports :param wSync: count of write only sychronous ports :param rSync_wAsync: count of synchronous read + asynchronous write ports :param rwAsync: count of read + write asychronous ports :param rAsync: count of read only asychronous ports :param wAsync: count of write only asychronous ports :param rAsync_wSync: count of asynchronous read + synchronous write ports """ self.width = width self.items = items self.rwSync = rwSync self.rSync = rSync self.wSync = wSync self.rSync_wAsync = rSync_wAsync self.rwAsync = rwAsync self.rAsync = rAsync self.wAsync = wAsync self.rAsync_wSync = rAsync_wSync
def __hash__(self): return hash(( self.width, self.items, self.rwSync, self.rSync, self.wSync, self.rSync_wAsync, self.rwAsync, self.rAsync, self.wAsync, self.rAsync_wSync)) def __eq__(self, other): return isinstance(other, ResourceRAM) and ( self.width == other.width and self.items == other.items and self.rwSync == other.rwSync and self.rSync == other.rSync and self.wSync == other.wSync and self.rSync_wAsync == other.rSync_wAsync and self.rwAsync == other.rwAsync and self.rAsync == other.rAsync and self.wAsync == other.wAsync and self.rAsync_wSync == other.rAsync_wSync ) def __repr__(self): return ("<%s, %dbit x %d, syncPorts: (rw:%d, r:%d, w:%d), asyncPorts:" " (rw:%d, r:%d, w:%d), rSync_wAsyncPorts: %d," " rAsync_wSyncPorts: %d>") % ( self.__class__.__name__, self.width, self.items, self.rwSync, self.rSync, self.wSync, self.rwAsync, self.rAsync, self.wAsync, self.rSync_wAsync, self.rAsync_wSync )