Source code for hwtBuildsystem.vivado.api.port

from hwt.hdl.types.bits import Bits
from hwt.interfaces.std import Signal, Clk, Rst, Rst_n
from hwtBuildsystem.vivado.api.tcl import VivadoTCL
from hwtBuildsystem.vivado.xdcGen import PortType
from ipCorePackager.constants import INTF_DIRECTION


[docs]class VivadoBoardDesignPort(): def __init__(self, bd, name, direction=None, typ=None, hasSubIntf=False, config=None, width=None, bitIndx=None): self.bd = bd self.name = name self.direction = direction self.typ = typ self.hasSubIntf = hasSubIntf if config is None: config = {} self.config = config self.extraXDC = [] self.bitIndx = bitIndx self.width = width if width is not None: assert(not bitIndx) assert(width > 0) self.bits = [ VivadoBoardDesignPort(bd, name, direction=direction, typ=typ, bitIndx=i) for i in range(width) ] else: self.bits = None if bitIndx is None and self.bd is not None: self.bd.insertPort(self)
[docs] @classmethod def fromInterface(cls, interface: Signal): if isinstance(interface._dtype, Bits): width = interface._dtype.bit_length() if width == 1 and not interface._dtype.force_vector: width = None else: width = None if isinstance(interface, Clk): typ = PortType.clk elif isinstance(interface, (Rst, Rst_n)): typ = PortType.rst else: typ = None return cls(None, interface._getHdlName(), direction=INTF_DIRECTION.asDirection(interface._direction), typ=typ, hasSubIntf=bool(interface._interfaces), width=width)
[docs] def create(self): exe = self.bd.project.executor.exeCmd exe(VivadoTCL.create_bd_port(self.name, self.direction, typ=self.typ, width=self.width)) for k, v in self.config.items(): exe(VivadoTCL.set_property('[' + self.get() + ']', "CONFIG." + k, v))
[docs] def forEachBit(self, fn): if self.bits: for bit in self.bits: fn(bit) else: fn(self)
[docs] def get(self, forHdlWrapper=False): name = self.name if self.bitIndx is not None: name = "{%s[%d]}" % (name, self.bitIndx) names = [name] if forHdlWrapper: if self.hasSubIntf: raise NotImplemented() else: return VivadoTCL.get_ports(names) else: if self.hasSubIntf: return VivadoTCL.get_bd_intf_ports(names) else: return VivadoTCL.get_bd_ports(names)