Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
68 changes: 67 additions & 1 deletion veriloggen/types/componentgen.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ def __init__(self):
self.bus_interfaces = None
self.clk_ports = None
self.rst_ports = None
self.irq_ports = None
self.ext_ports = None
self.ext_params = None

Expand All @@ -46,7 +47,7 @@ def __init__(self):
self.dependency_consumer = set()

def generate(self, m, ip_name, bus_interfaces,
clk_ports, rst_ports,
clk_ports, rst_ports, irq_ports,
ext_ports, ext_params,
vendor='user.org', library='user', version='1.0',
description='user description',
Expand All @@ -57,6 +58,7 @@ def generate(self, m, ip_name, bus_interfaces,
self.bus_interfaces = bus_interfaces
self.clk_ports = clk_ports
self.rst_ports = rst_ports
self.irq_ports = irq_ports
self.ext_ports = ext_ports
self.ext_params = ext_params

Expand Down Expand Up @@ -151,6 +153,9 @@ def mkBusInterfaces(self):
for clk_name, assoc_rsts in self.clk_ports.items():
bus.appendChild(self.mkBusInterfaceClock(clk_name, assoc_rsts))

for irq_name, sensitivity in self.irq_ports.items():
bus.appendChild(self.mkBusInterfaceInterrupt(irq_name, sensitivity))

return bus

def mkBusInterface(self, obj):
Expand Down Expand Up @@ -407,6 +412,67 @@ def mkBusParameterPolarity(self, name, polarity):
parameter.appendChild(value)
return parameter

def mkBusInterfaceInterrupt(self, name, sensitivity):
interface = self.doc.createElement('spirit:busInterface')
interface.appendChild(self.mkName(name))
interface.appendChild(self.mkBusTypeInterrupt())
interface.appendChild(self.mkAbstractionTypeInterrupt())
interface.appendChild(self.mkMasterInterrupt())
interface.appendChild(self.mkPortMapsInterrupt(name))
interface.appendChild(self.mkBusParametersInterrupt(name, sensitivity))
return interface

def mkBusTypeInterrupt(self):
bustype = self.doc.createElement('spirit:busType')
self.setAttribute(bustype, 'spirit:vendor', "xilinx.com")
self.setAttribute(bustype, 'spirit:library', "signal")
self.setAttribute(bustype, 'spirit:name', "interrupt")
self.setAttribute(bustype, 'spirit:version', "1.0")
return bustype

def mkAbstractionTypeInterrupt(self):
abstractiontype = self.doc.createElement('spirit:abstractionType')
self.setAttribute(abstractiontype, 'spirit:vendor', "xilinx.com")
self.setAttribute(abstractiontype, 'spirit:library', "signal")
self.setAttribute(abstractiontype, 'spirit:name', "interrupt_rtl")
self.setAttribute(abstractiontype, 'spirit:version', "1.0")
return abstractiontype

def mkMasterInterrupt(self):
master = self.doc.createElement('spirit:master')
return master

def mkPortMapsInterrupt(self, name):
portmaps = self.doc.createElement('spirit:portMaps')
portmaps.appendChild(self.mkPortMapInterrupt(name))
return portmaps

def mkPortMapInterrupt(self, name):
portmap = self.doc.createElement('spirit:portMap')
portmap.appendChild(self.mkLogicalPort('INTERRUPT'))
portmap.appendChild(self.mkPhysicalPortInterrupt(name))
return portmap

def mkPhysicalPortInterrupt(self, name):
physicalport = self.doc.createElement('spirit:physicalPort')
physicalport.appendChild(self.mkName(name))
return physicalport

def mkBusParametersInterrupt(self, name, sensitivity):
parameters = self.doc.createElement('spirit:parameters')
parameters.appendChild(self.mkBusParameterSensitivity(name, sensitivity))
return parameters

def mkBusParameterSensitivity(self, name, sensitivity):
parameter = self.doc.createElement('spirit:parameter')
parameter.appendChild(self.mkName('SENSITIVITY'))
value = self.doc.createElement('spirit:value')
self.setAttribute(value, 'spirit:id', "BUSIFPARAM_VALUE."
+ name.upper() + ".SENSITIVITY")
self.setText(value, sensitivity)
parameter.appendChild(value)
return parameter

def mkAddressSpaces(self):
isempty = True
spaces = self.doc.createElement('spirit:addressSpaces')
Expand Down
9 changes: 8 additions & 1 deletion veriloggen/types/ipxact.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@


def to_ipxact(m, ip_name=None, ip_ver='1.0',
clk_ports=None, rst_ports=None):
clk_ports=None, rst_ports=None, irq_ports=None):

if ip_name is None:
ip_name = m.name
Expand All @@ -31,6 +31,12 @@ def to_ipxact(m, ip_name=None, ip_ver='1.0',
if isinstance(rst_ports, (list, tuple)):
rst_ports = OrderedDict(rst_ports)

if irq_ports is None:
irq_ports = {}

if isinstance(irq_ports, (list, tuple)):
irq_ports = OrderedDict(irq_ports)

dirname = ''.join([ip_name, '_v', ip_ver.replace('.', '_'), '/'])

verilogname = ip_name + '.v'
Expand Down Expand Up @@ -92,6 +98,7 @@ def to_ipxact(m, ip_name=None, ip_ver='1.0',
bus_interfaces,
clk_ports,
rst_ports,
irq_ports,
ext_ports,
ext_params,
version=ip_ver)
Expand Down