From 847f60947d1b9e2d47ec68e8c5d0fc829ab48bf3 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Sat, 22 Jun 2019 02:19:49 +0200 Subject: [PATCH] WIP: BJT - don't place base and emitter terminals over each other. --- src/db/db/dbNetlistDeviceExtractorClasses.cc | 34 +++++++++++++++----- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/src/db/db/dbNetlistDeviceExtractorClasses.cc b/src/db/db/dbNetlistDeviceExtractorClasses.cc index c867af849..75dc62542 100644 --- a/src/db/db/dbNetlistDeviceExtractorClasses.cc +++ b/src/db/db/dbNetlistDeviceExtractorClasses.cc @@ -469,17 +469,35 @@ void NetlistDeviceExtractorBJT3Transistor::extract_devices (const std::vector collector terminal is collector outside base + rcollector = rcollector2base - rbase; + } else { + // lateral transistor: base is reduced by collector area + rcollector = rcollector2base; + rbase -= rcollector2base; + } + + // this is what is the true base contact + rbase -= remitter2base; + + // emitter wins over collector for the collector contact + rcollector -= remitter2base; + double ab = dbu () * dbu () * p->area (); double pb = dbu () * p->perimeter (); @@ -503,15 +521,15 @@ void NetlistDeviceExtractorBJT3Transistor::extract_devices (const std::vectorset_parameter_value (db::DeviceClassBJT3Transistor::param_id_AC, ac); device->set_parameter_value (db::DeviceClassBJT3Transistor::param_id_PC, pc); - define_terminal (device, db::DeviceClassBJT3Transistor::terminal_id_C, collector_terminal_geometry_index, rcollector2base); - define_terminal (device, db::DeviceClassBJT3Transistor::terminal_id_B, base_terminal_geometry_index, *p); + define_terminal (device, db::DeviceClassBJT3Transistor::terminal_id_C, collector_terminal_geometry_index, rcollector); + define_terminal (device, db::DeviceClassBJT3Transistor::terminal_id_B, base_terminal_geometry_index, rbase); define_terminal (device, db::DeviceClassBJT3Transistor::terminal_id_E, emitter_terminal_geometry_index, *pe); // allow derived classes to modify the device modify_device (*p, layer_geometry, device); // output the device for debugging - device_out (device, rcollector2base, rbase, *pe); + device_out (device, rcollector, rbase, *pe); }