diff --git a/crates/applications/stacked_cores/scripts/stacked_cores_52xx.py b/crates/applications/stacked_cores/scripts/stacked_cores_52xx.py index b247560..4ff1b05 100755 --- a/crates/applications/stacked_cores/scripts/stacked_cores_52xx.py +++ b/crates/applications/stacked_cores/scripts/stacked_cores_52xx.py @@ -11,7 +11,7 @@ from stacked_cores_52xx_db import DB ## CONSTANTS/CONFIGURATION # list of sims to extract details for -PREFIXES = { "52", "53", "54", "55", "56", "57", "58" } +PREFIXES = { "52", "53", "54", "55", "56", "57", "58", "59" } def times_of_interest(sim_name: str) -> list: # could be more intelligent, extracting e.g. the clock duration from the name @@ -29,6 +29,10 @@ def times_of_interest(sim_name: str) -> list: return [4e-9, 6e-9] if sim_name.startswith("58-"): return [4e-9, 6e-9] + if sim_name.startswith("59-buf-inner_input-"): + return [2e-9, 4e-9] + if sim_name.startswith("59-buf-edge_input-"): + return [4e-9, 6e-9] ## USER-FACING FUNCTIONS diff --git a/crates/applications/stacked_cores/scripts/stacked_cores_52xx_db.py b/crates/applications/stacked_cores/scripts/stacked_cores_52xx_db.py index 669bea8..fd47174 100644 --- a/crates/applications/stacked_cores/scripts/stacked_cores_52xx_db.py +++ b/crates/applications/stacked_cores/scripts/stacked_cores_52xx_db.py @@ -3076,4 +3076,244 @@ DB = { MeasRow(6e-09, [-30158, -12074, 14459, -17634, 5200, -30153]), ], }), + '59-buf-edge_input-0.0004rad-2000ctl_cond-20000coupling_cond-2000ps-100ps-6ctl-6coupling-1_1_5_1_winding-5e9-drive-': ParameterizedMeas({ + (-1.000, 1.000,): [ + MeasRow(4e-09, [-17310, -21348, -21214, 16433]), + MeasRow(6e-09, [-28793, -17980, -10178, -28773]), + ], + ( 0.000, 0.000,): [ + MeasRow(4e-09, [ 950, -21396, -21396, 956]), + MeasRow(6e-09, [-28776, -16982, -16979, -28778]), + ], + ( 0.050, -0.050,): [ + MeasRow(4e-09, [ 2222, -21398, -21396, 454]), + MeasRow(6e-09, [-28776, -16900, -16968, -28778]), + ], + ( 0.100, -0.100,): [ + MeasRow(4e-09, [ 6829, -21402, -21394, -9]), + MeasRow(6e-09, [-28773, -15941, -17022, -28778]), + ], + ( 0.150, -0.150,): [ + MeasRow(4e-09, [ 12509, -21403, -21388, -5512]), + MeasRow(6e-09, [-28774, -13652, -17365, -28779]), + ], + ( 0.200, -0.200,): [ + MeasRow(4e-09, [ 15461, -21356, -21339, -12663]), + MeasRow(6e-09, [-28768, -11439, -17744, -28783]), + ], + ( 0.250, -0.250,): [ + MeasRow(4e-09, [ 15976, -21303, -21349, -16597]), + MeasRow(6e-09, [-28774, -10481, -17942, -28792]), + ], + ( 0.300, -0.300,): [ + MeasRow(4e-09, [ 16249, -21289, -21359, -17060]), + MeasRow(6e-09, [-28773, -10338, -17967, -28788]), + ], + ( 1.000, -1.000,): [ + MeasRow(4e-09, [ 16435, -21213, -21349, -17310]), + MeasRow(6e-09, [-28771, -10181, -17980, -28793]), + ], + }), + '59-buf-edge_input-0.0004rad-2000ctl_cond-20000coupling_cond-2000ps-100ps-6ctl-6coupling-5_1_1_1_winding-5e9-drive-': ParameterizedMeas({ + (-1.000, 1.000,): [ + MeasRow(4e-09, [-21117, -21589, -17443, 16645]), + MeasRow(6e-09, [-28784, -16744, 14743, -28762]), + ], + ( 0.000, 0.000,): [ + MeasRow(4e-09, [ 12628, -19185, -19187, 12627]), + MeasRow(6e-09, [-28762, 7051, 7041, -28764]), + ], + ( 0.050, -0.050,): [ + MeasRow(4e-09, [ 13975, -18770, -19664, 10139]), + MeasRow(6e-09, [-28766, 8660, 4681, -28766]), + ], + ( 0.100, -0.100,): [ + MeasRow(4e-09, [ 14538, -18561, -19632, 3780]), + MeasRow(6e-09, [-28767, 9980, 82, -28765]), + ], + ( 0.150, -0.150,): [ + MeasRow(4e-09, [ 15013, -18378, -19600, -2721]), + MeasRow(6e-09, [-28766, 11184, -4484, -28765]), + ], + ( 0.200, -0.200,): [ + MeasRow(4e-09, [ 15425, -18218, -19574, -9200]), + MeasRow(6e-09, [-28766, 12293, -8964, -28766]), + ], + ( 0.250, -0.250,): [ + MeasRow(4e-09, [ 15765, -18076, -19585, -15553]), + MeasRow(6e-09, [-28766, 13282, -13227, -28767]), + ], + ( 0.300, -0.300,): [ + MeasRow(4e-09, [ 15929, -17867, -20574, -19492]), + MeasRow(6e-09, [-28765, 13867, -16131, -28776]), + ], + ( 1.000, -1.000,): [ + MeasRow(4e-09, [ 16643, -17441, -21590, -21119]), + MeasRow(6e-09, [-28761, 14738, -16745, -28787]), + ], + }), + '59-buf-edge_input-0.0004rad-2000ctl_cond-20000coupling_cond-2000ps-100ps-8ctl-8coupling-1_1_3_1_winding-5e9-drive-': ParameterizedMeas({ + (-1.000, 1.000,): [ + MeasRow(4e-09, [-17716, -21034, -20580, 16410]), + MeasRow(6e-09, [-29662, -17771, -6331, -29649]), + ], + ( 0.000, 0.000,): [ + MeasRow(4e-09, [ 3383, -20950, -20951, 3518]), + MeasRow(6e-09, [-29650, -15491, -15377, -29653]), + ], + ( 0.050, -0.050,): [ + MeasRow(4e-09, [ 9243, -20956, -20948, 731]), + MeasRow(6e-09, [-29647, -13121, -16690, -29654]), + ], + ( 0.100, -0.100,): [ + MeasRow(4e-09, [ 14205, -20947, -20935, -2111]), + MeasRow(6e-09, [-29648, -10775, -16982, -29656]), + ], + ( 0.150, -0.150,): [ + MeasRow(4e-09, [ 15422, -20859, -20856, -11065]), + MeasRow(6e-09, [-29645, -8271, -17414, -29659]), + ], + ( 0.200, -0.200,): [ + MeasRow(4e-09, [ 15862, -20764, -20923, -16860]), + MeasRow(6e-09, [-29649, -6809, -17704, -29668]), + ], + ( 0.250, -0.250,): [ + MeasRow(4e-09, [ 16149, -20736, -20982, -17429]), + MeasRow(6e-09, [-29649, -6602, -17741, -29663]), + ], + ( 0.300, -0.300,): [ + MeasRow(4e-09, [ 16203, -20711, -20982, -17516]), + MeasRow(6e-09, [-29648, -6543, -17747, -29663]), + ], + ( 1.000, -1.000,): [ + MeasRow(4e-09, [ 16410, -20579, -21035, -17715]), + MeasRow(6e-09, [-29647, -6333, -17766, -29667]), + ], + }), + '59-buf-inner_input-0.0004rad-2000ctl_cond-20000coupling_cond-2000ps-100ps-6ctl-6coupling-1_1_5_1_winding-5e9-drive-': ParameterizedMeas({ + (-1.000, 1.000,): [ + MeasRow(2e-09, [-16780, -16945, 16657, -16468]), + MeasRow(4e-09, [-12343, -28758, -28755, -3232]), + ], + ( 0.000, 0.000,): [ + MeasRow(2e-09, [-16769, 1852, 1873, -16769]), + MeasRow(4e-09, [ -7850, -28756, -28757, -7850]), + ], + ( 0.050, -0.050,): [ + MeasRow(2e-09, [-16772, 3137, 733, -16766]), + MeasRow(4e-09, [ -7565, -28757, -28757, -8092]), + ], + ( 0.100, -0.100,): [ + MeasRow(2e-09, [-16775, 4025, 75, -16764]), + MeasRow(4e-09, [ -7376, -28756, -28757, -8240]), + ], + ( 0.150, -0.150,): [ + MeasRow(2e-09, [-16777, 4971, -619, -16761]), + MeasRow(4e-09, [ -7174, -28756, -28757, -8395]), + ], + ( 0.200, -0.200,): [ + MeasRow(2e-09, [-16780, 6453, -1990, -16757]), + MeasRow(4e-09, [ -6827, -28756, -28757, -8682]), + ], + ( 0.250, -0.250,): [ + MeasRow(2e-09, [-16785, 8458, -4049, -16753]), + MeasRow(4e-09, [ -6326, -28754, -28757, -9111]), + ], + ( 0.300, -0.300,): [ + MeasRow(2e-09, [-16787, 10431, -6151, -16747]), + MeasRow(4e-09, [ -5802, -28757, -28756, -9566]), + ], + ( 1.000, -1.000,): [ + MeasRow(2e-09, [-16465, 16655, -16949, -16786]), + MeasRow(4e-09, [ -3209, -28755, -28758, -12355]), + ], + }), + '59-buf-inner_input-0.0004rad-2000ctl_cond-20000coupling_cond-2000ps-100ps-6ctl-6coupling-5_1_1_1_winding-5e9-drive-': ParameterizedMeas({ + (-1.000, 1.000,): [ + MeasRow(2e-09, [ -2358, -14791, 16965, -16583]), + MeasRow(4e-09, [ 6446, -28758, -28749, 16836]), + ], + ( 0.000, 0.000,): [ + MeasRow(2e-09, [-17373, 11619, 11663, -17397]), + MeasRow(4e-09, [ 15194, -28759, -28760, 15194]), + ], + ( 0.050, -0.050,): [ + MeasRow(2e-09, [-17568, 12482, 9712, -16985]), + MeasRow(4e-09, [ 15466, -28757, -28758, 14239]), + ], + ( 0.100, -0.100,): [ + MeasRow(2e-09, [-17687, 13072, 7548, -16478]), + MeasRow(4e-09, [ 15618, -28756, -28759, 12941]), + ], + ( 0.150, -0.150,): [ + MeasRow(2e-09, [-17654, 13618, 5664, -15972]), + MeasRow(4e-09, [ 15794, -28755, -28760, 11834]), + ], + ( 0.200, -0.200,): [ + MeasRow(2e-09, [-17572, 14052, 4345, -15546]), + MeasRow(4e-09, [ 15945, -28754, -28758, 11096]), + ], + ( 0.250, -0.250,): [ + MeasRow(2e-09, [-17492, 14404, 3281, -15119]), + MeasRow(4e-09, [ 16054, -28754, -28759, 10566]), + ], + ( 0.300, -0.300,): [ + MeasRow(2e-09, [-17417, 14713, 2217, -14462]), + MeasRow(4e-09, [ 16143, -28754, -28759, 10230]), + ], + ( 1.000, -1.000,): [ + MeasRow(2e-09, [-16582, 16963, -14771, -2430]), + MeasRow(4e-09, [ 16840, -28747, -28759, 6390]), + ], + }), + '59-buf-inner_input-0.0004rad-2000ctl_cond-20000coupling_cond-2000ps-100ps-8ctl-8coupling-1_1_3_1_winding-5e9-drive-': ParameterizedMeas({ + (-1.000, 1.000,): [ + MeasRow(2e-09, [-17100, -17453, 16522, -16381]), + MeasRow(4e-09, [-10910, -29628, -29627, 5065]), + ], + ( 0.000, 0.000,): [ + MeasRow(2e-09, [-16833, 3190, 3244, -16834]), + MeasRow(4e-09, [ -2084, -29627, -29627, -2168]), + ], + ( 0.020, -0.020,): [ + MeasRow(2e-09, [-16835, 3976, 2482, -16832]), + MeasRow(4e-09, [ -1727, -29627, -29627, -2487]), + ], + ( 0.050, -0.050,): [ + MeasRow(2e-09, [-16838, 5006, 1563, -16830]), + MeasRow(4e-09, [ -1270, -29627, -29627, -2857]), + ], + ( 0.070, -0.070,): [ + MeasRow(2e-09, [-16839, 5506, 1161, -16829]), + MeasRow(4e-09, [ -1054, -29628, -29627, -3020]), + ], + ( 0.100, -0.100,): [ + MeasRow(2e-09, [-16841, 6163, 670, -16827]), + MeasRow(4e-09, [ -776, -29628, -29627, -3221]), + ], + ( 0.120, -0.120,): [ + MeasRow(2e-09, [-16842, 6590, 354, -16826]), + MeasRow(4e-09, [ -596, -29627, -29627, -3350]), + ], + ( 0.150, -0.150,): [ + MeasRow(2e-09, [-16845, 7319, -240, -16824]), + MeasRow(4e-09, [ -284, -29627, -29627, -3588]), + ], + ( 0.200, -0.200,): [ + MeasRow(2e-09, [-16849, 9050, -1940, -16820]), + MeasRow(4e-09, [ 485, -29625, -29627, -4256]), + ], + ( 0.250, -0.250,): [ + MeasRow(2e-09, [-16854, 11030, -4077, -16815]), + MeasRow(4e-09, [ 1383, -29628, -29627, -5099]), + ], + ( 0.300, -0.300,): [ + MeasRow(2e-09, [-16857, 12678, -6176, -16811]), + MeasRow(4e-09, [ 2169, -29628, -29626, -5945]), + ], + ( 1.000, -1.000,): [ + MeasRow(2e-09, [-16379, 16518, -17460, -17104]), + MeasRow(4e-09, [ 5102, -29626, -29628, -10949]), + ], + }), } \ No newline at end of file diff --git a/crates/applications/stacked_cores/src/main.rs b/crates/applications/stacked_cores/src/main.rs index 3d93163..bf79c1b 100644 --- a/crates/applications/stacked_cores/src/main.rs +++ b/crates/applications/stacked_cores/src/main.rs @@ -1352,15 +1352,29 @@ fn drive_map_or_gate(amp0: f32, amp1: f32) -> [[ClockState; 4]; 4] { #[allow(unused)] -fn drive_map_buf_53(amp0: f32, amp1: f32) -> [[ClockState; 4]; 2] { +fn drive_map_complementary_buf_center_inputs_53(amp0: f32, amp1: f32) -> [[ClockState; 4]; 2] { use ClockState as C; // amplitudes are inverted from what you would expect. // hold(-1) puts the core into a positive M [ // init S1 pos, S2 pos; charge S0 neg, S3 neg - [C::release_high(), C::release(-amp0), C::release(-amp1), C::release_high()], + [C::release_high(), C::release(-amp0), C::release(-amp1), C::release_high(),], // clear S1 -> S0, S2 -> S3 - [C::float(), C::hold_high(), C::hold_high(), C::float(), ], + [C::float(), C::hold_high(), C::hold_high(), C::float(), ], + ] +} + +#[allow(unused)] +fn drive_map_complementary_buf_edge_inputs_59(amp0: f32, amp1: f32) -> [[ClockState; 4]; 3] { + use ClockState as C; + // amplitudes are inverted from what you would expect. + // hold(-1) puts the core into a positive M + [ + // init S0 pos, S3 pos; charge S1 neg, S2 neg + [C::hold(-amp0), C::hold_high(), C::hold_high(), C::hold(-amp1), ], + [C::release(-amp0), C::release_high(), C::release_high(), C::release(-amp1),], + // clear S0 -> S1, S3 -> S2 + [C::hold_high(), C::float(), C::float(), C::hold_high(), ], ] } @@ -6145,7 +6159,7 @@ fn main() { }; run_sim( &name, - drive_map_buf_53(init_flt_a, init_flt_b), + drive_map_complementary_buf_center_inputs_53(init_flt_a, init_flt_b), params, ); } @@ -6579,7 +6593,7 @@ fn main() { } } - if true { + if false { for init_set in [ &[ // establish rough domain/range @@ -6737,6 +6751,143 @@ fn main() { } } } + + if true { + for init_set in [ + &[ + // establish rough domain/range + ( 1.00, -1.00), + (-1.00, 1.00), // technically extraneous + ][..], + &[ + ( 0.00, 0.00), + ( 0.30, -0.30), + ( 0.20, -0.20), + ( 0.10, -0.10), + // (-1.00, -1.00), // uninitialized case + ][..], + &[ + // negative side + // (-0.10, 0.10), + // (-0.20, 0.20), + // (-0.25, 0.25), + // (-0.05, 0.05), + // (-0.15, 0.15), + ][..], + &[ + // more detailed sweep + ( 0.05, -0.05), + ( 0.15, -0.15), + ( 0.25, -0.25), + ][..], + &[ + // even more verbosity + // (-0.02, 0.02), + // (-0.07, 0.07), + // (-0.12, 0.12), + // (-0.17, 0.17), + // (-0.22, 0.22), + + ( 0.02, -0.02), + ( 0.07, -0.07), + ( 0.12, -0.12), + ( 0.17, -0.17), + // ( 0.22, -0.22), + ][..], + &[ + ( 0.01, -0.01), + ( 0.03, -0.03), + ( 0.04, -0.04), + ( 0.06, -0.06), + ( 0.08, -0.08), + ( 0.13, -0.13), + ( 0.18, -0.18), + ( 0.23, -0.23), + ][..], + ] { + for (edge_input, ctl_cond, coupling_cond, clock_duration, clock_decay, coupling_loops, inp_loops, out_loops, s_major, cur_flt) in [ + // total slot use is L*(inp_loops + out_loops + 1), + // where L is the "coupling loops" (control loops) + // e.g. L=10, inp=1, out=2 gives 40 + // e.g. L=8, inp=1, out=3 gives 40 + // e.g. L=6, inp=1, out=5 gives 42 + // e.g. L=4, inp=1, out=8 gives 40 + // e.g. L=4, inp=2, out=7 gives 40 + // e.g. L=3, inp=2, out=10 gives 39 + + (false, 2e3, 2e4, ps(2000), ps(100), 8, 1, 3, um(400), 5e9), + (false, 2e3, 2e4, ps(2000), ps(100), 6, 5, 1, um(400), 5e9), + (false, 2e3, 2e4, ps(2000), ps(100), 6, 1, 5, um(400), 5e9), + + (true, 2e3, 2e4, ps(2000), ps(100), 8, 1, 3, um(400), 5e9), + (true, 2e3, 2e4, ps(2000), ps(100), 6, 5, 1, um(400), 5e9), + (true, 2e3, 2e4, ps(2000), ps(100), 6, 1, 5, um(400), 5e9), + + // (false, 2e3, 2e4, ps(2000), ps(100), 4, 1, 8, um(400), 2e10), + // (false, 2e3, 2e4, ps(2000), ps(100), 4, 2, 7, um(400), 2e10), + // (2e3, 2e4, ps(2000), ps(100), 3, 2, 10, um(400), 2e10), + ] { + for &(init_flt_a, init_flt_b) in init_set { + // layout: + // M0 -> M1 <-> M2 <- M3 + let net_slots = inp_loops + out_loops + 1; + let mut params = params_v2 + .with_clock_phase_duration(clock_duration) + .with_clock_decay(clock_decay) + .with_ctl_conductivity(ctl_cond) + .with_coupling_conductivity(coupling_cond) + .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) + .with_coupling(3, 3, 0, net_slots, CouplingMethod::Control) + ; + for i in 0..inp_loops { + // couple input M0 -> M1 + params = params.with_coupling(0, 1, 1+i, net_slots, CouplingMethod::Direct); + // couple input M3 -> M2 + params = params.with_coupling(3, 2, 1+i, net_slots, CouplingMethod::Direct); + } + for i in 0..out_loops { + // couple output M1 -> M2 + params = params.with_coupling(1, 2, 1+inp_loops+i, net_slots, CouplingMethod::Direct); + } + + let base = if edge_input { + "59-buf-edge_input" + } else { + "59-buf-inner_input" + }; + let name = asymmetric_binary_gate_name_v2( + ¶ms, + &base, + coupling_loops /* ctl loops */, + coupling_loops, + inp_loops, + out_loops, + init_flt_a, + init_flt_b, + ); + if edge_input { + run_sim( + &name, + drive_map_complementary_buf_edge_inputs_59(init_flt_a, init_flt_b), + params, + ); + } else { + run_sim( + &name, + drive_map_complementary_buf_center_inputs_53(init_flt_a, init_flt_b), + params, + ); + } + } + } + } + } }