Source code for basil.HL.seq_rec
#
# ------------------------------------------------------------
# Copyright (c) All rights reserved
# SiLab, Institute of Physics, University of Bonn
# ------------------------------------------------------------
#
from basil.HL.RegisterHardwareLayer import RegisterHardwareLayer
[docs]
class seq_rec(RegisterHardwareLayer):
"""Sequencer receiver controller interface for seq_rec FPGA module."""
_registers = {
"RESET": {"descr": {"addr": 0, "size": 8, "properties": ["writeonly"]}},
"VERSION": {"descr": {"addr": 0, "size": 8, "properties": ["ro"]}},
"READY": {"descr": {"addr": 1, "size": 1, "properties": ["ro"]}},
"START": {"descr": {"addr": 1, "size": 8, "properties": ["writeonly"]}},
"EN_EXT_START": {"descr": {"addr": 2, "size": 8}},
"SIZE": {"descr": {"addr": 4, "size": 32}},
"MEM_BYTES": {"descr": {"addr": 8, "size": 32, "properties": ["ro"]}},
}
_require_version = "==1"
def __init__(self, intf, conf):
super(seq_rec, self).__init__(intf, conf)
self._seq_mem_offset = 16 # in bytes
def init(self):
super(seq_rec, self).init()
self._seq_mem_size = self.get_mem_size()
def reset(self):
self.RESET = 0
def start(self):
self.START = 0
def set_size(self, value):
self.SIZE = value
def get_size(self):
return self.SIZE
def set_count(self, value):
self.SIZE = value
def set_en_ext_start(self, value):
self.EN_EXT_START = value
def get_en_ext_start(self):
return self.EN_EXT_START
def get_mem_size(self):
return self.MEM_BYTES
def is_done(self):
return self.is_ready
@property
def is_ready(self):
return self.READY
def get_done(self):
return self.is_ready
def get_data(self, size=None, addr=0):
if size and self._seq_mem_size < size:
raise ValueError("Size is too big memory=%d requested_size=%d" % (self._seq_mem_size, size))
if not size:
return self._intf.read(self._conf["base_addr"] + self._seq_mem_offset + addr, self._seq_mem_size)
else:
return self._intf.read(self._conf["base_addr"] + self._seq_mem_offset + addr, size)