2
0
mirror of https://github.com/m-labs/artiq.git synced 2024-12-29 21:23:34 +08:00

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 artiq.language.types import *
from numpy import int32
from artiq.language.core import nac3, extern, kernel, KernelInvariant
from artiq.coredevice.core import Core
@syscall(flags={"nounwind"})
def cache_get(key: TStr) -> TList(TInt32):
@extern
def cache_get(key: str) -> list[int32]:
raise NotImplementedError("syscall not simulated")
@syscall
def cache_put(key: TStr, value: TList(TInt32)) -> TNone:
@extern
def cache_put(key: str, value: list[int32]):
raise NotImplementedError("syscall not simulated")
@nac3
class CoreCache:
"""Core device cache access"""
core: KernelInvariant[Core]
def __init__(self, dmgr, core_device="core"):
self.core = dmgr.get(core_device)
@kernel
def get(self, key):
def get(self, key: str) -> list[int32]:
"""Extract a value from the core device cache.
After a value is extracted, it cannot be replaced with another value using
:meth:`put` until all kernel functions finish executing; attempting
@ -34,7 +40,7 @@ class CoreCache:
return cache_get(key)
@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.
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.coredevice.core import Core
from artiq.coredevice.cache import CoreCache
from artiq.coredevice.zotino import Zotino
from artiq.coredevice.mirny import Mirny as MirnyCPLD
from artiq.coredevice.adf5356 import ADF5356
@ -12,6 +13,7 @@ from artiq.coredevice.edge_counter import EdgeCounter
@nac3
class NAC3Devices(EnvExperiment):
core: KernelInvariant[Core]
core_cache: KernelInvariant[CoreCache]
zotino0: KernelInvariant[Zotino]
mirny0_cpld: KernelInvariant[MirnyCPLD]
mirny0_ch0: KernelInvariant[ADF5356]
@ -22,6 +24,7 @@ class NAC3Devices(EnvExperiment):
def build(self):
self.setattr_device("core")
self.setattr_device("core_cache")
self.setattr_device("zotino0")
self.setattr_device("mirny0_cpld")
self.setattr_device("mirny0_ch0")