coredevice/cache: port to nac3

This commit is contained in:
Sebastien Bourdeauducq 2022-02-26 16:28:17 +08:00
parent 5db9bc9bd4
commit 6388b82455
2 changed files with 17 additions and 8 deletions

View File

@ -1,23 +1,29 @@
from artiq.language.core import * from numpy import int32
from artiq.language.types import *
from artiq.language.core import nac3, extern, kernel, KernelInvariant
from artiq.coredevice.core import Core
@syscall(flags={"nounwind"}) @extern
def cache_get(key: TStr) -> TList(TInt32): def cache_get(key: str) -> list[int32]:
raise NotImplementedError("syscall not simulated") raise NotImplementedError("syscall not simulated")
@syscall @extern
def cache_put(key: TStr, value: TList(TInt32)) -> TNone: def cache_put(key: str, value: list[int32]):
raise NotImplementedError("syscall not simulated") raise NotImplementedError("syscall not simulated")
@nac3
class CoreCache: class CoreCache:
"""Core device cache access""" """Core device cache access"""
core: KernelInvariant[Core]
def __init__(self, dmgr, core_device="core"): def __init__(self, dmgr, core_device="core"):
self.core = dmgr.get(core_device) self.core = dmgr.get(core_device)
@kernel @kernel
def get(self, key): def get(self, key: str) -> list[int32]:
"""Extract a value from the core device cache. """Extract a value from the core device cache.
After a value is extracted, it cannot be replaced with another value using After a value is extracted, it cannot be replaced with another value using
:meth:`put` until all kernel functions finish executing; attempting :meth:`put` until all kernel functions finish executing; attempting
@ -34,7 +40,7 @@ class CoreCache:
return cache_get(key) return cache_get(key)
@kernel @kernel
def put(self, key, value): def put(self, key: str, value: list[int32]):
"""Put a value into the core device cache. The value will persist until reboot. """Put a value into the core device cache. The value will persist until reboot.
To remove a value from the cache, call :meth:`put` with an empty list. To remove a value from the cache, call :meth:`put` with an empty list.

View File

@ -1,5 +1,6 @@
from artiq.experiment import * from artiq.experiment import *
from artiq.coredevice.core import Core from artiq.coredevice.core import Core
from artiq.coredevice.cache import CoreCache
from artiq.coredevice.zotino import Zotino from artiq.coredevice.zotino import Zotino
from artiq.coredevice.mirny import Mirny as MirnyCPLD from artiq.coredevice.mirny import Mirny as MirnyCPLD
from artiq.coredevice.adf5356 import ADF5356 from artiq.coredevice.adf5356 import ADF5356
@ -12,6 +13,7 @@ from artiq.coredevice.edge_counter import EdgeCounter
@nac3 @nac3
class NAC3Devices(EnvExperiment): class NAC3Devices(EnvExperiment):
core: KernelInvariant[Core] core: KernelInvariant[Core]
core_cache: KernelInvariant[CoreCache]
zotino0: KernelInvariant[Zotino] zotino0: KernelInvariant[Zotino]
mirny0_cpld: KernelInvariant[MirnyCPLD] mirny0_cpld: KernelInvariant[MirnyCPLD]
mirny0_ch0: KernelInvariant[ADF5356] mirny0_ch0: KernelInvariant[ADF5356]
@ -22,6 +24,7 @@ class NAC3Devices(EnvExperiment):
def build(self): def build(self):
self.setattr_device("core") self.setattr_device("core")
self.setattr_device("core_cache")
self.setattr_device("zotino0") self.setattr_device("zotino0")
self.setattr_device("mirny0_cpld") self.setattr_device("mirny0_cpld")
self.setattr_device("mirny0_ch0") self.setattr_device("mirny0_ch0")