mirror of
https://git.rwth-aachen.de/acs/public/villas/node/
synced 2025-03-09 00:00:00 +01:00
hwdef-parse: follow OR-gate merging DMA interrupts
Also update JSON config with the new output.
This commit is contained in:
parent
6cb3b77c7a
commit
73c6ae1f71
2 changed files with 37 additions and 8 deletions
|
@ -147,7 +147,11 @@
|
|||
"target": "hier_0_axis_interconnect_0_axis_interconnect_0_xbar:1",
|
||||
"name": "S2MM"
|
||||
}
|
||||
]
|
||||
],
|
||||
"irqs": {
|
||||
"mm2s_introut": "pcie_0_axi_pcie_intc_0:3",
|
||||
"s2mm_introut": "pcie_0_axi_pcie_intc_0:4"
|
||||
}
|
||||
},
|
||||
"hier_0_axi_dma_axi_dma_1": {
|
||||
"vlnv": "xilinx.com:ip:axi_dma:7.1",
|
||||
|
@ -182,7 +186,11 @@
|
|||
"target": "hier_0_axis_interconnect_0_axis_interconnect_0_xbar:6",
|
||||
"name": "S2MM"
|
||||
}
|
||||
]
|
||||
],
|
||||
"irqs": {
|
||||
"mm2s_introut": "pcie_0_axi_pcie_intc_0:3",
|
||||
"s2mm_introut": "pcie_0_axi_pcie_intc_0:4"
|
||||
}
|
||||
},
|
||||
"hier_0_axi_fifo_mm_s_0": {
|
||||
"vlnv": "xilinx.com:ip:axi_fifo_mm_s:4.1",
|
||||
|
|
|
@ -200,7 +200,7 @@ ports = concat.xpath('.//PORT[@DIR="I"]')
|
|||
for port in ports:
|
||||
name = port.get('NAME')
|
||||
signame = port.get('SIGNAME')
|
||||
|
||||
|
||||
# Skip unconnected IRQs
|
||||
if not signame:
|
||||
continue
|
||||
|
@ -213,13 +213,34 @@ for port in ports:
|
|||
|
||||
instance = ip.get('INSTANCE')
|
||||
vlnv = ip.get('VLNV')
|
||||
modtype = ip.get('MODTYPE')
|
||||
|
||||
port = ip.xpath('.//PORT[@SIGNAME="{}" and @DIR="O"]'.format(signame))[0]
|
||||
irqname = port.get('NAME')
|
||||
originators = []
|
||||
|
||||
if instance in ips:
|
||||
irqs = ips[instance].setdefault('irqs', {})
|
||||
irqs[irqname] = '{}:{}'.format(intc.get('INSTANCE'), irq)
|
||||
# follow one level of OR gates merging interrupts (may be generalized later)
|
||||
if modtype == 'util_vector_logic':
|
||||
logic_op = ip.xpath('.//PARAMETER[@NAME="C_OPERATION"]')[0]
|
||||
if logic_op.get('VALUE') == 'or':
|
||||
# hardware interrupts sharing the same IRQ at the controller
|
||||
ports = ip.xpath('.//PORT[@DIR="I"]')
|
||||
for port in ports:
|
||||
signame = port.get('SIGNAME')
|
||||
ip = root.xpath('.//MODULE[.//PORT[@SIGNAME="{}" and @DIR="O"]]'.format(signame))[0]
|
||||
instance = ip.get('INSTANCE')
|
||||
originators.append((instance, signame))
|
||||
else:
|
||||
# consider this instance as originator
|
||||
originators.append((instance, signame))
|
||||
|
||||
|
||||
for instance, signame in originators:
|
||||
ip = root.xpath('.//MODULE[.//PORT[@SIGNAME="{}" and @DIR="O"]]'.format(signame))[0]
|
||||
port = ip.xpath('.//PORT[@SIGNAME="{}" and @DIR="O"]'.format(signame))[0]
|
||||
irqname = port.get('NAME')
|
||||
|
||||
if instance in ips:
|
||||
irqs = ips[instance].setdefault('irqs', {})
|
||||
irqs[irqname] = '{}:{}'.format(intc.get('INSTANCE'), irq)
|
||||
|
||||
# Find BRAM storage depths (size)
|
||||
brams = root.xpath('.//MODULE[@MODTYPE="axi_bram_ctrl"]')
|
||||
|
|
Loading…
Add table
Reference in a new issue