Source code for hwtBuildsystem.vivado.api.boardDesign

import os

from hwtBuildsystem.vivado.api import ConfigErr
from hwtBuildsystem.vivado.api.tcl import VivadoTCL
from hwtBuildsystem.vivado.api.unit import VivadoBoardDesignUnit


[docs] class VivadoBoardDesign(): def __init__(self, project: 'VivadoProject', name=None): j = os.path.join self.project = project self.name = name self.bdDir = j(self.project.bdSrcDir, self.name) self.bdFile = j(self.bdDir, name + ".bd") self.bdWrapperFile = j(self.bdDir , 'hdl', self.name + "_wrapper.vhd") self.ports = {}
[docs] def create(self): exe = self.project.executor.exeCmd exe(VivadoTCL.create_bd_design(self.name))
[docs] def delete(self, fromDisk=True): exe = self.project.executor.exeCmd exe(VivadoTCL.remove_files([self.bdFile])) exe(VivadoTCL.remove_files([self.bdWrapperFile])) if fromDisk: exe(VivadoTCL.file.delete([self.bdDir])) exe(VivadoTCL.file.delete([self.bdWrapperFile]))
[docs] def exist(self): return os.path.exists(self.bdFile)
[docs] def open(self): exe = self.project.executor.exeCmd exe(VivadoTCL.open_bd_design(self.bdFile))
[docs] def insertPort(self, port): name_l = port.name.lower() if name_l in self.ports: raise ConfigErr("%s port redefinition" % name_l) else: self.ports[name_l] = port
[docs] def importFromTcl(self, fileName, refrestTclIfExists=True): """ :param refrestIfExists: refresh tcl file from bd before opening design """ p = os.path assert(self.name == p.splitext(p.basename(fileName))[0]) # assert name of bd in tcl is correct # update tcl from bd if p.exists(self.bdFile) and refrestTclIfExists: self.open() self.exportToTCL(fileName, force=True) exe = self.project.executor.exeCmd # tcl file does not contains revisions of ips exe(VivadoTCL.update_ip_catalog()) # remove old bd self.delete() # import new from tcl exe(VivadoTCL.source(fileName)) # generate wrapper and set is as top self.mkWrapper()
[docs] def exportToTCL(self, fileName, force=False): exe = self.project.executor.exeCmd exe(VivadoTCL.write_bd_tcl(fileName, force=force))
[docs] def mkWrapper(self): exe = self.project.executor.exeCmd exe(VivadoTCL.make_wrapper(self.bdFile)) exe(VivadoTCL.add_files([self.bdWrapperFile])) self.project.updateAllCompileOrders()
[docs] def setAsTop(self): return self.project.setTop(self.name + "_wrapper")
[docs] def unit(self, name, ipCore=None) -> VivadoBoardDesignUnit: return VivadoBoardDesignUnit(name, ipCore=ipCore)
[docs] def regenerateLayout(self): exe = self.project.executor.exeCmd exe(VivadoTCL.regenerate_bd_layout())