diff --git a/.ci/Jenkinsfile b/.ci/Jenkinsfile index e366cadf27abce84fce7784c7417d2ba4167df87..a2edcd8e377a45f5a9a1b8611b642b0a798eae37 100644 --- a/.ci/Jenkinsfile +++ b/.ci/Jenkinsfile @@ -17,7 +17,7 @@ if (executeHwTests) { testOptions : "--test-execall -j1", testSlurmResource: [partition: "cube", wafer: 62, - "fpga-without-aout": 0], + "fpga-without-aout": 3], preTestHook : { configureHxCubeBitfile() }, ] } diff --git a/.ci/Jenkinsfile_calibrun b/.ci/Jenkinsfile_calibrun index 39eb9c48c997c0e6abdd16e7d9fda01f53c86bb6..e9f4dee047360b4c34fa496e7a5fde2098272562 100644 --- a/.ci/Jenkinsfile_calibrun +++ b/.ci/Jenkinsfile_calibrun @@ -12,7 +12,7 @@ import static java.util.UUID.randomUUID final String deploymentRoot = "/wang/data/calibration/hicann-dls-sr-hx/" enum HxVersion { - HXv2(2) + HXv3(3) final int chipRevision @@ -103,7 +103,7 @@ if __name__ == '__main__': } Closure calibrationPipeline = { HxVersion version -> - if (version == HxVersion.HXv2) + if (version == HxVersion.HXv3) { wafSetup(projects: ["calix", "hwdb"]) } diff --git a/src/py/calix/common/algorithms.py b/src/py/calix/common/algorithms.py index 947ddee0603a7f6345a5cde9bc58829045063456..22bdaf0339844ba2767ac480980b2525785fe899 100644 --- a/src/py/calix/common/algorithms.py +++ b/src/py/calix/common/algorithms.py @@ -9,7 +9,7 @@ from typing import Union, Optional, ClassVar import numbers from abc import abstractmethod import numpy as np -from dlens_vx_v2 import sta, hxcomm +from dlens_vx_v3 import sta, hxcomm from calix.common import base, boundary_check, exceptions, helpers diff --git a/src/py/calix/common/base.py b/src/py/calix/common/base.py index 34ebe474babe4624c0a605bc71933274e8674b45..22630ee7533049683ab233a9e999b43a44fae60b 100644 --- a/src/py/calix/common/base.py +++ b/src/py/calix/common/base.py @@ -9,7 +9,7 @@ from typing import List, Union, Optional from dataclasses import dataclass from abc import ABC, abstractmethod import numpy as np -from dlens_vx_v2 import halco, hal, sta, logger, hxcomm +from dlens_vx_v3 import halco, hal, sta, logger, hxcomm from calix.common.boundary_check import check_range_boundaries diff --git a/src/py/calix/common/cadc.py b/src/py/calix/common/cadc.py index 20fac39191d84e7a10ecbb4da19619cb1403f837..9a32f0aa927a124898c733746f624575306f1ac3 100644 --- a/src/py/calix/common/cadc.py +++ b/src/py/calix/common/cadc.py @@ -6,7 +6,7 @@ from typing import Optional, Union import os from dataclasses import dataclass import numpy as np -from dlens_vx_v2 import halco, hal, sta, logger, hxcomm +from dlens_vx_v3 import halco, hal, sta, logger, hxcomm from calix.common import helpers, algorithms, base, \ cadc_helpers, cadc_evaluation diff --git a/src/py/calix/common/cadc_evaluation.py b/src/py/calix/common/cadc_evaluation.py index 1fb4154404c20d8138e35daf360f116a98c2d351..9b34773814e4a988bdd25c58ddcb6f8cc2e4b325 100644 --- a/src/py/calix/common/cadc_evaluation.py +++ b/src/py/calix/common/cadc_evaluation.py @@ -4,7 +4,7 @@ CADC calibration. """ import numpy as np -from dlens_vx_v2 import halco, sta, logger, hxcomm +from dlens_vx_v3 import halco, sta, logger, hxcomm from calix.common import cadc_helpers diff --git a/src/py/calix/common/cadc_helpers.py b/src/py/calix/common/cadc_helpers.py index f11e2e37a447df883595a7af3a8b588789b7ce83..ff65ef0896ff6e42d5c4fdc108279321729ba49b 100644 --- a/src/py/calix/common/cadc_helpers.py +++ b/src/py/calix/common/cadc_helpers.py @@ -5,7 +5,7 @@ calibration purposes. from typing import Tuple import numpy as np -from dlens_vx_v2 import halco, hal, sta, hxcomm +from dlens_vx_v3 import halco, hal, sta, hxcomm from calix.common import base, helpers diff --git a/src/py/calix/common/helpers.py b/src/py/calix/common/helpers.py index 028e9b51a5b13c2850b3f3608d13b69c97733d4b..fad56eb2f1f27c9d21ac9412c2463cc64ae7f749 100644 --- a/src/py/calix/common/helpers.py +++ b/src/py/calix/common/helpers.py @@ -7,7 +7,7 @@ from typing import Union, Dict, Optional, Tuple import warnings import numpy as np import quantities as pq -from dlens_vx_v2 import hal, sta, halco +from dlens_vx_v3 import hal, sta, halco def wait_for_us(builder: sta.PlaybackProgramBuilder, waiting_time: float diff --git a/src/py/calix/common/madc_base.py b/src/py/calix/common/madc_base.py index 82c73781fdcab7ebc3140b437670c48ec5dd8f44..a383a3caa74d1a526c4721ce1baba7fb6e37321f 100644 --- a/src/py/calix/common/madc_base.py +++ b/src/py/calix/common/madc_base.py @@ -9,7 +9,7 @@ import os import numpy as np import quantities as pq import matplotlib.pyplot as plt -from dlens_vx_v2 import hal, sta, halco, hxcomm +from dlens_vx_v3 import hal, sta, halco, hxcomm from calix.common import base, exceptions, helpers diff --git a/src/py/calix/common/synapse.py b/src/py/calix/common/synapse.py index ef560d41ca703638698e7c79ce3c3f9e8d20b387..3f8b1e59002950b56e87bd9111049f0008a3a443 100644 --- a/src/py/calix/common/synapse.py +++ b/src/py/calix/common/synapse.py @@ -1,7 +1,7 @@ from typing import List import numpy as np import quantities as pq -from dlens_vx_v2 import hal, sta, halco, hxcomm, logger +from dlens_vx_v3 import hal, sta, halco, hxcomm, logger from calix.common import base, cadc_helpers, madc_base, helpers, exceptions from calix.hagen import neuron_helpers diff --git a/src/py/calix/examples/plateau_potential.py b/src/py/calix/examples/plateau_potential.py index f2284bfd783d91c5d68d83f12cef191b96a93579..104f33cd67938ba97164bb992c374bf47e1c39f1 100644 --- a/src/py/calix/examples/plateau_potential.py +++ b/src/py/calix/examples/plateau_potential.py @@ -7,7 +7,7 @@ from typing import Union from pathlib import Path import numpy as np import quantities as pq -from dlens_vx_v2 import sta, hxcomm +from dlens_vx_v3 import sta, hxcomm import calix.spiking from calix.spiking import SpikingCalibrationResult diff --git a/src/py/calix/hagen/__init__.py b/src/py/calix/hagen/__init__.py index 2b1c88bc6b43a96b885f26c0b175941a0df7d1e4..20ec8189abb694a69abc4c4048a1893d3a6904b9 100644 --- a/src/py/calix/hagen/__init__.py +++ b/src/py/calix/hagen/__init__.py @@ -7,7 +7,7 @@ from typing import Tuple, Union, Optional from dataclasses import dataclass import numpy as np -from dlens_vx_v2 import sta, hxcomm, halco, hal, lola +from dlens_vx_v3 import sta, hxcomm, halco, hal, lola from calix.common import algorithms, base, cadc, synapse, helpers from calix.hagen import neuron, synapse_driver, neuron_helpers, multiplication @@ -55,9 +55,9 @@ class HagenSyninCalibrationResult(base.CalibrationResult): self.syn_i_bias_dac}) # static neuron configuration + config = lola.AtomicNeuron() + multiplication.Multiplication.configure_for_integration(config) for coord in halco.iter_all(halco.AtomicNeuronOnDLS): - config = lola.AtomicNeuron() - multiplication.Multiplication.configure_for_integration(config) builder.write(coord, config) # Connect 1.2 V to synapse debug line: diff --git a/src/py/calix/hagen/multiplication.py b/src/py/calix/hagen/multiplication.py index 5266ec6ff9301b165d1f3aea5512bbdb0bdd78ae..565b0b262b38be3a6da3d37a3572766c1d903d02 100644 --- a/src/py/calix/hagen/multiplication.py +++ b/src/py/calix/hagen/multiplication.py @@ -8,7 +8,7 @@ import time import numpy as np import quantities as pq -from dlens_vx_v2 import lola, halco, hal, sta, logger, hxcomm +from dlens_vx_v3 import lola, halco, hal, sta, logger, hxcomm from calix.common import base, helpers from calix.hagen import neuron_helpers @@ -92,18 +92,17 @@ class Multiplication: # Disable pullup of synaptic input lines (tau_syn -> inf) and # select the capacitor to be connected to the line. config.excitatory_input.enable = False - config.excitatory_input.enable_small_capacitor = False + config.excitatory_input.enable_small_capacitance = False config.excitatory_input.enable_high_resistance = True config.excitatory_input.i_bias_tau = 0 config.inhibitory_input.enable = False - config.inhibitory_input.enable_small_capacitor = False + config.inhibitory_input.enable_small_capacitance = False config.inhibitory_input.enable_high_resistance = True config.inhibitory_input.i_bias_tau = 0 # We need the source follower before the synaptic input OTA biased - # (i_drop_input) in order to see the potential at the readout. - config.excitatory_input.i_drop_input = 300 + helpers.capmem_noise() - config.inhibitory_input.i_drop_input = 310 + helpers.capmem_noise() + # (i_drop_input, which is a global bias current) in order to see + # the potential at the readout. # We choose the excitatory synaptic input line for the integration, # therefore we select it as readout source. diff --git a/src/py/calix/hagen/neuron.py b/src/py/calix/hagen/neuron.py index 4cfc7894228830f76e0243e50020ce76cdc9f02f..540743e76b5382cf3e40571273528dcf9373a915 100644 --- a/src/py/calix/hagen/neuron.py +++ b/src/py/calix/hagen/neuron.py @@ -8,7 +8,7 @@ from typing import Dict, Optional, Union, Callable from dataclasses import dataclass import numpy as np import quantities as pq -from dlens_vx_v2 import sta, halco, hal, hxcomm, lola +from dlens_vx_v3 import sta, halco, hal, hxcomm, lola from calix.common import algorithms, base, helpers from calix.hagen import neuron_helpers, neuron_evaluation, \ @@ -76,10 +76,6 @@ class CalibrationResultInternal: halco.NeuronConfigOnDLS.size, dtype=int) i_syn_inh_shift: np.ndarray = np.empty( halco.NeuronConfigOnDLS.size, dtype=int) - i_syn_exc_drop: np.ndarray = np.empty( - halco.NeuronConfigOnDLS.size, dtype=int) - i_syn_inh_drop: np.ndarray = np.empty( - halco.NeuronConfigOnDLS.size, dtype=int) i_bias_leak: np.ndarray = np.empty( halco.NeuronConfigOnDLS.size, dtype=int) i_bias_reset: np.ndarray = np.empty( @@ -93,6 +89,7 @@ class CalibrationResultInternal: i_syn_inh_tau: np.ndarray = np.empty( halco.NeuronConfigOnDLS.size, dtype=int) success: np.ndarray = np.ones(halco.NeuronConfigOnDLS.size, dtype=bool) + use_synin_small_capacitance: bool = True def to_atomic_neuron(self, neuron_coord: halco.AtomicNeuronOnDLS @@ -125,8 +122,7 @@ class CalibrationResultInternal: self.i_syn_exc_gm[neuron_id]) anexc.i_bias_tau = hal.CapMemCell.Value( self.i_syn_exc_tau[neuron_id]) - anexc.i_drop_input = hal.CapMemCell.Value( - self.i_syn_exc_drop[neuron_id]) + anexc.enable_small_capacitance = self.use_synin_small_capacitance aninh = atomic_neuron.inhibitory_input aninh.i_shift_reference = hal.CapMemCell.Value( @@ -135,8 +131,7 @@ class CalibrationResultInternal: self.i_syn_inh_gm[neuron_id]) aninh.i_bias_tau = hal.CapMemCell.Value( self.i_syn_inh_tau[neuron_id]) - aninh.i_drop_input = hal.CapMemCell.Value( - self.i_syn_inh_drop[neuron_id]) + aninh.enable_small_capacitance = self.use_synin_small_capacitance return atomic_neuron @@ -174,13 +169,13 @@ class CalibrationResultInternal: return result -# pylint: disable=too-many-statements +# pylint: disable=too-many-statements, too-many-locals def calibrate( connection: hxcomm.ConnectionHandle, *, target_leak_read: Union[int, np.ndarray] = 120, tau_mem: pq.quantity.Quantity = 60 * pq.us, tau_syn: pq.quantity.Quantity = 0.32 * pq.us, - i_synin_gm: int = 300, target_noise: Optional[float] = None, + i_synin_gm: int = 450, target_noise: Optional[float] = None, readout_neuron: Optional[halco.AtomicNeuronOnDLS] = None, initial_configuration: Optional[ Callable[[hxcomm.ConnectionHandle], None]] = None @@ -314,20 +309,12 @@ def calibrate( builder, readout_neuron=readout_neuron) base.run(connection, builder) - # disable synaptic inputs initially - neuron_helpers.reconfigure_synaptic_input( - connection, excitatory_biases=0, inhibitory_biases=0) - # call optional program for further initial configuration if initial_configuration is not None: initial_configuration(connection) # Initialize return object calib_result = CalibrationResultInternal() - calib_result.i_syn_exc_drop = initial_config[ - halco.CapMemRowOnCapMemBlock.i_bias_synin_exc_drop] - calib_result.i_syn_inh_drop = initial_config[ - halco.CapMemRowOnCapMemBlock.i_bias_synin_inh_drop] calib_result.i_bias_reset = initial_config[ halco.CapMemRowOnCapMemBlock.i_bias_reset] calib_result.i_syn_exc_tau = initial_config[ @@ -335,6 +322,25 @@ def calibrate( calib_result.i_syn_inh_tau = initial_config[ halco.CapMemRowOnCapMemBlock.i_bias_synin_inh_tau] + # disable synaptic inputs initially + neuron_helpers.reconfigure_synaptic_input( + connection, excitatory_biases=0, inhibitory_biases=0) + + # select small capacitance mode for syn. input lines + tickets = list() + builder = sta.PlaybackProgramBuilder() + for coord in halco.iter_all(halco.NeuronConfigOnDLS): + tickets.append(builder.read(coord)) + base.run(connection, builder) + + builder = sta.PlaybackProgramBuilder() + for coord, ticket in zip(halco.iter_all(halco.NeuronConfigOnDLS), tickets): + config = ticket.get() + config.enable_synaptic_input_excitatory_small_capacitance = True + config.enable_synaptic_input_inhibitory_small_capacitance = True + builder.write(coord, config) + base.run(connection, builder) + # Calibrate synaptic input time constant using MADC if np.all(tau_syn == 0 * pq.us): pass diff --git a/src/py/calix/hagen/neuron_evaluation.py b/src/py/calix/hagen/neuron_evaluation.py index ec9d5dd828f97bbeeae793f7d2b91ef5904c3857..340f6811277d3fba49a8c8a7477c70080efa10a2 100644 --- a/src/py/calix/hagen/neuron_evaluation.py +++ b/src/py/calix/hagen/neuron_evaluation.py @@ -4,7 +4,7 @@ per quadrant. """ import numpy as np -from dlens_vx_v2 import halco, logger, hxcomm +from dlens_vx_v3 import halco, logger, hxcomm from calix.hagen import neuron_helpers diff --git a/src/py/calix/hagen/neuron_helpers.py b/src/py/calix/hagen/neuron_helpers.py index ec6a60bbbb226475b4984f9024a444ad4ab05eaf..ecd913bcd47c3c35c9337d3eb0d53d54cf7fde7d 100644 --- a/src/py/calix/hagen/neuron_helpers.py +++ b/src/py/calix/hagen/neuron_helpers.py @@ -7,7 +7,7 @@ from __future__ import annotations from typing import Tuple, Union, List, Optional, Dict import numpy as np import quantities as pq -from dlens_vx_v2 import hal, sta, halco, lola, hxcomm +from dlens_vx_v3 import hal, sta, halco, lola, hxcomm from calix.common import base, cadc_helpers, helpers from calix import constants @@ -497,8 +497,8 @@ def set_analog_neuron_config( halco.CapMemRowOnCapMemBlock.i_bias_reset: hal.CapMemCell.Value.max - 2 * noise_amplitude, halco.CapMemRowOnCapMemBlock.v_reset: v_leak, - halco.CapMemRowOnCapMemBlock.i_bias_synin_exc_drop: 300, - halco.CapMemRowOnCapMemBlock.i_bias_synin_inh_drop: 300, + halco.CapMemRowOnCapMemBlock.i_bias_synin_exc_coba: 0, + halco.CapMemRowOnCapMemBlock.i_bias_synin_inh_coba: 0, halco.CapMemRowOnCapMemBlock.i_bias_synin_exc_shift: 310, halco.CapMemRowOnCapMemBlock.i_bias_synin_inh_shift: 310, halco.CapMemRowOnCapMemBlock.i_bias_synin_exc_tau: @@ -527,7 +527,8 @@ def set_global_capmem_config( halco.CapMemCellOnCapMemBlock.neuron_i_bias_readout_amp: 110, halco.CapMemCellOnCapMemBlock.neuron_i_bias_leak_source_follower: 100, halco.CapMemCellOnCapMemBlock.syn_i_bias_dac: 1022, - halco.CapMemCellOnCapMemBlock.neuron_i_bias_spike_comparator: 200 + halco.CapMemCellOnCapMemBlock.neuron_i_bias_spike_comparator: 200, + halco.CapMemCellOnCapMemBlock.neuron_i_bias_synin_drop: 300 } builder = helpers.capmem_set_quadrant_cells(builder, parameters) diff --git a/src/py/calix/hagen/neuron_leak_bias.py b/src/py/calix/hagen/neuron_leak_bias.py index 638b53379c9f121235c2181dd54d0d4ed8daccbe..fc5dc2faca033e0739d271492e3b08e88b8af5b9 100644 --- a/src/py/calix/hagen/neuron_leak_bias.py +++ b/src/py/calix/hagen/neuron_leak_bias.py @@ -19,7 +19,7 @@ import os import numpy as np import quantities as pq from scipy.optimize import curve_fit -from dlens_vx_v2 import hal, sta, halco, logger, hxcomm +from dlens_vx_v3 import hal, sta, halco, logger, hxcomm from calix.common import algorithms, base, exceptions, madc_base, helpers from calix.hagen import neuron_potentials, neuron_helpers diff --git a/src/py/calix/hagen/neuron_potentials.py b/src/py/calix/hagen/neuron_potentials.py index 5a8866103ba461b24bd84ff5277f491663db9023..aa64b3378ec03f5ee1f2e62b1f54518239d380ee 100644 --- a/src/py/calix/hagen/neuron_potentials.py +++ b/src/py/calix/hagen/neuron_potentials.py @@ -5,7 +5,7 @@ Provides functions to calibrate leak and reset potential. from typing import Union, List, Optional import numpy as np import quantities as pq -from dlens_vx_v2 import hal, sta, halco, logger, hxcomm +from dlens_vx_v3 import hal, sta, halco, logger, hxcomm from calix.common import base, cadc, cadc_helpers, helpers from calix.hagen import neuron_helpers diff --git a/src/py/calix/hagen/neuron_synin.py b/src/py/calix/hagen/neuron_synin.py index 66228ddcf57eef747b95c91d4b4d7e14ff562aa9..1fdec7c47b73851857c84019c7b3aff994155d48 100644 --- a/src/py/calix/hagen/neuron_synin.py +++ b/src/py/calix/hagen/neuron_synin.py @@ -12,7 +12,7 @@ import os import numpy as np import quantities as pq from scipy.optimize import curve_fit -from dlens_vx_v2 import hal, sta, halco, logger, hxcomm +from dlens_vx_v3 import hal, sta, halco, logger, hxcomm from calix.common import algorithms, base, madc_base, cadc_helpers, helpers, \ exceptions diff --git a/src/py/calix/hagen/synapse_driver.py b/src/py/calix/hagen/synapse_driver.py index bf340754a73e210be13d73d2b1ba80acd1306ea4..6831fc0819eafb13bae12850513b65567aa58393 100644 --- a/src/py/calix/hagen/synapse_driver.py +++ b/src/py/calix/hagen/synapse_driver.py @@ -13,7 +13,7 @@ be calibrated. from typing import Optional, Dict, Union from dataclasses import dataclass import numpy as np -from dlens_vx_v2 import hal, sta, halco, logger, hxcomm +from dlens_vx_v3 import hal, sta, halco, logger, hxcomm from calix.common import algorithms, base, helpers from calix.hagen import multiplication diff --git a/src/py/calix/multicomp/neuron_icc_bias.py b/src/py/calix/multicomp/neuron_icc_bias.py index 27cb62426841e4add6e200ce82bce2067d20476f..db54bd565201d0cf248ea2bff7ce7ea85ff4e8fb 100644 --- a/src/py/calix/multicomp/neuron_icc_bias.py +++ b/src/py/calix/multicomp/neuron_icc_bias.py @@ -2,7 +2,7 @@ import numpy as np import quantities as pq from typing import Optional, List -from dlens_vx_v2 import halco, sta, hxcomm, hal +from dlens_vx_v3 import halco, sta, hxcomm, hal from calix import constants from scipy.optimize import curve_fit diff --git a/src/py/calix/scripts/calix_generate_default_calibration.py b/src/py/calix/scripts/calix_generate_default_calibration.py index c2fbc9816761581b64edd6628ac512142c617b49..1522bb38bf91fe1b0554ffd966df15e02b96d0c7 100644 --- a/src/py/calix/scripts/calix_generate_default_calibration.py +++ b/src/py/calix/scripts/calix_generate_default_calibration.py @@ -11,9 +11,9 @@ from abc import ABCMeta, abstractmethod from pathlib import Path from typing import List -from dlens_vx_v2 import logger -from dlens_vx_v2.hxcomm import ConnectionHandle, ManagedConnection -from dlens_vx_v2.sta import PlaybackProgramBuilderDumper, ExperimentInit, \ +from dlens_vx_v3 import logger +from dlens_vx_v3.hxcomm import ConnectionHandle, ManagedConnection +from dlens_vx_v3.sta import PlaybackProgramBuilderDumper, ExperimentInit, \ run, to_json, to_portablebinary import calix.hagen diff --git a/src/py/calix/spiking/__init__.py b/src/py/calix/spiking/__init__.py index a29593cf42b742c36687f8835c47c49fcd269f48..67e8629aa70f4ae78a000607ba2e473320e5f6ff 100644 --- a/src/py/calix/spiking/__init__.py +++ b/src/py/calix/spiking/__init__.py @@ -4,7 +4,7 @@ from dataclasses import dataclass from calix.common import base, cadc, helpers from calix.spiking import neuron from calix import constants -from dlens_vx_v2 import sta, hxcomm +from dlens_vx_v3 import sta, hxcomm @dataclass diff --git a/src/py/calix/spiking/neuron.py b/src/py/calix/spiking/neuron.py index 1acbe97c615630cd0cf61a5150e196c9c816dfd5..d73b73501e9b8c5addae92dba9633224119afadc 100644 --- a/src/py/calix/spiking/neuron.py +++ b/src/py/calix/spiking/neuron.py @@ -9,7 +9,7 @@ from dataclasses import dataclass import numpy as np import quantities as pq -from dlens_vx_v2 import sta, halco, hal, hxcomm, lola, logger +from dlens_vx_v3 import sta, halco, hal, hxcomm, lola, logger from calix.common import algorithms, base, synapse, helpers from calix.hagen import neuron_helpers, neuron_leak_bias, neuron_synin, \ @@ -29,10 +29,15 @@ class _CalibrationResultInternal(hagen_neuron.CalibrationResultInternal): v_threshold: np.ndarray = np.empty( halco.NeuronConfigOnDLS.size, dtype=int) + i_syn_exc_coba: np.ndarray = np.zeros( + halco.NeuronConfigOnDLS.size, dtype=int) + i_syn_inh_coba: np.ndarray = np.zeros( + halco.NeuronConfigOnDLS.size, dtype=int) syn_bias_dac: np.ndarray = np.empty( halco.NeuronConfigBlockOnDLS.size, dtype=int) clock_settings: Optional[refractory_period.Settings] = None neuron_configs: Optional[List[hal.NeuronConfig]] = None + use_synin_small_capacitance: bool = False def set_neuron_configs_default( self, membrane_capacitance: Union[int, np.ndarray], @@ -130,6 +135,11 @@ class _CalibrationResultInternal(hagen_neuron.CalibrationResultInternal): anref.input_clock = hal.NeuronBackendConfig.InputClock( self.clock_settings.input_clock[neuron_id]) + atomic_neuron.excitatory_input.i_bias_coba = hal.CapMemCell.Value( + self.i_syn_exc_coba[neuron_id]) + atomic_neuron.inhibitory_input.i_bias_coba = hal.CapMemCell.Value( + self.i_syn_inh_coba[neuron_id]) + return atomic_neuron def to_neuron_calib_result(self) -> NeuronCalibResult: @@ -186,7 +196,7 @@ def calibrate( i_synin_gm: Union[int, np.ndarray] = 500, membrane_capacitance: Union[int, np.ndarray] = 63, refractory_time: pq.quantity.Quantity = 2. * pq.us, - synapse_dac_bias: int = 400, + synapse_dac_bias: int = 600, readout_neuron: Optional[halco.AtomicNeuronOnDLS] = None, holdoff_time: pq.Quantity = 0 * pq.us ) -> NeuronCalibResult: @@ -369,10 +379,6 @@ def calibrate( builder = sta.PlaybackProgramBuilder() builder, initial_config = neuron_helpers.configure_chip( builder, readout_neuron=readout_neuron) - calib_result.i_syn_exc_drop = initial_config[ - halco.CapMemRowOnCapMemBlock.i_bias_synin_exc_drop] - calib_result.i_syn_inh_drop = initial_config[ - halco.CapMemRowOnCapMemBlock.i_bias_synin_inh_drop] calib_result.i_bias_reset = initial_config[ halco.CapMemRowOnCapMemBlock.i_bias_reset] @@ -397,8 +403,7 @@ def calibrate( connection, excitatory_biases=0, inhibitory_biases=0) # calibrate leak near middle of CADC range - # choose 100 since some neurons can not reach higher leak potentials - calibration = neuron_potentials.LeakPotentialCalibration(100) + calibration = neuron_potentials.LeakPotentialCalibration(120) calibration.run(connection, algorithm=algorithms.NoisyBinarySearch()) # decide how to execute synin calib diff --git a/src/py/calix/spiking/neuron_threshold.py b/src/py/calix/spiking/neuron_threshold.py index 2b2f19771e0a1f479ebf7299bcd71043b1b5cef8..3f9611dea5b0a8df9090914a793d14e3b066cd2a 100644 --- a/src/py/calix/spiking/neuron_threshold.py +++ b/src/py/calix/spiking/neuron_threshold.py @@ -2,7 +2,7 @@ from copy import deepcopy from typing import List, Union, Optional import numpy as np import quantities as pq -from dlens_vx_v2 import hal, halco, sta, logger, hxcomm +from dlens_vx_v3 import hal, halco, sta, logger, hxcomm from calix.common import algorithms, base, cadc_helpers, helpers, madc_base from calix.hagen import neuron_helpers @@ -496,7 +496,7 @@ class ThresholdCalibMADC(madc_base.Calibration): builder, { halco.CapMemRowOnCapMemBlock.i_mem_offset: 250, halco.CapMemRowOnCapMemBlock.i_bias_leak: 0, - halco.CapMemRowOnCapMemBlock.v_reset: 450}) + halco.CapMemRowOnCapMemBlock.v_reset: 0}) builder = helpers.wait(builder, constants.capmem_level_off_time) # run program @@ -675,7 +675,7 @@ class ThresholdCalibCADC(base.Calibration): builder, { halco.CapMemRowOnCapMemBlock.i_mem_offset: 70, halco.CapMemRowOnCapMemBlock.i_bias_leak: 0, - halco.CapMemRowOnCapMemBlock.v_reset: 450}) + halco.CapMemRowOnCapMemBlock.v_reset: 0}) builder = helpers.wait(builder, constants.capmem_level_off_time) # set neuron config suitably diff --git a/src/py/calix/spiking/refractory_period.py b/src/py/calix/spiking/refractory_period.py index 4928cb73c8ff6f2ace4e3b50d9e69074b5c074ad..5bb81dd78bc611324ddf28373d4a9e8ecb2b4cbf 100644 --- a/src/py/calix/spiking/refractory_period.py +++ b/src/py/calix/spiking/refractory_period.py @@ -9,7 +9,7 @@ from typing import Optional import numpy as np import quantities as pq -from dlens_vx_v2 import hal +from dlens_vx_v3 import hal # Assume refractory clock frequency yo be unchanged after diff --git a/src/py/calix/spiking/synapse_driver.py b/src/py/calix/spiking/synapse_driver.py index 8813df9eff369ba78b37b0c82c444e6a4b8ad2fe..e000d1068af0ae91ac986596c179df71f43b3ca7 100644 --- a/src/py/calix/spiking/synapse_driver.py +++ b/src/py/calix/spiking/synapse_driver.py @@ -5,7 +5,7 @@ for the usual spiking mode. from typing import Union import numpy as np -from dlens_vx_v2 import hal, halco, sta, hxcomm, logger +from dlens_vx_v3 import hal, halco, sta, hxcomm, logger from calix import constants from calix.common import base, helpers diff --git a/tests/hw/py/connection_setup.py b/tests/hw/py/connection_setup.py index a2b6fac1df9e375998afad20715335926046e557..a0aafa33434a9f0cfdcda928c47853408d8473a7 100644 --- a/tests/hw/py/connection_setup.py +++ b/tests/hw/py/connection_setup.py @@ -3,7 +3,7 @@ from pathlib import Path import pickle import os -from dlens_vx_v2 import sta, hxcomm, logger +from dlens_vx_v3 import sta, hxcomm, logger from calix.common import base import calix.scripts.calix_generate_default_calibration as calib_generator diff --git a/tests/hw/py/test_cadc_assignment.py b/tests/hw/py/test_cadc_assignment.py index 1505f11da30d3f9b15bbe6154cb5746ad92f741d..9cf4a27ab2236df376c7fc41f86f6b58e095574c 100644 --- a/tests/hw/py/test_cadc_assignment.py +++ b/tests/hw/py/test_cadc_assignment.py @@ -8,7 +8,7 @@ changing the leak potential in one neuron after another. import unittest import numpy as np -from dlens_vx_v2 import sta, halco, hal, logger +from dlens_vx_v3 import sta, halco, hal, logger from calix.common import base, cadc, helpers from calix.hagen import neuron_helpers diff --git a/tests/hw/py/test_cadc_calibration.py b/tests/hw/py/test_cadc_calibration.py index 3a51b66b74af7f1752e9a6e8c6ed0ebb22230812..d83d71cf1fb63a6a8f81bf5ebdbf95b9af494dc2 100644 --- a/tests/hw/py/test_cadc_calibration.py +++ b/tests/hw/py/test_cadc_calibration.py @@ -5,7 +5,7 @@ calibration are significantly lower than one expects without calibration. import unittest import numpy as np -from dlens_vx_v2 import sta, halco, hal, logger +from dlens_vx_v3 import sta, halco, hal, logger from calix.common import cadc, cadc_helpers, helpers from calix import constants diff --git a/tests/hw/py/test_connection_setup.py b/tests/hw/py/test_connection_setup.py index b7b10e7c255cf4205a7cfe1ae18da63cc47f1513..c3d3cbab724147c0cdca0233e09bb7b49f7891d9 100644 --- a/tests/hw/py/test_connection_setup.py +++ b/tests/hw/py/test_connection_setup.py @@ -9,7 +9,7 @@ and serializes default calibrations. import unittest import os -from dlens_vx_v2 import logger +from dlens_vx_v3 import logger from connection_setup import ConnectionSetup diff --git a/tests/hw/py/test_correlation.py b/tests/hw/py/test_correlation.py index 994c6f3ee6e020c06acbdc5e1222738a05d586e9..693acec4f3c02a53a54cea8f3a501cb3288aa11e 100644 --- a/tests/hw/py/test_correlation.py +++ b/tests/hw/py/test_correlation.py @@ -10,7 +10,7 @@ from typing import List import numpy as np import quantities as pq -from dlens_vx_v2 import hal, halco, sta, lola, logger +from dlens_vx_v3 import hal, halco, sta, lola, logger from calix.hagen import base, cadc, helpers from calix import constants diff --git a/tests/hw/py/test_hagen_input.py b/tests/hw/py/test_hagen_input.py index cd9b58086a6fd418fc4bec4167be9bd5c1e2bf57..63c5084994c4715b19901267ea7bd68f4cc7387d 100644 --- a/tests/hw/py/test_hagen_input.py +++ b/tests/hw/py/test_hagen_input.py @@ -9,7 +9,7 @@ from typing import Optional import numpy as np -from dlens_vx_v2 import hal, halco, sta, logger +from dlens_vx_v3 import hal, halco, sta, logger from calix.common import base, helpers from calix.hagen import synapse_driver diff --git a/tests/hw/py/test_hagen_multiplication.py b/tests/hw/py/test_hagen_multiplication.py index b638dc54e2d1068d404bc14c1793d60ac5eb89b5..91eee82e8505fe76d372499d10e45b431dd0e1f0 100644 --- a/tests/hw/py/test_hagen_multiplication.py +++ b/tests/hw/py/test_hagen_multiplication.py @@ -8,7 +8,7 @@ import unittest import numpy as np import matplotlib.pyplot as plt -from dlens_vx_v2 import halco, logger +from dlens_vx_v3 import halco, logger from calix.hagen import multiplication import calix.hagen diff --git a/tests/hw/py/test_madc_recorder.py b/tests/hw/py/test_madc_recorder.py index 646db4f6e56e6b9210c3d4a7357b3863967355c8..6f7c104e1ac23d4098661a580feb242f8cf48c91 100644 --- a/tests/hw/py/test_madc_recorder.py +++ b/tests/hw/py/test_madc_recorder.py @@ -7,7 +7,7 @@ import os from calix.common import madc_base -from dlens_vx_v2 import sta, logger +from dlens_vx_v3 import sta, logger from connection_setup import ConnectionSetup diff --git a/tests/hw/py/test_multicompartment.py b/tests/hw/py/test_multicompartment.py index 882cb65af0de0fe0c83bf6ab4cf54264479e100c..7ce3272e34af53f07b541c2c41da0f0ff15ea96c 100644 --- a/tests/hw/py/test_multicompartment.py +++ b/tests/hw/py/test_multicompartment.py @@ -5,7 +5,7 @@ from typing import List import numpy as np import quantities as pq -from dlens_vx_v2 import halco, sta, hal, logger +from dlens_vx_v3 import halco, sta, hal, logger from calix.common import algorithms, base, cadc from calix.hagen import neuron_helpers diff --git a/tests/hw/py/test_neuron_distribution.py b/tests/hw/py/test_neuron_distribution.py index c90b6bc1f74db7f033c40d77627be8e9e826b885..d7e8bd3fff39b142ec019d2beebbe6558acf431b 100644 --- a/tests/hw/py/test_neuron_distribution.py +++ b/tests/hw/py/test_neuron_distribution.py @@ -5,7 +5,7 @@ import numpy as np import scipy.stats import quantities as pq -from dlens_vx_v2 import hal, halco, sta, hxcomm, logger +from dlens_vx_v3 import hal, halco, sta, hxcomm, logger from calix.common import base from calix.hagen import neuron_potentials, neuron_leak_bias, neuron_synin diff --git a/tests/hw/py/test_neuron_integration.py b/tests/hw/py/test_neuron_integration.py index a8447eb3d455544831287a317615ad7999cfd817..a3fe7c615e893ff1cfc0353a39a2121d91fbc020 100644 --- a/tests/hw/py/test_neuron_integration.py +++ b/tests/hw/py/test_neuron_integration.py @@ -10,7 +10,7 @@ import os import numpy as np import quantities as pq -from dlens_vx_v2 import hal, sta, halco, logger, hxcomm +from dlens_vx_v3 import hal, sta, halco, logger, hxcomm from calix.common import base, cadc, cadc_helpers, helpers from calix.hagen import neuron, neuron_helpers @@ -42,7 +42,7 @@ class TestNeuronCalib(ConnectionSetup): def measure_amplitudes( cls, connection: hxcomm.ConnectionHandle, *, - excitatory: bool = True, n_events: int = 10, + excitatory: bool = True, n_events: int = 12, wait_between_events: pq.quantity.Quantity = 1.2 * pq.us, n_runs: int = 30) -> Tuple[np.ndarray, np.ndarray]: """ diff --git a/tests/hw/py/test_neuron_reference_madc.py b/tests/hw/py/test_neuron_reference_madc.py index ea1b4e0ee71056163600f458317a14e1b3c83ae0..df620d2328fa63a78f62668d63ac48815c85f7ef 100644 --- a/tests/hw/py/test_neuron_reference_madc.py +++ b/tests/hw/py/test_neuron_reference_madc.py @@ -7,7 +7,7 @@ the drift of the membrane potentials is not too large. import unittest import numpy as np -from dlens_vx_v2 import halco, sta, logger +from dlens_vx_v3 import halco, sta, logger from calix.common import algorithms, base, helpers from calix.hagen import neuron_synin diff --git a/tests/hw/py/test_neuron_spiking.py b/tests/hw/py/test_neuron_spiking.py index 8496e93088572fd317d7ae7390d0d075679cec99..b8c7bdb9047088ccd8324412c39482260966b3a6 100644 --- a/tests/hw/py/test_neuron_spiking.py +++ b/tests/hw/py/test_neuron_spiking.py @@ -4,7 +4,7 @@ from typing import Optional import numpy as np import quantities as pq -from dlens_vx_v2 import hal, halco, sta, hxcomm, logger +from dlens_vx_v3 import hal, halco, sta, hxcomm, logger from calix.common import base, helpers from calix.hagen import neuron_helpers diff --git a/tests/hw/py/test_neuron_threshold_calibration.py b/tests/hw/py/test_neuron_threshold_calibration.py index 6e4961efb117080ae4fcd51cc1c6db96b741e8d7..00b0095968cc264fd6a1cf2fdacd868a19244e2c 100644 --- a/tests/hw/py/test_neuron_threshold_calibration.py +++ b/tests/hw/py/test_neuron_threshold_calibration.py @@ -3,7 +3,7 @@ import unittest import quantities as pq import numpy as np -from dlens_vx_v2 import hal, halco, sta, logger, hxcomm +from dlens_vx_v3 import hal, halco, sta, logger, hxcomm from calix.common import algorithms, base, cadc, helpers from calix.hagen import neuron, neuron_potentials, neuron_helpers @@ -40,14 +40,10 @@ class NeuronThresholdTest(ConnectionSetup): cadc.calibrate(self.connection) - # Increase i_synin_gm a bit to facilitate spiking. - # Set target_noise to None in order to keep the membrane time - # constant calibrated, and not optimize for noise. - # Set tau_syn in order to have it calibrated and not just configured - # to the minimum possible setting. + # using hagen mode calib: set syn. input bias and tau_syn + # more suitable for spiking operation neuron.calibrate( - self.connection, i_synin_gm=140, target_noise=None, - tau_syn=2 * pq.us) + self.connection, i_synin_gm=300, tau_syn=2 * pq.us) @staticmethod def preconfigure(connection: hxcomm.ConnectionHandle, diff --git a/tests/hw/py/test_stp_calibration.py b/tests/hw/py/test_stp_calibration.py index e4bb6f15a903fcc3c72444950633325d15cb81b0..b762fb4d30d02292d686c035c507429d27b5532a 100644 --- a/tests/hw/py/test_stp_calibration.py +++ b/tests/hw/py/test_stp_calibration.py @@ -2,7 +2,7 @@ import unittest import numpy as np -from dlens_vx_v2 import hal, halco, sta, logger, hxcomm +from dlens_vx_v3 import hal, halco, sta, logger, hxcomm from calix.common import algorithms, base, cadc, synapse, helpers from calix.hagen import neuron_helpers diff --git a/tests/sw/py/mock_connection_setup.py b/tests/sw/py/mock_connection_setup.py index 28f8223ed9bf6c0e3af4ba2ec00f2adc8552da8d..241e496d39a66cdd43377d279ebda44487f162c2 100644 --- a/tests/sw/py/mock_connection_setup.py +++ b/tests/sw/py/mock_connection_setup.py @@ -1,5 +1,5 @@ import unittest -from dlens_vx_v2 import hxcomm +from dlens_vx_v3 import hxcomm class ConnectionSetup(unittest.TestCase): diff --git a/tests/sw/py/test_algorithms.py b/tests/sw/py/test_algorithms.py index 36fcae3b05e5368cecb3fee6d1bb60d07466b0f7..e23106e95ba57d8ad3c594a625078338e1049bcc 100644 --- a/tests/sw/py/test_algorithms.py +++ b/tests/sw/py/test_algorithms.py @@ -2,7 +2,7 @@ import numbers from typing import Optional, Union, ClassVar import unittest import numpy as np -from dlens_vx_v2 import sta, logger +from dlens_vx_v3 import sta, logger from calix.common import algorithms, base diff --git a/tests/sw/py/test_boundary_check.py b/tests/sw/py/test_boundary_check.py index c487ffeb4f9c689250db191157fce3b7f3cf97f2..ce27ba83d47fd113bd9b282ef486fa7a9ec362fe 100644 --- a/tests/sw/py/test_boundary_check.py +++ b/tests/sw/py/test_boundary_check.py @@ -1,7 +1,7 @@ import unittest import numpy as np -from dlens_vx_v2 import logger +from dlens_vx_v3 import logger from calix.common import base, boundary_check diff --git a/tests/sw/py/test_generic_algorithm_calibration.py b/tests/sw/py/test_generic_algorithm_calibration.py index 7c8ee7539b3181f68e5809a8eaa9770ccd0eec20..9f73a42f4cdc0a0bf4357f4e410b1603253b3aab 100644 --- a/tests/sw/py/test_generic_algorithm_calibration.py +++ b/tests/sw/py/test_generic_algorithm_calibration.py @@ -3,7 +3,7 @@ import pkgutil import unittest from typing import Callable, Set, Type -from dlens_vx_v2 import logger +from dlens_vx_v3 import logger import calix from calix.common import exceptions from calix.common.base import Algorithm, Calibration diff --git a/tests/sw/py/test_refractory_period.py b/tests/sw/py/test_refractory_period.py index ffaa3024af3f0dc97cf7a7d153c227ae5b24f64a..f5915a99a79febff321dcf2b8f98696e4f4d527b 100644 --- a/tests/sw/py/test_refractory_period.py +++ b/tests/sw/py/test_refractory_period.py @@ -3,7 +3,7 @@ from itertools import product import numpy as np import quantities as pq -from dlens_vx_v2 import halco, hal, logger +from dlens_vx_v3 import halco, hal, logger from calix.spiking.refractory_period import calculate_settings, Settings, \ _clock_period, _clock_base_frequency diff --git a/wscript b/wscript index 3bae625fd52d53f61638e1c0c7dec833c4c06494..b5d6a039034647480d683b61a315b5622b073086 100644 --- a/wscript +++ b/wscript @@ -30,7 +30,7 @@ def build(bld): bld(name='calix_pylib', features='py pylint pycodestyle', source=bld.path.ant_glob('src/py/**/*.py'), - use='dlens_vx_v2', + use='dlens_vx_v3', install_path='${PREFIX}/lib', install_from='src/py', relative_trick=True,