core: add trigger_analyzer_proxy API

pull/2299/head
Sebastien Bourdeauducq 2023-12-13 13:08:54 +08:00
parent a26cee6ca7
commit 7a863b4f5e
6 changed files with 52 additions and 6 deletions

View File

@ -84,7 +84,10 @@ class Core:
"core", "ref_period", "coarse_ref_period", "ref_multiplier",
}
def __init__(self, dmgr, host, ref_period, ref_multiplier=8,
def __init__(self, dmgr,
host, ref_period,
analyzer_proxy=None,
ref_multiplier=8,
target="rv32g", satellite_cpu_targets={}):
self.ref_period = ref_period
self.ref_multiplier = ref_multiplier
@ -95,6 +98,10 @@ class Core:
self.comm = CommKernelDummy()
else:
self.comm = CommKernel(host)
if analyzer_proxy is None:
self.analyzer_proxy = None
else:
self.analyzer_proxy = dmgr.get(analyzer_proxy)
self.first_run = True
self.dmgr = dmgr
@ -288,3 +295,20 @@ class Core:
min_now = rtio_get_counter() + 125000
if now_mu() < min_now:
at_mu(min_now)
def trigger_analyzer_proxy(self):
"""Causes the core analyzer proxy to retrieve a dump from the device,
and distribute it to all connected clients (typically dashboards).
Returns only after the dump has been retrieved from the device.
Raises IOError if no analyzer proxy has been configured, or if the
analyzer proxy fails. In the latter case, more details would be
available in the proxy log.
"""
if self.analyzer_proxy is None:
raise IOError("No analyzer proxy configured")
else:
success = self.analyzer_proxy.trigger()
if not success:
raise IOError("Analyzer proxy reported failure")

View File

@ -7,7 +7,11 @@ device_db = {
"type": "local",
"module": "artiq.coredevice.core",
"class": "Core",
"arguments": {"host": core_addr, "ref_period": 1e-9}
"arguments": {
"host": core_addr,
"ref_period": 1e-9,
"analyzer_proxy": "core_analyzer"
}
},
"core_log": {
"type": "controller",

View File

@ -5,7 +5,11 @@ device_db = {
"type": "local",
"module": "artiq.coredevice.core",
"class": "Core",
"arguments": {"host": core_addr, "ref_period": 1/(8*150e6)}
"arguments": {
"host": core_addr,
"ref_period": 1e-9,
"analyzer_proxy": "core_analyzer"
}
},
"core_log": {
"type": "controller",

View File

@ -5,7 +5,11 @@ device_db = {
"type": "local",
"module": "artiq.coredevice.core",
"class": "Core",
"arguments": {"host": core_addr, "ref_period": 1e-9}
"arguments": {
"host": core_addr,
"ref_period": 1e-9,
"analyzer_proxy": "core_analyzer"
}
},
"core_log": {
"type": "controller",

View File

@ -9,7 +9,11 @@ device_db = {
"type": "local",
"module": "artiq.coredevice.core",
"class": "Core",
"arguments": {"host": core_addr, "ref_period": 1e-9}
"arguments": {
"host": core_addr,
"ref_period": 1e-9,
"analyzer_proxy": "core_analyzer"
}
},
"core_log": {
"type": "controller",

View File

@ -55,7 +55,13 @@ def process_header(output, description):
"type": "local",
"module": "artiq.coredevice.core",
"class": "Core",
"arguments": {{"host": core_addr, "ref_period": {ref_period}, "target": "{cpu_target}", "satellite_cpu_targets": {{}} }},
"arguments": {{
"host": core_addr,
"ref_period": {ref_period},
"analyzer_proxy": "core_analyzer"
"target": "{cpu_target}",
"satellite_cpu_targets": {{}}
}},
}},
"core_log": {{
"type": "controller",