def test_L1_detour_at_side_switch_usage(self): """ [155] 191 [223] 224 225 x226x {227} test detour and predecessor settings at the edge of a wafer """ pylogging.set_loglevel(pylogging.get("marocco"), pylogging.LogLevel.TRACE) pylogging.set_loglevel(pylogging.get("Calibtic"), pylogging.LogLevel.ERROR) self.marocco.persist = '' # or add test suite TestWithRuntime? runtime = Runtime(self.marocco.default_wafer) pynn.setup(marocco=self.marocco, marocco_runtime=runtime) settings = pysthal.Settings.get() settings.synapse_switches.max_switches_per_column_per_side = 1 settings.crossbar_switches.max_switches_per_row = 1 source = pynn.Population(1, pynn.IF_cond_exp, {}) target1 = pynn.Population(1, pynn.IF_cond_exp, {}) target2 = pynn.Population(1, pynn.IF_cond_exp, {}) proj = pynn.Projection( source, target1, pynn.AllToAllConnector(weights=1.)) proj = pynn.Projection( source, target2, pynn.AllToAllConnector(weights=1.)) source_hicann = C.HICANNOnWafer(Enum(227)) target1_hicann = C.HICANNOnWafer(Enum(155)) target2_hicann = C.HICANNOnWafer(Enum(225)) self.marocco.manual_placement.on_hicann(source, source_hicann) self.marocco.manual_placement.on_hicann(target1, target1_hicann) self.marocco.manual_placement.on_hicann(target2, target2_hicann) disabled_hicanns = [226, 263] wafer = self.marocco.default_wafer self.marocco.defects.set(pyredman.Wafer(runtime.wafer().index())) for hicann in C.iter_all(C.HICANNOnWafer): if hicann.toEnum().value() in disabled_hicanns: self.marocco.defects.wafer().hicanns().disable(C.HICANNGlobal(hicann, wafer)) continue pynn.run(0) pynn.end() for hicann in runtime.wafer().getAllocatedHicannCoordinates(): h = runtime.wafer()[hicann] print(hicann, h.check()) self.assertEqual(h.check(), "")
# import sys # sys.exit(0) ### ====================== PERFORM MAPPING =========================== ### seed = 0 marocco.l1_routing.shuffle_switches_seed(seed) marocco.skip_mapping = False marocco.backend = PyMarocco.None sim.reset() sim.run(duration) ### ==================== DO A FIRST HARDWARE RUN ======================= ### wafer = runtime.wafer() hicanns_in_use = wafer.getAllocatedHicannCoordinates() print("\n\n\n\n") print(hicanns_in_use) # for p in mid_pops: # if p.hicann is None: # continue # for hicann in p.hicann: # if hicann not in hicanns_in_use: # continue # _BSS_set_hicann_sthal_params(wafer, hicann, 1023) for hicann in hicanns_in_use:
HICANN.GmaxDiv(gmax_div)) # don't change values below for ii in xrange(fgs.getNoProgrammingPasses()): cfg = fgs.getFGConfig(Enum(ii)) cfg.fg_biasn = 0 cfg.fg_bias = 0 fgs.setFGConfig(Enum(ii), cfg) for block in iter_all(FGBlockOnHICANN): fgs.setShared(block, HICANN.shared_parameter.V_dllres, 275) fgs.setShared(block, HICANN.shared_parameter.V_ccas, 800) # call at least once set_sthal_params(runtime.wafer(), gmax=1023, gmax_div=2) # ——— configure hardware —————————————————————————————————————————————————————— for proj in projections: proj_items = runtime.results().synapse_routing.synapses().find(proj) for proj_item in proj_items: synapse = proj_item.hardware_synapse() proxy = runtime.wafer()[synapse.toHICANNOnWafer()].synapses[synapse] proxy.weight = HICANN.SynapseWeight(15) marocco.skip_mapping = True marocco.backend = PyMarocco.Hardware fgs = runtime.wafer()[hicann].floating_gates
fgs.setShared(block, HICANN.shared_parameter.V_gmax1, gmax) fgs.setShared(block, HICANN.shared_parameter.V_gmax2, gmax) fgs.setShared(block, HICANN.shared_parameter.V_gmax3, gmax) for block in C.iter_all(C.FGBlockOnHICANN): fgs.setShared(block, HICANN.shared_parameter.V_dllres, 275) fgs.setShared(block, HICANN.shared_parameter.V_ccas, 800) for driver in C.iter_all(C.SynapseDriverOnHICANN): for row in C.iter_all(C.RowOnSynapseDriver): wafer[hicann].synapses[driver][row].set_gmax_div( C.left, gmax_div) wafer[hicann].synapses[driver][row].set_gmax_div( C.right, gmax_div) set_sthal_params(runtime.wafer(), gmax=1023, gmax_div=1) # ——— configure hardware —————————————————————————————————————————————————————— marocco.skip_mapping = True marocco.backend = PyMarocco.Hardware # Full configuration during first step marocco.hicann_configurator = PyMarocco.HICANNv4Configurator for digital_weight in [5, 10, 15]: logger.info("running measurement with digital weight {}".format(digital_weight)) for proj in projections: proj_item, = runtime.results().synapse_routing.synapses().find(proj) synapse = proj_item.hardware_synapse() proxy = runtime.wafer()[synapse.toHICANNOnWafer()].synapses[synapse]
wafer[hicann].synapses[driver][row].set_gmax_div( C.right, gmax_div) # don't change values below for ii in xrange(fgs.getNoProgrammingPasses()): cfg = fgs.getFGConfig(C.Enum(ii)) cfg.fg_biasn = 0 cfg.fg_bias = 0 fgs.setFGConfig(C.Enum(ii), cfg) for block in C.iter_all(C.FGBlockOnHICANN): fgs.setShared(block, HICANN.shared_parameter.V_dllres, 275) fgs.setShared(block, HICANN.shared_parameter.V_ccas, 800) # call at least once set_sthal_params(runtime.wafer(), gmax=1023, gmax_div=1) # ——— configure hardware —————————————————————————————————————————————————————— for proj in projections: proj_item, = runtime.results().synapse_routing.synapses().find(proj) synapse = proj_item.hardware_synapse() proxy = runtime.wafer()[synapse.toHICANNOnWafer()].synapses[synapse] proxy.weight = HICANN.SynapseWeight(15) marocco.skip_mapping = True marocco.backend = PyMarocco.Hardware # Full configuration during first step marocco.hicann_configurator = pysthal.ParallelHICANNv4Configurator() for n, spike_times in enumerate([[100,110], [200,210], [300,310]]):
wafer[hicann].synapses[driver][row].set_gmax_div( C.right, gmax_div) # don't change values below for ii in xrange(fgs.getNoProgrammingPasses()): cfg = fgs.getFGConfig(C.Enum(ii)) cfg.fg_biasn = 0 cfg.fg_bias = 0 fgs.setFGConfig(C.Enum(ii), cfg) for block in C.iter_all(C.FGBlockOnHICANN): fgs.setShared(block, HICANN.shared_parameter.V_dllres, 275) fgs.setShared(block, HICANN.shared_parameter.V_ccas, 800) # call at least once set_sthal_params(runtime.wafer(), gmax=1023, gmax_div=1) # ——— configure hardware —————————————————————————————————————————————————————— for proj in projections: proj_item, = runtime.results().synapse_routing.synapses().find(proj) synapse = proj_item.hardware_synapse() proxy = runtime.wafer()[synapse.toHICANNOnWafer()].synapses[synapse] proxy.weight = HICANN.SynapseWeight(15) marocco.skip_mapping = True marocco.backend = PyMarocco.Hardware # Full configuration during first step marocco.hicann_configurator = pysthal.ParallelHICANNv4Configurator() fgs = runtime.wafer()[hicann].floating_gates