Ok. Before having good understanding of scaling algos in Electric I am not ready to code scaling rule infering appropriately ;) (straight forward approaches to fix it don't work for me) Postponing my efforts on this direction in favour of using XML description
But it would be convenient to use advantage of placing geometries using GUI, than add scaling rules in textual form. Adam had to implement a special code generator due to generate complex geometries for Sky130.. Would you like to include his code to the main repository as example tech-generator? https://gitlab.com/westernsemico/com.westernsemico.vlsi Alex On Sun, Nov 29, 2020 at 9:30 AM <[email protected]> wrote: > [email protected] > <https://groups.google.com/forum/?utm_source=digest&utm_medium=email#!forum/electricvlsi/topics> > Google > Groups > <https://groups.google.com/forum/?utm_source=digest&utm_medium=email/#!overview> > <https://groups.google.com/forum/?utm_source=digest&utm_medium=email/#!overview> > Topic digest > View all topics > <https://groups.google.com/forum/?utm_source=digest&utm_medium=email#!forum/electricvlsi/topics> > > - Error with multi-cut examples of restistor in MOCMOS tech > <#m_3628559767683498907_group_thread_0> - 2 Updates > > Error with multi-cut examples of restistor in MOCMOS tech > <http://groups.google.com/group/electricvlsi/t/8dc62c0cf7999475?utm_source=digest&utm_medium=email> > Alexandre Rusev <[email protected]>: Nov 28 07:11PM +0300 > > Converted MOCMOS tech to library, then removed scalable and NPN transistors > and and encountered the same issue for *all* resistors: > > Number of cut-s supposed to be different for different size-of-resistor > examples due to infer scaling rules for amount of vias later. > > But current implementation of associateExamples(...) verifies that number > of instances of "similar layer" is the same in all examples. > > This equality is intentionally NOT right for cuts in resistor examples , > and possibly also not right for vias in case of capacitors > > What is right approach to fix it? > > > Cell node-Hi-Res-Poly2-Resistor{lay}, node artwork:Filled-Box[art@23]: > *Layer > Poly-Cut found 2 times in main example, 6 in others* > Failed to convert the library to a technology > > > private boolean associateExamples(List<Example> neList, Cell np) > { > // if there is only one example, no association > if (neList.size() <= 1) return false; > > // associate each example "ne" with the original in "neList" > Example firstEx = neList.get(0); > for(int n=1; n<neList.size(); n++) > { > Example ne = neList.get(n); > > // clear associations for every sample "ns" in the example "ne" > for(Sample ns : ne.samples) > ns.assoc = null; > > // associate every sample "ns" in the example "ne" > for(Sample ns : ne.samples) > { > if (ns.assoc != null) continue; > > // cannot have center in other examples > if (ns.layer == Generic.tech().cellCenterNode) > { > error.markError(ns.node, np, "Grab point should only be in main example"); > return true; > } > > // count number of similar layers in original example "neList" > int total = 0; > Sample nsFound = null; > for(Sample nsList : firstEx.samples) > { > if (nsList.layer != ns.layer) continue; > total++; > nsFound = nsList; > } > > // no similar layer found in the original: error > if (total == 0) > { > error.markError(ns.node, np, "Layer " + Info.getSampleName(ns.layer) + " > not found in main example"); > return true; > } > > // just one in the original: simple association > if (total == 1) > { > ns.assoc = nsFound; > continue; > } > > // if it is a port, associate by port name > if (ns.layer == Generic.tech().portNode) > { > String name = Info.getPortName(ns.node); > if (name == null) > { > error.markError(ns.node, np, "Port does not have a name"); > return true; > } > > // search the original for that port > boolean found = false; > for(Sample nsList : firstEx.samples) > { > if (nsList.layer == Generic.tech().portNode) > { > String otherName = Info.getPortName(nsList.node); > if (otherName == null) > { > error.markError(nsList.node, np, "Port does not have a name"); > return true; > } > if (!name.equalsIgnoreCase(otherName)) continue; > ns.assoc = nsList; > found = true; > break; > } > } > if (!found) > { > error.markError(null, np, "Could not find port " + name + " in all > examples"); > return true; > } > continue; > } > > // count the number of this layer in example "ne" > int i = 0; > for(Sample nsList : ne.samples) > { > if (nsList.layer == ns.layer) i++; > } > > // if number of similar layers differs: error > if (total != i) > { > > *error.markError(ns.node, np, "Layer " + Info.getSampleName(ns.layer) + " > found " + total + " times in main example, " + i + " in others");* > return true; > } > > > > [image: image.png] > Steven Rubin <[email protected]>: Nov 28 08:51AM -0800 > > You need to understand that the "Technology Editor" (one of three ways > to define a technology) is limited because it uses graphical examples to > describe the shape rules. It does not understand examples where the > number of cuts grows, and I believe it uses other methods to determine > this phenomenon. But in the long run, when you need specialized > technology features, the Technology Editor is not able to help anymore. > The "Technology Creation Wizard" is also limited. But the third way to > edit a technology is to hand edit the XML, and that is how you can get > those unusual rules included. > > -Steven Rubin > > On 11/28/2020 8:11 AM, Alexandre Rusev wrote: > Back to top <#m_3628559767683498907_digest_top> > You received this digest because you're subscribed to updates for this > group. You can change your settings on the group membership page > <https://groups.google.com/forum/?utm_source=digest&utm_medium=email#!forum/electricvlsi/join> > . > To unsubscribe from this group and stop receiving emails from it send an > email to [email protected]. > -- You received this message because you are subscribed to the Google Groups "Electric VLSI Editor" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/electricvlsi/CACoSTq%2B9uwVSRtcuQAvbc5SrH3iL4%3D0QGdZ%2BuwL%2Bs4vK_-YgGw%40mail.gmail.com.
