diff --git a/crates/applications/stacked_cores/scripts/plot_57xx.py b/crates/applications/stacked_cores/scripts/plot_57xx.py index 3220ce7..7832ec4 100755 --- a/crates/applications/stacked_cores/scripts/plot_57xx.py +++ b/crates/applications/stacked_cores/scripts/plot_57xx.py @@ -21,14 +21,17 @@ def extract_57xx_tx(meas_rows: list) -> tuple: ) -buf_gates = read_db(lambda name: name.startswith("57-")) +# buf_gates = read_db(lambda name: name.startswith("57-")) +buf_gates = read_db(lambda name: name.startswith("57-buf-1p-2n-")) sweep_buf_inputs = lambda points=101: [(m, None, m, -m, None, -m) for m in sweep_1d(points)] sweep_pos_input = lambda mneg, points=101: [(m, None, m, mneg, None, mneg) for m in sweep_1d(points)] +sweep_2n1p_input = lambda points=101: [(m, None, None, -m, None, -m) for m in sweep_1d(points)] for name, meas in natsorted(buf_gates.items()): # trace = eval_series(meas, sweep_buf_inputs(41), extract_57xx_tx, y_idx=1) - trace = eval_series(meas, sweep_pos_input(0, 41), extract_57xx_tx, y_idx=1) + # trace = eval_series(meas, sweep_pos_input(0, 41), extract_57xx_tx, y_idx=1) + trace = eval_series(meas, sweep_2n1p_input(41), extract_57xx_tx, y_idx=1) plot(f"{name}", "a1", trace) plot_slope(f"slope {name}", "a1", trace) 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 4e75c95..40bba48 100644 --- a/crates/applications/stacked_cores/scripts/stacked_cores_52xx_db.py +++ b/crates/applications/stacked_cores/scripts/stacked_cores_52xx_db.py @@ -2129,6 +2129,10 @@ DB = { MeasRow(4e-09, [ 16454, -17198, 16466, -17137, -17413, -17122]), MeasRow(6e-09, [-29550, 16298, -29717, -29735, -14958, -29708]), ], + ( 0.120, -0.120,): [ + MeasRow(4e-09, [ 16523, -17197, 16539, -17185, -17419, -17172]), + MeasRow(6e-09, [-29550, 16291, -29717, -29737, -14944, -29708]), + ], ( 0.150, -0.150,): [ MeasRow(4e-09, [ 16592, -17193, 16610, -17235, -17428, -17224]), MeasRow(6e-09, [-29549, 16310, -29717, -29737, -14965, -29708]), @@ -2288,4 +2292,304 @@ DB = { MeasRow(6e-09, [-28763, 15632, -28759, -28780, -13374, -28777]), ], }), + '57-buf-1p-2n-0.0004rad-2000ctl_cond-20000coupling_cond-2000ps-100ps-3ctl-3coupling-5_1_3_1_winding-1e10-drive-': ParameterizedMeas({ + (-1.000, -1.000,): [ + MeasRow(4e-09, [-17107, -17151, -16813, -17012, -17260, -16997]), + MeasRow(6e-09, [-27678, -14252, -28550, -27793, -9249, -27735]), + ], + (-1.000, 1.000,): [ + MeasRow(4e-09, [-17082, -16963, -16793, 16689, -16953, 16686]), + MeasRow(6e-09, [-27756, -16733, -28607, -27671, 13620, -27614]), + ], + (-0.200, 0.200,): [ + MeasRow(4e-09, [-12088, -16866, -12576, 12675, -16915, 12386]), + MeasRow(6e-09, [-27668, -16666, -28599, -27686, 10906, -27630]), + ], + (-0.100, 0.100,): [ + MeasRow(4e-09, [ 174, -16866, -1502, 7499, -16914, 7552]), + MeasRow(6e-09, [-27619, -14158, -28605, -27698, 6085, -27645]), + ], + ( 0.000, 0.000,): [ + MeasRow(4e-09, [ 3098, -16876, -76, 3150, -16917, 3708]), + MeasRow(6e-09, [-27619, -12711, -28603, -27709, 3443, -27655]), + ], + ( 0.020, -0.020,): [ + MeasRow(4e-09, [ 3700, -16877, 70, 2354, -16917, 2952]), + MeasRow(6e-09, [-27619, -12428, -28602, -27709, 2945, -27658]), + ], + ( 0.050, -0.050,): [ + MeasRow(4e-09, [ 4550, -16878, 408, 1279, -16915, 1846]), + MeasRow(6e-09, [-27619, -12024, -28603, -27710, 2223, -27660]), + ], + ( 0.100, -0.100,): [ + MeasRow(4e-09, [ 6019, -16874, 1312, -113, -16910, 269]), + MeasRow(6e-09, [-27621, -11344, -28602, -27714, 1172, -27664]), + ], + ( 0.150, -0.150,): [ + MeasRow(4e-09, [ 7768, -16866, 5689, -5386, -16905, -5337]), + MeasRow(6e-09, [-27620, -9610, -28598, -27727, -2540, -27675]), + ], + ( 0.200, -0.200,): [ + MeasRow(4e-09, [ 11739, -16867, 12112, -12198, -16906, -12192]), + MeasRow(6e-09, [-27627, -6743, -28596, -27746, -7332, -27693]), + ], + ( 0.250, -0.250,): [ + MeasRow(4e-09, [ 15836, -16907, 16218, -16320, -17032, -16304]), + MeasRow(6e-09, [-27625, -4705, -28588, -27773, -10139, -27713]), + ], + ( 1.000, -1.000,): [ + MeasRow(4e-09, [ 16744, -16974, 16790, -16983, -17144, -16977]), + MeasRow(6e-09, [-27622, -4420, -28588, -27800, -10547, -27741]), + ], + }), + '57-buf-1p-2n-0.0004rad-2000ctl_cond-20000coupling_cond-2000ps-100ps-3ctl-3coupling-5_1_3_1_winding-2e10-drive-': ParameterizedMeas({ + (-1.000, -1.000,): [ + MeasRow(4e-09, [-17269, -17328, -16860, -17140, -17478, -17129]), + MeasRow(6e-09, [-28605, -13683, -29027, -28770, -7593, -28745]), + ], + (-1.000, 1.000,): [ + MeasRow(4e-09, [-17247, -17097, -16842, 16759, -17040, 16767]), + MeasRow(6e-09, [-28633, -16795, -29074, -28567, 15364, -28506]), + ], + (-0.200, 0.200,): [ + MeasRow(4e-09, [-16920, -17068, -16677, 16226, -17053, 16249]), + MeasRow(6e-09, [-28621, -16789, -29070, -28571, 15241, -28512]), + ], + (-0.100, 0.100,): [ + MeasRow(4e-09, [-12153, -16975, -13157, 12994, -17042, 12832]), + MeasRow(6e-09, [-28574, -16765, -29064, -28585, 14208, -28533]), + ], + ( 0.000, 0.000,): [ + MeasRow(4e-09, [ 4817, -16987, -76, 5614, -17041, 6866]), + MeasRow(6e-09, [-28532, -12545, -29053, -28650, 7897, -28606]), + ], + ( 0.020, -0.020,): [ + MeasRow(4e-09, [ 5831, -16989, 802, 4197, -17041, 5770]), + MeasRow(6e-09, [-28534, -11811, -29051, -28656, 6809, -28616]), + ], + ( 0.050, -0.050,): [ + MeasRow(4e-09, [ 7260, -16986, 2634, 1310, -17034, 1601]), + MeasRow(6e-09, [-28536, -10126, -29049, -28675, 3834, -28645]), + ], + ( 0.070, -0.070,): [ + MeasRow(4e-09, [ 8277, -16983, 5578, -4029, -17027, -3929]), + MeasRow(6e-09, [-28542, -7764, -29042, -28713, -568, -28693]), + ], + ( 0.100, -0.100,): [ + MeasRow(4e-09, [ 11693, -16983, 12486, -12280, -17027, -12236]), + MeasRow(6e-09, [-28561, -3313, -29030, -28785, -7528, -28770]), + ], + ( 0.120, -0.120,): [ + MeasRow(4e-09, [ 15358, -17014, 16109, -16143, -17143, -16100]), + MeasRow(6e-09, [-28552, -564, -29020, -28826, -10976, -28804]), + ], + ( 0.150, -0.150,): [ + MeasRow(4e-09, [ 16301, -17031, 16580, -16761, -17210, -16739]), + MeasRow(6e-09, [-28557, -81, -29027, -28823, -11510, -28802]), + ], + ( 0.170, -0.170,): [ + MeasRow(4e-09, [ 16376, -17035, 16615, -16805, -17217, -16784]), + MeasRow(6e-09, [-28556, -38, -29026, -28825, -11557, -28803]), + ], + ( 0.200, -0.200,): [ + MeasRow(4e-09, [ 16450, -17038, 16653, -16853, -17226, -16835]), + MeasRow(6e-09, [-28557, 7, -29025, -28826, -11600, -28805]), + ], + ( 0.220, -0.220,): [ + MeasRow(4e-09, [ 16486, -17040, 16670, -16876, -17230, -16861]), + MeasRow(6e-09, [-28556, 26, -29024, -28827, -11624, -28805]), + ], + ( 0.250, -0.250,): [ + MeasRow(4e-09, [ 16529, -17040, 16697, -16905, -17236, -16890]), + MeasRow(6e-09, [-28556, 51, -29025, -28827, -11652, -28806]), + ], + ( 1.000, -1.000,): [ + MeasRow(4e-09, [ 16834, -17069, 16847, -17120, -17337, -17114]), + MeasRow(6e-09, [-28553, 188, -29025, -28831, -11892, -28812]), + ], + }), + '57-buf-1p-2n-0.0004rad-2000ctl_cond-20000coupling_cond-2000ps-100ps-3ctl-3coupling-5_1_5_1_winding-49999998976e0-drive-': ParameterizedMeas({ + (-1.000, -1.000,): [ + MeasRow(4e-09, [-17476, -17535, -16864, -17556, -17796, -17574]), + MeasRow(6e-09, [-29696, -12620, -29786, -29737, -3824, -29699]), + ], + (-1.000, 1.000,): [ + MeasRow(4e-09, [-17478, -17232, -16850, 16971, -16939, 16994]), + MeasRow(6e-09, [-29719, -15322, -29805, -29614, 15976, -29647]), + ], + (-0.200, 0.200,): [ + MeasRow(4e-09, [-17241, -17191, -16823, 16658, -17111, 16706]), + MeasRow(6e-09, [-29715, -15340, -29804, -29617, 15908, -29650]), + ], + (-0.100, 0.100,): [ + MeasRow(4e-09, [-17096, -17194, -16791, 16434, -17135, 16481]), + MeasRow(6e-09, [-29715, -15338, -29803, -29619, 15860, -29651]), + ], + ( 0.000, 0.000,): [ + MeasRow(4e-09, [ 7130, -17108, -249, 7030, -17143, 8147]), + MeasRow(6e-09, [-29633, -10306, -29797, -29667, 11214, -29672]), + ], + ( 0.050, -0.050,): [ + MeasRow(4e-09, [ 15632, -17136, 16713, -16491, -17306, -16444]), + MeasRow(6e-09, [-29628, 1702, -29789, -29761, -8820, -29711]), + ], + ( 0.100, -0.100,): [ + MeasRow(4e-09, [ 16436, -17165, 16780, -17148, -17419, -17132]), + MeasRow(6e-09, [-29632, 2202, -29788, -29760, -9410, -29708]), + ], + ( 0.150, -0.150,): [ + MeasRow(4e-09, [ 16571, -17170, 16793, -17246, -17445, -17236]), + MeasRow(6e-09, [-29632, 2284, -29788, -29761, -9501, -29708]), + ], + ( 0.200, -0.200,): [ + MeasRow(4e-09, [ 16642, -17172, 16815, -17295, -17464, -17288]), + MeasRow(6e-09, [-29631, 2326, -29787, -29760, -9562, -29708]), + ], + ( 0.250, -0.250,): [ + MeasRow(4e-09, [ 16693, -17171, 16830, -17330, -17480, -17326]), + MeasRow(6e-09, [-29631, 2359, -29787, -29761, -9600, -29708]), + ], + ( 1.000, -1.000,): [ + MeasRow(4e-09, [ 16931, -17146, 16853, -17560, -17643, -17571]), + MeasRow(6e-09, [-29628, 2531, -29785, -29763, -9868, -29710]), + ], + }), + '57-buf-1p-2n-0.0004rad-2000ctl_cond-20000coupling_cond-2000ps-100ps-6ctl-6coupling-3_1_3_1_winding-1e10-drive-': ParameterizedMeas({ + (-1.000, -1.000,): [ + MeasRow(4e-09, [-18034, -18043, -16824, -18223, -18872, -18206]), + MeasRow(6e-09, [-29643, -13572, -29825, -29643, -8118, -29655]), + ], + (-1.000, 1.000,): [ + MeasRow(4e-09, [-18102, -17652, -16824, 17043, -16855, 17038]), + MeasRow(6e-09, [-29664, -16432, -29838, -29611, 16645, -29627]), + ], + (-0.200, 0.200,): [ + MeasRow(4e-09, [-17718, -17548, -16736, 16617, -17211, 16613]), + MeasRow(6e-09, [-29659, -16439, -29834, -29614, 16596, -29629]), + ], + (-0.100, 0.100,): [ + MeasRow(4e-09, [-12258, -17275, -12663, 12661, -17566, 12703]), + MeasRow(6e-09, [-29640, -16043, -29837, -29618, 16168, -29633]), + ], + ( 0.000, 0.000,): [ + MeasRow(4e-09, [ 8669, -17301, -1, 8542, -17564, 9110]), + MeasRow(6e-09, [-29628, -6136, -29833, -29621, 12211, -29637]), + ], + ( 0.050, -0.050,): [ + MeasRow(4e-09, [ 10492, -17305, 884, 1707, -17550, 1841]), + MeasRow(6e-09, [-29630, -2945, -29831, -29626, 6260, -29642]), + ], + ( 0.100, -0.100,): [ + MeasRow(4e-09, [ 12546, -17303, 12669, -12357, -17534, -12255]), + MeasRow(6e-09, [-29629, 2216, -29817, -29629, -5531, -29643]), + ], + ( 0.150, -0.150,): [ + MeasRow(4e-09, [ 16344, -17288, 16594, -17607, -18245, -17593]), + MeasRow(6e-09, [-29629, 5496, -29813, -29632, -10579, -29645]), + ], + ( 0.200, -0.200,): [ + MeasRow(4e-09, [ 16611, -17270, 16740, -17849, -18341, -17842]), + MeasRow(6e-09, [-29627, 5689, -29814, -29633, -10855, -29645]), + ], + ( 0.250, -0.250,): [ + MeasRow(4e-09, [ 16675, -17253, 16760, -17913, -18387, -17904]), + MeasRow(6e-09, [-29625, 5752, -29813, -29633, -10950, -29645]), + ], + ( 1.000, -1.000,): [ + MeasRow(4e-09, [ 17021, -17152, 16826, -18246, -18660, -18230]), + MeasRow(6e-09, [-29624, 6063, -29811, -29638, -11445, -29647]), + ], + }), + '57-buf-1p-2n-0.0004rad-2000ctl_cond-20000coupling_cond-2000ps-100ps-6ctl-6coupling-3_1_3_1_winding-3e9-drive-': ParameterizedMeas({ + (-1.000, -1.000,): [ + MeasRow(4e-09, [-17679, -17701, -16769, -17860, -18381, -17850]), + MeasRow(6e-09, [-28044, -14526, -28129, -28036, -10406, -28047]), + ], + (-1.000, 1.000,): [ + MeasRow(4e-09, [-17710, -17367, -16770, 16904, -16799, 16900]), + MeasRow(6e-09, [-28059, -15902, -28139, -28030, 11734, -28040]), + ], + (-0.200, 0.200,): [ + MeasRow(4e-09, [ -1287, -17082, -1476, 8820, -17289, 8837]), + MeasRow(6e-09, [-28036, -11553, -28113, -28027, 6457, -28038]), + ], + (-0.100, 0.100,): [ + MeasRow(4e-09, [ 889, -17085, -24, 5557, -17282, 5619]), + MeasRow(6e-09, [-28036, -9992, -28117, -28031, 4428, -28042]), + ], + ( 0.000, 0.000,): [ + MeasRow(4e-09, [ 3806, -17089, 0, 2042, -17272, 2153]), + MeasRow(6e-09, [-28035, -8227, -28117, -28029, 2345, -28040]), + ], + ( 0.050, -0.050,): [ + MeasRow(4e-09, [ 5309, -17091, 2, 635, -17269, 787]), + MeasRow(6e-09, [-28036, -7420, -28116, -28030, 1468, -28040]), + ], + ( 0.100, -0.100,): [ + MeasRow(4e-09, [ 6685, -17093, 31, 193, -17270, 276]), + MeasRow(6e-09, [-28037, -6827, -28117, -28029, 1105, -28040]), + ], + ( 0.150, -0.150,): [ + MeasRow(4e-09, [ 7991, -17096, 127, 62, -17271, 93]), + MeasRow(6e-09, [-28033, -6328, -28117, -28029, 937, -28040]), + ], + ( 0.200, -0.200,): [ + MeasRow(4e-09, [ 9213, -17100, 1497, -1343, -17267, -1303]), + MeasRow(6e-09, [-28033, -5674, -28122, -28029, 24, -28040]), + ], + ( 0.250, -0.250,): [ + MeasRow(4e-09, [ 10359, -17101, 5568, -5368, -17260, -5322]), + MeasRow(6e-09, [-28036, -4654, -28122, -28028, -2511, -28039]), + ], + ( 1.000, -1.000,): [ + MeasRow(4e-09, [ 16874, -17041, 16771, -17867, -18200, -17856]), + MeasRow(6e-09, [-28036, -1101, -28112, -28041, -11439, -28050]), + ], + }), + '57-buf-1p-2n-0.0004rad-2000ctl_cond-20000coupling_cond-2000ps-100ps-6ctl-6coupling-3_1_3_1_winding-5e9-drive-': ParameterizedMeas({ + (-1.000, -1.000,): [ + MeasRow(4e-09, [-17834, -17850, -16784, -18018, -18596, -18006]), + MeasRow(6e-09, [-28776, -14156, -28981, -28770, -9584, -28781]), + ], + (-1.000, 1.000,): [ + MeasRow(4e-09, [-17878, -17490, -16785, 16970, -16819, 16965]), + MeasRow(6e-09, [-28785, -15727, -28993, -28757, 15886, -28766]), + ], + (-0.200, 0.200,): [ + MeasRow(4e-09, [-12301, -17159, -12653, 12581, -17407, 12551]), + MeasRow(6e-09, [-28768, -14862, -28919, -28760, 13908, -28771]), + ], + (-0.100, 0.100,): [ + MeasRow(4e-09, [ 1438, -17175, -303, 9373, -17409, 9468]), + MeasRow(6e-09, [-28766, -10702, -28893, -28757, 10826, -28767]), + ], + ( 0.000, 0.000,): [ + MeasRow(4e-09, [ 6861, -17182, 0, 6078, -17398, 6396]), + MeasRow(6e-09, [-28766, -7015, -28892, -28761, 8150, -28769]), + ], + ( 0.050, -0.050,): [ + MeasRow(4e-09, [ 8272, -17185, 35, 4268, -17394, 4684]), + MeasRow(6e-09, [-28763, -5901, -28892, -28759, 6843, -28768]), + ], + ( 0.100, -0.100,): [ + MeasRow(4e-09, [ 9540, -17190, 373, 1232, -17391, 1398]), + MeasRow(6e-09, [-28763, -4506, -28892, -28760, 4450, -28770]), + ], + ( 0.150, -0.150,): [ + MeasRow(4e-09, [ 10731, -17190, 5570, -5369, -17380, -5295]), + MeasRow(6e-09, [-28766, -2318, -28899, -28760, -573, -28770]), + ], + ( 0.200, -0.200,): [ + MeasRow(4e-09, [ 12412, -17188, 12653, -12387, -17374, -12327]), + MeasRow(6e-09, [-28767, 69, -28927, -28762, -5905, -28772]), + ], + ( 0.250, -0.250,): [ + MeasRow(4e-09, [ 15565, -17184, 16175, -16734, -17799, -16717]), + MeasRow(6e-09, [-28763, 2321, -28926, -28773, -9566, -28782]), + ], + ( 1.000, -1.000,): [ + MeasRow(4e-09, [ 16942, -17093, 16783, -18033, -18401, -18019]), + MeasRow(6e-09, [-28765, 3057, -28922, -28773, -10817, -28781]), + ], + }), } \ 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 b4246e1..b7a4da5 100644 --- a/crates/applications/stacked_cores/src/main.rs +++ b/crates/applications/stacked_cores/src/main.rs @@ -6378,8 +6378,8 @@ fn main() { ][..], &[ // negative side - // (-0.10, 0.10), - // (-0.20, 0.20), + (-0.10, 0.10), + (-0.20, 0.20), // (-0.25, 0.25), // (-0.05, 0.05), // (-0.15, 0.15), @@ -6417,7 +6417,7 @@ fn main() { ( 0.23, -0.23), ][..], ] { - for (ctl_cond, coupling_cond, clock_duration, clock_decay, coupling_loops, pos_inp_loops, neg_inp_loops, s_major, cur_flt) in [ + for (pos_cores, neg_cores, ctl_cond, coupling_cond, clock_duration, clock_decay, coupling_loops, pos_inp_loops, neg_inp_loops, s_major, cur_flt) in [ // total slot use is L*(6*A + 1), // where L is the "coupling loops" and A is the inp_loops ("asymmetric loops") // e.g. L=6, A=1 gives 42 @@ -6426,10 +6426,31 @@ fn main() { // special case of A=0 is L*(3 + 1) // L=10, A=0 gives 40 + // Y ranges -17000 to 0 + // peak slope: 0.68 + (1, 2, 2e3, 2e4, ps(2000), ps(100), 3, 2, 1, um(400), 2e10), + // Y ranges -17000 to -4000 + // peak slope: 0.50 + (1, 2, 2e3, 2e4, ps(2000), ps(100), 3, 2, 1, um(400), 1e10), + // Y ranges -16000 to +6000 + // slope: 0.64 + (1, 2, 2e3, 2e4, ps(2000), ps(100), 6, 1, 1, um(400), 1e10), + // Y ranges -16000 to -1000 + // peak slope: 0.48 + (1, 2, 2e3, 2e4, ps(2000), ps(100), 6, 1, 1, um(400), 3e9), + + // Y(16900, -17600) = (2500, -9900) + // slope: 0.51 + (1, 2, 2e3, 2e4, ps(2000), ps(100), 3, 2, 2, um(400), 5e10), + // Y(16900, -18000) = (3100, -10900) + // peak slope: 0.73 + (1, 2, 2e3, 2e4, ps(2000), ps(100), 6, 1, 1, um(400), 5e9), + // Y(-18000, 17000) = (-13300, 15600) // Y( 17000, -18000) = ( 15600, -13400) // slope: 0.83 - (2e3, 2e4, ps(2000), ps(100), 6, 1, 1, um(400), 5e9), + // (2, 2, 2e3, 2e4, ps(2000), ps(100), 6, 1, 1, um(400), 5e9), + // Y(-17700, 16900) = (-14600, 3000) // Y( 16900, -17700) = ( 3000, -14600) // slope: 0.51 @@ -6438,11 +6459,12 @@ fn main() { // Y(-18500, 17200) = (-15300, 16900) // Y( 17200, -18500) = ( 16900, -15400) // slope: 0.94 - (2e3, 2e4, ps(2000), ps(100), 6, 1, 1, um(400), 2e10), + // (2, 2, 2e3, 2e4, ps(2000), ps(100), 6, 1, 1, um(400), 2e10), + // Y(-17500, 17000) = (-15200, 16400) // Y( 17000, -17600) = ( 16400, -15100) // slope: 0.95 - (2e3, 2e4, ps(2000), ps(100), 3, 2, 2, um(400), 5e10), + // (2, 2, 2e3, 2e4, ps(2000), ps(100), 3, 2, 2, um(400), 5e10), ] { for &(init_flt_a, init_flt_b) in init_set { // layout: @@ -6476,33 +6498,61 @@ fn main() { params = params.with_coupling(1, 4, 1+i, net_slots, CouplingMethod::Outside); } if pos_inp_loops != 0 { - // couple input M0 -> output M1 - params = couple_asymmetric_buffer_bi(¶ms, 0 /* low core */, pos_inp_loops /* M0 loops */, 0 /* M1 loops */, 1 + slots_per_asym /* slot offset */, net_slots); - // couple input M2 -> output M1 - params = couple_asymmetric_buffer_bi(¶ms, 1 /* low core */, 0 /* M1 loops */, pos_inp_loops /* M2 loops */, 1 + 2*slots_per_asym /* slot offset */, net_slots); + if pos_cores > 0 { + // couple input M0 -> output M1 + params = couple_asymmetric_buffer_bi(¶ms, 0 /* low core */, pos_inp_loops /* M0 loops */, 0 /* M1 loops */, 1 + slots_per_asym /* slot offset */, net_slots); + } + if pos_cores > 1 { + // couple input M2 -> output M1 + params = couple_asymmetric_buffer_bi(¶ms, 1 /* low core */, 0 /* M1 loops */, pos_inp_loops /* M2 loops */, 1 + 2*slots_per_asym /* slot offset */, net_slots); + } } else { // directly couple M0 -> M1, M2 -> M1 for i in 0..slots_per_asym { - params = params.with_coupling(0, 1, 1 + slots_per_asym + i, net_slots, CouplingMethod::Direct); - params = params.with_coupling(2, 1, 1 + 2*slots_per_asym + i, net_slots, CouplingMethod::Direct); + if pos_cores > 0 { + params = params.with_coupling(0, 1, 1 + slots_per_asym + i, net_slots, CouplingMethod::Direct); + } + if pos_cores > 1 { + params = params.with_coupling(2, 1, 1 + 2*slots_per_asym + i, net_slots, CouplingMethod::Direct); + } } } if neg_inp_loops != 0 { - // couple input M3 -> output M4 - params = couple_asymmetric_buffer_bi(¶ms, 3 /* low core */, neg_inp_loops /* M3 loops */, 0 /* M4 loops */, 1 + slots_per_asym /* slot offset */, net_slots); - // couple input M5 -> output M4 - params = couple_asymmetric_buffer_bi(¶ms, 4 /* low core */, 0 /* M4 loops */, neg_inp_loops /* M5 loops */, 1 + 2*slots_per_asym /* slot offset */, net_slots); + if neg_cores > 0 { + // couple input M3 -> output M4 + params = couple_asymmetric_buffer_bi(¶ms, 3 /* low core */, neg_inp_loops /* M3 loops */, 0 /* M4 loops */, 1 + slots_per_asym /* slot offset */, net_slots); + } + if neg_cores > 1 { + // couple input M5 -> output M4 + params = couple_asymmetric_buffer_bi(¶ms, 4 /* low core */, 0 /* M4 loops */, neg_inp_loops /* M5 loops */, 1 + 2*slots_per_asym /* slot offset */, net_slots); + } } else { // directly couple M3 -> M4, M5 -> M4 for i in 0..slots_per_asym { - params = params.with_coupling(3, 4, 1 + slots_per_asym + i, net_slots, CouplingMethod::Direct); - params = params.with_coupling(5, 4, 1 + 2*slots_per_asym + i, net_slots, CouplingMethod::Direct); + if neg_cores > 0 { + params = params.with_coupling(3, 4, 1 + slots_per_asym + i, net_slots, CouplingMethod::Direct); + } + if neg_cores > 1 { + params = params.with_coupling(5, 4, 1 + 2*slots_per_asym + i, net_slots, CouplingMethod::Direct); + } } } + let prefix = if pos_cores == 2 && neg_cores == 2 { + "".into() + } else { + format!("-{pos_cores}p-{neg_cores}n") + }; let name = asymmetric_binary_gate_name_v2( - ¶ms, "57-buf", coupling_loops /* ctl loops */, coupling_loops, 2*pos_inp_loops + 1, 2*neg_inp_loops + 1, init_flt_a, init_flt_b + ¶ms, + &format!("57-buf{}", prefix), + coupling_loops /* ctl loops */, + coupling_loops, + 2*pos_inp_loops + 1, + 2*neg_inp_loops + 1, + init_flt_a, + init_flt_b, ); run_sim( &name,