app: stacked_cores: 53-xx: complete a run which uses pos-windings != neg-windings

This commit is contained in:
colin 2022-11-05 18:54:10 -07:00
parent af4b5ffa32
commit 16525127a1
2 changed files with 227 additions and 16 deletions

View File

@ -555,6 +555,172 @@ DB = {
MeasRow(4e-09, [ 4227, -28441, -28462, -16632]),
],
}),
'53-buf--0.0004rad-2000ctl_cond-20000coupling_cond-2000ps-100ps-8ctl-8coupling-1_1_3_1_winding-30000001024e0-drive-': ParameterizedMeas({
(-1.000, -1.000,): [
MeasRow(2e-09, [-20603, -22562, -22225, -19022]),
MeasRow(4e-09, [-12661, -31209, -31211, -12290]),
],
(-1.000, 1.000,): [
MeasRow(2e-09, [-20509, -19774, 17781, -17274]),
MeasRow(4e-09, [-16075, -31209, -31210, 13927]),
],
(-0.250, 0.250,): [
MeasRow(2e-09, [-20039, -19033, 17418, -17443]),
MeasRow(4e-09, [-15267, -31208, -31211, 13425]),
],
(-0.220, 0.220,): [
MeasRow(2e-09, [-19728, -18101, 17739, -17419]),
MeasRow(4e-09, [-14539, -31209, -31210, 13424]),
],
(-0.200, 0.200,): [
MeasRow(2e-09, [-19499, -17391, 17958, -17404]),
MeasRow(4e-09, [-13973, -31210, -31210, 13410]),
],
(-0.170, 0.170,): [
MeasRow(2e-09, [-19274, -15387, 18009, -17467]),
MeasRow(4e-09, [-12607, -31208, -31210, 12906]),
],
(-0.150, 0.150,): [
MeasRow(2e-09, [-19250, -12613, 17246, -17626]),
MeasRow(4e-09, [-10822, -31207, -31209, 11672]),
],
(-0.120, 0.120,): [
MeasRow(2e-09, [-19268, -7157, 15722, -17990]),
MeasRow(4e-09, [ -7298, -31209, -31209, 9157]),
],
(-0.100, -0.300,): [
MeasRow(2e-09, [-19312, 9691, -20443, -19019]),
MeasRow(4e-09, [ 9139, -31206, -31209, -16736]),
],
(-0.100, 0.100,): [
MeasRow(2e-09, [-19302, -3498, 14234, -18101]),
MeasRow(4e-09, [ -4849, -31211, -31211, 7240]),
],
(-0.070, 0.070,): [
MeasRow(2e-09, [-19332, 1902, 10518, -18139]),
MeasRow(4e-09, [ -946, -31209, -31209, 3453]),
],
(-0.050, -0.200,): [
MeasRow(2e-09, [-19324, 12356, -16449, -18262]),
MeasRow(4e-09, [ 10078, -31208, -31210, -16538]),
],
(-0.050, 0.050,): [
MeasRow(2e-09, [-19335, 5338, 7626, -18138]),
MeasRow(4e-09, [ 1606, -31208, -31210, 703]),
],
(-0.020, 0.020,): [
MeasRow(2e-09, [-19341, 9873, 4353, -18136]),
MeasRow(4e-09, [ 4845, -31206, -31210, -2510]),
],
( 0.000, -0.100,): [
MeasRow(2e-09, [-19222, 13565, -6842, -18096]),
MeasRow(4e-09, [ 9069, -31210, -31210, -10689]),
],
( 0.000, 0.000,): [
MeasRow(2e-09, [-19333, 12363, 2568, -18132]),
MeasRow(4e-09, [ 6661, -31209, -31210, -4251]),
],
( 0.020, -0.020,): [
MeasRow(2e-09, [-19209, 13502, 717, -18095]),
MeasRow(4e-09, [ 7735, -31210, -31210, -5689]),
],
( 0.050, -0.200,): [
MeasRow(2e-09, [-18593, 15335, -17488, -18204]),
MeasRow(4e-09, [ 12698, -31208, -31211, -16682]),
],
( 0.050, -0.100,): [
MeasRow(2e-09, [-18895, 14981, -8239, -18023]),
MeasRow(4e-09, [ 10482, -31208, -31211, -11864]),
],
( 0.050, -0.050,): [
MeasRow(2e-09, [-19005, 14587, -2694, -18045]),
MeasRow(4e-09, [ 9129, -31209, -31209, -8132]),
],
( 0.070, -0.070,): [
MeasRow(2e-09, [-18786, 15248, -5459, -18009]),
MeasRow(4e-09, [ 10214, -31209, -31210, -10067]),
],
( 0.100, -0.200,): [
MeasRow(2e-09, [-18180, 16137, -17480, -18195]),
MeasRow(4e-09, [ 13500, -31209, -31211, -16691]),
],
( 0.100, -0.100,): [
MeasRow(2e-09, [-18279, 16272, -10042, -17970]),
MeasRow(4e-09, [ 12128, -31209, -31212, -13278]),
],
( 0.100, 0.000,): [
MeasRow(2e-09, [-18670, 15471, -22, -18002]),
MeasRow(4e-09, [ 9498, -31208, -31210, -6497]),
],
( 0.120, -0.120,): [
MeasRow(2e-09, [-18060, 16745, -12650, -17956]),
MeasRow(4e-09, [ 13089, -31209, -31209, -15036]),
],
( 0.150, -0.300,): [
MeasRow(2e-09, [-18111, 15684, -19233, -18526]),
MeasRow(4e-09, [ 13585, -31209, -31210, -16751]),
],
( 0.150, -0.150,): [
MeasRow(2e-09, [-18010, 16853, -15224, -17955]),
MeasRow(4e-09, [ 13682, -31209, -31210, -16479]),
],
( 0.170, -0.170,): [
MeasRow(2e-09, [-18014, 16779, -16325, -18005]),
MeasRow(4e-09, [ 13829, -31209, -31211, -16638]),
],
( 0.200, -0.400,): [
MeasRow(2e-09, [-18029, 15779, -19357, -18557]),
MeasRow(4e-09, [ 13723, -31209, -31212, -16757]),
],
( 0.200, -0.200,): [
MeasRow(2e-09, [-17997, 16496, -17390, -18185]),
MeasRow(4e-09, [ 13846, -31209, -31211, -16692]),
],
( 0.200, -0.100,): [
MeasRow(2e-09, [-17872, 17092, -10995, -17947]),
MeasRow(4e-09, [ 13147, -31209, -31210, -14044]),
],
( 0.200, 0.000,): [
MeasRow(2e-09, [-17862, 17072, -2560, -17954]),
MeasRow(4e-09, [ 11579, -31209, -31210, -8446]),
],
( 0.200, 0.100,): [
MeasRow(2e-09, [-17880, 17011, 5036, -17959]),
MeasRow(4e-09, [ 10325, -31210, -31210, -3377]),
],
( 0.220, -0.220,): [
MeasRow(2e-09, [-17988, 16289, -18052, -18310]),
MeasRow(4e-09, [ 13838, -31209, -31212, -16716]),
],
( 0.250, -0.500,): [
MeasRow(2e-09, [-17955, 15861, -19425, -18579]),
MeasRow(4e-09, [ 13839, -31209, -31211, -16761]),
],
( 0.250, -0.250,): [
MeasRow(2e-09, [-17970, 16060, -18839, -18454]),
MeasRow(4e-09, [ 13846, -31210, -31211, -16740]),
],
( 0.300, -0.300,): [
MeasRow(2e-09, [-17926, 16028, -19101, -18517]),
MeasRow(4e-09, [ 13910, -31210, -31210, -16751]),
],
( 0.300, -0.200,): [
MeasRow(2e-09, [-17898, 16677, -17367, -18187]),
MeasRow(4e-09, [ 14027, -31209, -31211, -16693]),
],
( 0.300, -0.100,): [
MeasRow(2e-09, [-17770, 17299, -11220, -17945]),
MeasRow(4e-09, [ 13397, -31209, -31210, -14223]),
],
( 0.300, 0.000,): [
MeasRow(2e-09, [-17753, 17302, -3505, -17950]),
MeasRow(4e-09, [ 11976, -31209, -31209, -9104]),
],
( 1.000, -1.000,): [
MeasRow(2e-09, [-17559, 16435, -19486, -18689]),
MeasRow(4e-09, [ 14469, -31208, -31211, -16774]),
],
}),
'53-buf--0.0004rad-2000ctl_cond-20000coupling_cond-2000ps-100ps-8ctl-8coupling-3_1_winding-2e10-drive-': ParameterizedMeas({
(-1.000, -1.000,): [
MeasRow(2e-09, [-18843, -22156, -22158, -18842]),

View File

@ -1455,6 +1455,20 @@ fn asymmetric_binary_gate_name(p: &Params, sim_id: &str, ctl_loops: u32, couplin
format!("{sim_id}-{s_major}rad-{ctl_cond}ctl_cond-{coupling_cond}coupling_cond-{clock_length}ps-{clock_decay}ps-{ctl_loops}ctl-{coupling_loops}coupling-{windings}_1_winding-{input_str}-drive-{init_level_a}-{init_level_b}")
}
fn asymmetric_binary_gate_name_v2(p: &Params, sim_id: &str, ctl_loops: u32, coupling_loops: u32, windings_a: u32, windings_b: u32, init_flt_a: f32, init_flt_b: f32) -> String {
let init_level_a = init_float_str(init_flt_a);
let init_level_b = init_float_str(init_flt_b);
let s_major = p.s_major;
let ctl_cond = p.ctl_conductivity as u64;
let coupling_cond = p.coupling_conductivity as u64;
let clock_length = (p.clock_phase_duration * 1e12 + 0.5) as u64;
let clock_decay = (p.clock_decay * 1e12 + 0.5) as u64;
let input_str = exp_format(p.input_magnitude);
format!("{sim_id}-{s_major}rad-{ctl_cond}ctl_cond-{coupling_cond}coupling_cond-{clock_length}ps-{clock_decay}ps-{ctl_loops}ctl-{coupling_loops}coupling-{windings_a}_1_{windings_b}_1_winding-{input_str}-drive-{init_level_a}-{init_level_b}")
}
/// couple `sender` to the `sender+1` core by using `loops` loops, including a crossover so that
/// when the sender goes high -> low, the receiver *also* goes high -> low ("inverting").
/// `loops` must be >= 1.
@ -5924,6 +5938,14 @@ fn main() {
( 0.00, -0.10),
(-0.10, -0.30),
(-0.05, -0.20),
// tailored to strong neg tx, weak pos tx
( 0.20, -0.40),
( 0.10, -0.20),
( 0.15, -0.30),
( 0.25, -0.50),
( 0.05, -0.10),
( 0.05, -0.20),
][..],
&[
// unexpected scenarios
@ -5932,25 +5954,33 @@ fn main() {
( 0.10, 0.10),
][..],
] {
for (ctl_cond, coupling_cond, clock_duration, clock_decay, coupling_loops, inp_loops, s_major, cur_flt) in [
for (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*(4*A + 1),
// where L is the "coupling loops" and A is the inp_loops ("asymmetric loops")
// e.g. L=8, A=1 gives 40
// e.g. L=4, A=2 gives 36
// e.g. L=3, A=3 gives 39
// special case of A=0 is L*(2 + 1)
(2e3, 2e4, ps(2000), ps(100), 13, 0, um(400), 3e10),
// slope is 1.0 - 1.15 form x=13000 to x=17000; averages 0.8 outside
(2e3, 2e4, ps(2000), ps(100), 8, 0, 1, um(400), 3e10),
// steady slope around 0.75 - 0.80
(2e3, 2e4, ps(2000), ps(100), 13, 0, 0, um(400), 3e10),
// narrow region of >1 slope from x=0 to x=2700
(2e3, 2e4, ps(2000), ps(100), 8, 1, um(400), 3e10),
(2e3, 2e4, ps(2000), ps(100), 8, 1, um(400), 2e10),
(2e3, 2e4, ps(2000), ps(100), 4, 2, um(400), 3e10), // UNVERIFIED GEOM
(2e3, 2e4, ps(2000), ps(100), 8, 1, 1, um(400), 3e10),
// slope varies from 0.65 to 1.0 (x=5000)
(2e3, 2e4, ps(2000), ps(100), 8, 1, 1, um(400), 2e10),
// slope varies from 0.45 to 0.85
(2e3, 2e4, ps(2000), ps(100), 4, 2, 2, um(400), 3e10),
] {
for &(init_flt_a, init_flt_b) in init_set {
// each core is coupled to 2 others + control slots
// M1 <-> M2 is symmetric (inputs)
// M1 -> M0 & M2 -> M3 are asymmetric (tx input -> output)
// M0 <-> M3 is symmetrics (outputs)
let slots_per_asym = (2*inp_loops).max(1);
let slots_per_asym_pos = (2*pos_inp_loops).max(1);
let slots_per_asym_neg = (2*neg_inp_loops).max(1);
let slots_per_asym = slots_per_asym_pos.max(slots_per_asym_neg);
let net_slots = 2*slots_per_asym + 1;
let mut params = params_v2
.with_clock_phase_duration(clock_duration)
@ -5972,20 +6002,35 @@ fn main() {
// couple input core 1 to core 2
params = params.with_coupling(1, 2, 1+i, net_slots, CouplingMethod::Direct);
}
if inp_loops != 0 {
if pos_inp_loops != 0 {
// couple input M1 -> output M0
params = couple_asymmetric_buffer_bi(&params, 0 /* low core */, 0, inp_loops, 1 + slots_per_asym /* slot offset */, net_slots);
// couple input M2 -> output M3
params = couple_asymmetric_buffer_bi(&params, 2 /* low core */, inp_loops, 0, 1 + slots_per_asym /* slot offset */, net_slots);
params = couple_asymmetric_buffer_bi(&params, 0 /* low core */, 0 /* M0 loops */, pos_inp_loops, 1 + slots_per_asym /* slot offset */, net_slots);
} else {
// directly couple M1->M0, M2->M3
params = params.with_coupling(0, 1, 1 + slots_per_asym, net_slots, CouplingMethod::Direct);
params = params.with_coupling(2, 3, 1 + slots_per_asym, net_slots, CouplingMethod::Direct);
// directly couple M1->M0
for i in 0..slots_per_asym {
params = params.with_coupling(0, 1, 1 + slots_per_asym + i, net_slots, CouplingMethod::Direct);
}
}
let name = asymmetric_binary_gate_name(
&params, "53-buf-", coupling_loops /* ctl loops */, coupling_loops, 2*inp_loops + 1, init_flt_a, init_flt_b
);
if neg_inp_loops != 0 {
// couple input M2 -> output M3
params = couple_asymmetric_buffer_bi(&params, 2 /* low core */, neg_inp_loops, 0 /* M3 loops */, 1 + slots_per_asym /* slot offset */, net_slots);
} else {
// directly couple M2->M3
for i in 0..slots_per_asym {
params = params.with_coupling(2, 3, 1 + slots_per_asym + i, net_slots, CouplingMethod::Direct);
}
}
let name = if pos_inp_loops == neg_inp_loops {
asymmetric_binary_gate_name(
&params, "53-buf-", coupling_loops /* ctl loops */, coupling_loops, 2*pos_inp_loops + 1, init_flt_a, init_flt_b
)
} else {
asymmetric_binary_gate_name_v2(
&params, "53-buf-", 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,
drive_map_buf_53(init_flt_a, init_flt_b),