diff --git a/crates/applications/stacked_cores/scripts/stacked_cores_40xx_db.py b/crates/applications/stacked_cores/scripts/stacked_cores_40xx_db.py index 7f5e1e5..cfde14f 100755 --- a/crates/applications/stacked_cores/scripts/stacked_cores_40xx_db.py +++ b/crates/applications/stacked_cores/scripts/stacked_cores_40xx_db.py @@ -158,6 +158,23 @@ class SimParams46(SimParams): def t_mid(self) -> float: return 4e-9 +class SimParams47(SimParams): + @property + def run(self) -> str: + return "47" + + @property + def is_inverter(self) -> bool: + return False + + @property + def t_last(self) -> float: + return 5e-9 + + @property + def t_mid(self) -> float: + return 4e-9 + sims = [ # params, human friendly db name, normalization @@ -304,6 +321,18 @@ sims = [ (SimParams46(7, 1, 600, "2e10"), None, 20000), (SimParams46(7, 1, 600, _3e10), None, 20000), (SimParams46(4, 2, 600, "2e10"), None, 20000), + + (SimParams47(5, 1, 400, "5e9"), None, 20000), + (SimParams47(5, 1, 400, "8e9"), None, 20000), + (SimParams47(5, 1, 400, "1e10"), None, 20000), + (SimParams47(5, 1, 400, "2e10"), None, 20000), + (SimParams47(5, 1, 400, "4e10"), None, 20000), + (SimParams47(7, 1, 600, "5e9"), None, 20000), + (SimParams47(7, 1, 600, "8e9"), None, 20000), + (SimParams47(7, 1, 600, "1e10"), None, 20000), + (SimParams47(7, 1, 600, "2e10"), None, 20000), + (SimParams47(7, 1, 600, _3e10), None, 20000), + (SimParams47(4, 2, 600, "2e10"), None, 20000), ] measurements = { real.machine_name: [human, norm, None, None] for (real, human, norm) in sims } @@ -3738,4 +3767,129 @@ Piecewise( ) """) +set_meas("47-0.0004rad-5coupling-3_1_winding-5e9-drive", """ +Piecewise( + [ + [ -16759, 1164 ], # -1.00, M1=-13497 + [ 16712, 2756 ], # 1.00, M1=-7528 + ] +) +""") + +set_meas("47-0.0004rad-5coupling-3_1_winding-8e9-drive", """ +Piecewise( + [ + [ -16828, -8107 ], # -1.00, M1=-12624 + [ 16772, -5884 ], # 1.00, M1=-4215 + ] +) +""") + +set_meas("47-0.0004rad-5coupling-3_1_winding-1e10-drive", """ +Piecewise( + [ + [ -16854, -14076 ], # -1.00, M1=-11998 + [ -16545, -14068 ], # -0.35, M1=-11961 + [ -7375, -13452 ], # -0.20, M1=-9609 + [ 4140, -12512 ], # -0.10, M1=-6400 + [ 9313, -12046 ], # 0.00, M1=-5027 + [ 11841, -11810 ], # 0.10, M1=-4377 + [ 14247, -11582 ], # 0.20, M1=-3766 + [ 16258, -11398 ], # 0.35, M1=-3299 + [ 16786, -11358 ], # 1.00, M1=-3214 + ] +) +""") + +set_meas("47-0.0004rad-5coupling-3_1_winding-2e10-drive", """ +Piecewise( + [ + [ -16920, -16586 ], # -1.00, M1=-10963 + [ 16827, -15737 ], # 1.00, M1=-1168 + ] +) +""") + +set_meas("47-0.0004rad-5coupling-3_1_winding-4e10-drive", """ +Piecewise( + [ + [ -16987, -14442 ], # -1.00, M1=-8976 + [ 16829, -13443 ], # 1.00, M1= 421 + ] +) +""") + +set_meas("47-0.00059999997rad-7coupling-3_1_winding-5e9-drive", """ +Piecewise( + [ + [ -16763, 2041 ], # -1.00, M1=-13759 + [ 16734, 3545 ], # 1.00, M1=-8164 + ] +) +""") + +set_meas("47-0.00059999997rad-7coupling-3_1_winding-8e9-drive", """ +Piecewise( + [ + [ -16829, -6479 ], # -1.00, M1=-12766 + [ -14123, -6313 ], # -0.35, M1=-12124 + [ -1242, -5418 ], # -0.20, M1=-8708 + [ 5339, -4994 ], # -0.10, M1=-7104 + [ 8141, -4824 ], # 0.00, M1=-6461 + [ 10321, -4693 ], # 0.10, M1=-5972 + [ 12538, -4563 ], # 0.20, M1=-5485 + [ 15644, -4382 ], # 0.35, M1=-4806 + [ 16799, -4325 ], # 1.00, M1=-4619 + ] +) +""") + +set_meas("47-0.00059999997rad-7coupling-3_1_winding-1e10-drive", """ +Piecewise( + [ + [ -16852, -12074 ], # -1.00, M1=-12070 + [ -16512, -12067 ], # -0.35, M1=-12033 + [ -5580, -11331 ], # -0.20, M1=-9189 + [ 4228, -10606 ], # -0.10, M1=-6584 + [ 8721, -10256 ], # 0.00, M1=-5425 + [ 11561, -10031 ], # 0.10, M1=-4723 + [ 14334, -9799 ], # 0.20, M1=-4037 + [ 16256, -9638 ], # 0.35, M1=-3580 + [ 16813, -9600 ], # 1.00, M1=-3486 + ] +) +""") + +set_meas("47-0.00059999997rad-7coupling-3_1_winding-2e10-drive", """ +Piecewise( + [ + [ -16902, -16514 ], # -1.00, M1=-10719 + [ -16701, -16513 ], # -0.20, M1=-10675 + [ -5648, -16369 ], # -0.10, M1=-7360 + [ 8575, -15470 ], # 0.00, M1=-3263 + [ 15217, -14725 ], # 0.10, M1=-1597 + [ 16344, -14580 ], # 0.20, M1=-1314 + [ 16843, -14510 ], # 1.00, M1=-1188 + ] +) +""") + +set_meas("47-0.00059999997rad-7coupling-3_1_winding-30000001024e0-drive", """ +Piecewise( + [ + [ -16932, -14525 ], # -1.00, M1=-9579 + [ 16845, -12288 ], # 1.00, M1= 63 + ] +) +""") + +set_meas("47-0.00059999997rad-4coupling-5_1_winding-2e10-drive", """ +Piecewise( + [ + [ -16785, -15047 ], # -1.00, M1=-12562 + [ 16793, -12591 ], # 1.00, M1=-6601 + ] +) +""") + if __name__ == '__main__': main() diff --git a/crates/applications/stacked_cores/src/main.rs b/crates/applications/stacked_cores/src/main.rs index 0e790e9..8c4e440 100644 --- a/crates/applications/stacked_cores/src/main.rs +++ b/crates/applications/stacked_cores/src/main.rs @@ -1118,6 +1118,25 @@ fn drive_map_3stack_with_init_inv_then_buff(amp0: f32) -> [[ClockState; 3]; 5] { ] } +#[allow(unused)] +fn drive_map_3stack_with_init_buff_cascade(amp0: f32) -> [[ClockState; 3]; 5] { + use ClockState as C; + // amplitudes are inverted from what you would expect. + // hold(-1) puts the core into a positive M + [ + // init S0; charge S1 negative, S2 *positive* + [C::hold(-amp0), C::hold_high(), C::hold_low()], + // let the cores settle; open S1 for receive + [C::release(-amp0), C::release_high(), C::hold_low()], + // write S0 -> S1 (pushes S1 from neg -> pos) + [C::hold_high(), C::float(), C::hold_low()], + // open S2 for receive + [C::hold_high(), C::float(), C::release_low()], + // write S1 -> S2 by clearing whatever *wasn't* cleared (pushes S2 pos -> neg) + [C::hold_high(), C::hold_low(), C::float()], + ] +} + #[allow(unused)] fn drive_map_4stack_with_init4(amp0: f32, amp1: f32, amp2: f32, amp3: f32) -> [[ClockState; 4]; 3] { use ClockState as C; @@ -4876,7 +4895,7 @@ fn main() { } } - if true { + if false { let p46xx = params_v2 .with_clock_phase_duration(ps(1000)) .with_clock_decay(ps(50)) @@ -4938,6 +4957,69 @@ fn main() { } } } + + if true { + let p47xx = params_v2 + .with_clock_phase_duration(ps(1000)) + .with_clock_decay(ps(50)) + .with_ctl_conductivity(5e2) + .with_coupling_conductivity(5e3) + ; + for init_set in [ + &[ + // establish the domain/range + 1.00, + -1.00, + ][..], + &[ + 0.00, + 0.20, + -0.20, + 0.10, + -0.10, + 0.35, + -0.35, + ][..], + ] { + for (coupling_loops, s0_loops, s_major, cur_flt) in [ + (5, 1, um(400), 1e10), + (7, 1, um(600), 8e9), + (7, 1, um(600), 1e10), + (7, 1, um(600), 2e10), + (7, 1, um(600), 5e9), + (7, 1, um(600), 3e10), + (5, 1, um(400), 5e9), + (4, 2, um(600), 2e10), + (5, 1, um(400), 8e9), + (5, 1, um(400), 2e10), + (5, 1, um(400), 4e10), + ] { + for &init_flt in init_set { + // coupling loops (M0 -> M1) + (M1 -> M2) + control slots + let slots_per_asym = 2*s0_loops; + let net_slots = 2*slots_per_asym + 1; + let mut params = p47xx + .with_s_major(s_major) + .with_coupling_loops(coupling_loops) + .with_input_magnitude(cur_flt) + // control loops + .with_coupling(0, 0, 0, net_slots, CouplingMethod::Control) + .with_coupling(1, 1, 0, net_slots, CouplingMethod::Control) + .with_coupling(2, 2, 0, net_slots, CouplingMethod::Control) + ; + + params = couple_asymmetric_buffer(¶ms, 0 /* sender core */, s0_loops, 1 /* slot offset */, net_slots); + params = couple_asymmetric_buffer(¶ms, 1 /* sender core */, s0_loops, 1 + slots_per_asym /* slot offset */, net_slots); + let name = asymmetric_inverter_name(¶ms, "47", 2*s0_loops + 1, init_flt); + run_sim( + &name, + drive_map_3stack_with_init_buff_cascade(init_flt), + params, + ); + } + } + } + } }