Source code for frontend.modules.netlist

#!/usr/bin/env python
# -*- encoding=utf8 -*-

"""
Author: Hanyu Wang
Created time: 2024-06-25 17:11:35
Last Modified by: Hanyu Wang
Last Modified time: 2024-06-25 22:59:35
"""

from typing import List
from .module import Module
from .definitions import *


[docs]class Netlist(Macros, TimeScale): """ A netlist is a collection of modules """ def __init__(self): Macros.__init__(self) TimeScale.__init__(self) self.modules = {} def addModule(self, module: Module): self.modules[module.getName()] = module def __repr__(self): return "Netlist({})".format(self.modules) def getModule(self, name: str) -> Module: return self.modules.get(name, None) def getModuleNames(self) -> List[str]: return list(self.modules.keys()) def getModules(self) -> List[Module]: return list(self.modules.values()) def getModuleAt(self, index: int) -> Module: # Especially useful for netlist with only one module return self.getModule(self.getModuleNames()[index]) def __eq__(self, other: object) -> bool: if not isinstance(other, Netlist): return False if len(self.getModuleNames()) != len(other.getModuleNames()): print( f"Number of modules are not equal: {len(self.getModuleNames())} != {len(other.getModuleNames())}" ) return False # compare modules for module in self.getModuleNames(): if module not in other.getModuleNames(): print(f"Module {module} not found in other") print(f"Modules in self: {self.getModuleNames()}") print(f"Modules in other: {other.getModuleNames()}") return False if self.getModule(module) != other.getModule(module): print( f"Module {module} in self is not equal to module {module} in other" ) return False # compare parameters return Macros.__eq__(self, other) and TimeScale.__eq__(self, other) def __ne__(self, value: object) -> bool: return not self.__eq__(value)