2
0
mirror of https://github.com/m-labs/artiq.git synced 2024-12-19 08:26:30 +08:00
artiq/doc/manual/faq.rst

77 lines
2.6 KiB
ReStructuredText
Raw Normal View History

FAQ
###
How do I ...
============
2015-05-03 20:42:42 +08:00
prevent my first RTIO command from causing an underflow?
--------------------------------------------------------
The RTIO timestamp counter starts counting at zero at the beginning of the first kernel run on the core device. The first RTIO event is programmed with a small timestamp above zero. If the kernel needs more time than this timestamp to produce the event, an underflow will occur. You can prevent it by calling ``break_realtime`` just before programming the first event.
2015-03-25 23:37:17 +08:00
override the `sysclk` frequency of just one DDS?
2015-03-25 03:12:40 +08:00
------------------------------------------------
2015-03-25 23:17:49 +08:00
Override the parameter using an argument in the DDB.
organize parameters in folders?
-------------------------------
2015-05-03 20:42:42 +08:00
Use GUI auto-completion and filtering.
Names need to be unique.
enforce functional dependencies between parameters?
---------------------------------------------------
2015-03-25 23:37:17 +08:00
If you want to override a parameter ``b`` in the PDB to be ``b = 2*a``,
2015-03-25 23:17:49 +08:00
use wrapper experiments, overriding parameters by passing them to the
experiment's constructor.
2015-03-25 23:37:17 +08:00
get rid of ``DBKeys``?
----------------------
2015-03-25 23:37:17 +08:00
``DBKeys`` references keys in PDB, DDB and RDB.
write a generator feeding a kernel feeding an analyze function?
---------------------------------------------------------------
Like this::
def run(self):
self.parse(self.pipe(iter(range(10))))
def pipe(self, gen):
for i in gen:
r = self.do(i)
yield r
def parse(self, gen):
for i in gen:
pass
@kernel
def do(self, i):
return i
2015-03-25 23:37:17 +08:00
create and use variable lengths arrays in kernels?
--------------------------------------------------
Don't. Preallocate everything. Or chunk it and e.g. read 100 events per
function call, push them upstream and retry until the gate time closes.
2015-03-25 23:17:49 +08:00
execute multiple slow controller RPCs in parallel without losing time?
----------------------------------------------------------------------
2015-03-25 23:37:17 +08:00
Use ``threading.Thread``: portable, fast, simple for one-shot calls.
2015-03-25 23:17:49 +08:00
write part of my experiment as a coroutine/asyncio task/generator?
------------------------------------------------------------------
2015-03-25 23:37:17 +08:00
You can not change the API that your experiment exposes: ``__init__()``,
``build()``, ``run()`` and ``analyze()`` need to be regular functions, not
2015-03-25 23:17:49 +08:00
generators or asyncio coroutines. That would make reusing your own code in
2015-03-25 03:12:40 +08:00
sub-experiments difficult and fragile. You can however always use the
2015-03-25 23:37:17 +08:00
scheduler API to achieve the same (``scheduler.yield(duration=0)``)
2015-03-25 23:17:49 +08:00
or wrap your own generators/coroutines/tasks in regular functions that
2015-03-25 03:12:40 +08:00
you then expose as part of the API.