I'd like first of all to say thanks--the more I use KLayout, the more impressed I am with how well it works (for me, I use it mainly as a viewer).
Next, I had some questions about the Net Tracer functionality.
A: Is there any way to set up traces with different features (e.g., trace one signal in red, another in green, another in blue, etc.)?
B: I saw the question before in a prior discussion a bit ago, but wanted to ask the same thing--is there any way to deal with structures such as MIM capacitors when setting up the tracing? I've tried unsuccessfully to create a special connectivity layer to deal with the capacitors. Has anyone out there set up tracing with capacitors, and can they offer suggestions?
Regarding A.) there is no different coloring yet. But KLayout supports multiple extractions and displaying them (although not colored differently). Every time you extract a net it gets added to the list of extracted nets. You can delete them and even give them other names (double-click the entry in the net list). You can display multiples of them by using Shift+mouse click on the list of nets. That may provide a way to visualize multiple nets more efficiently.
Basically you can export nets to a new layout cell and save this cell as a separate layout. Using the layout overlay feature of KLayout offers you many options like specific coloring.
Regarding B.) the net tracer does not support device recognition but just extraction of a single net (resistors might be regarded as part of the net). So I wonder that roles the MIM caps are supposed to play. Connectivity wise they should be isolating. The MIM cap layouts I have encountered myself consisted of an upper and lower plate and some marker for the device. Given that you don't configure the marker layer as a conductive one, the net tracer should stop at one plate.
I would like to bump the question A: It would be really nice to be able to assign different colors to different nets in the net tracer tool. The workaround - while working in principle - is very cumbersome if you often need to trace long neighbouring nets. Any chance to see the different colors implemented anytime soon?
The use case I figured is that you'd basically select one net a time which is highlighted then. Since there is just one net I did not imagine the need for different coloring. The ability to select multiple nets at once is nice, but my reasoning was the one is primarily interested in one net. The workaround is just a suggestion which allows any kind of manipulation, no necessarily is solution for a specific use case. No use case was given, so I could just guess.
Could you describe some scenario in which different coloring is useful? In general I like to focus on a use case rather than a feature - there are so many features, maybe a solution is already there.
In my case, I used it to find a potential short (or strange behavior) between 2 nets in a failed circuit.
So, I needed to highlight the 2 nets to see if they were closed one to each other, and more important the location where the 2 nets ere vry near each other.
But when the 2 nets cross each other, you cannot follow them.
thank you for the explanation - that is a valid scenario.
I agree that multiple colors would make that easier. For a quick solution: how about toggling the nets in the list? My tip of the day here: you can configure the net browser such that it does not change the visible region - that way selecting a net does not interfere with your view. You could call that animation, which is another way of separating the nets ...
I agree that seeing different colors on different nets - and being able turning individual layers on or off, for different nets - is a very useful functionality, and not only for checking nets shorting. For example, it helps to understand a complex design, for people unfamiliar with the design, to perform ESD network analysis and verification, etc.
Unfortunately, what Matthias suggested - animation or manual toggling on/off - is a weaker visual aid than using different colors for different nets.
I think this workaround (or hack) would work for everyone (it works for me, I verified it):
1. trace several nets in klayout, using Trace Net tool.
2. "extract" these nets as cells into opened layout.
3. make a copy of that layout (on the hard drive, using "cp" command on Linux).
4. Open second layout (exact replica) in the same panel as the first one.
5. make a copy of original layout *.lyp (layer properties) file, and replace in that copy all "@1" by "@2".
6. open second layout lyp file (apply it only to the second layout).
Now you have two layouts, having exactly same shapes, with extracted nets as separate cells, and independent control of colors for different cells in different layouts. This is exactly what's needed.
I hope this hack would be easy to script using ruby - easier than implementing such a functionality in C++ code.
Matthias - do you approve this?
This may not be the most efficient approach (performance / memory), but it is a working workaround.
One another issue - if nets are shorted, net tracing would not (automatically) help.
LVS system should report such a short, but I think it would not tell where the short is happening (but I am not an expert in LVS - so please correct me if I am wrong).
The way I handle this, is I use a tool for resistance / current flow simulation - apply one port to one pad, another port (with different voltage) to another pad (on second net), run port-to-port resistance (current flow) simulation, and usually a short is sees as a bright spot with high current density (where a narrow metal is shorting nets, or where the current is turning, etc.).
But, how to select a net within a Ruby script ? and export it in a test file ?
nets are not available by script (yet), so the scripting approach is not possible currently.
The "extract to layout" approach is also valid but I admit it's quite tedious.
Regarding the short detection - That is what the "Trace Path" function is for. You have to click at two points that should not be connected. If they are, KLayout will highlight one path between these points. That path is determined by the smallest number of shapes connected. That is not the path of least resistance, but usually short enough so it can be use to detect the short.
@Matthias (0) : thanks for having pointing out the tip of the day "you can configure the net browser such that it does not change the visible region".
@Maks : this way of approaching the issue is very creative !
@Matthias (1) : the path feature explained this way sounds very powerful ! I will think about it for the next power short issue I will face.
... and one last comment of mine: the next version will come with colors that you can assign individually to each net :-)
this new feature in the next release (different colors for different nets) - will it be available only in Net Tracer?
Let me put my question this way - is it possible (doable at all, difficult, tedious, etc.) - to transform a GDS file into another one, where different nets are placed in different cells, while keeping the rest of the hierarchy present (or at least fully flattened)?
the colorization is just a visualization feature. Separating a layout into nets is doable, but not scope of the net tracer. Instead of separating the whole layout into individual nets, the net tracer's tagret is to extract a single (preferably small) net. So these are different applications and I'm afraid the net tracer is not suitable for that right now.
Will the new versions allow a script that highlight and save a net based on those inputs :
- a layer
- a point coordinates
the net tracer is not accessible through scripts currently. It's an interactive feature only. I plan to provide script binding to the net tracer, but that will be a major feature.
I was going thruogh the index looking for class I could use to trace net in a macro, but did not find such.
So I'm also voting for Laurent request to have script binding to the net tracer based on layer&coordinate.
Would be a great help.
Thanks much, Itamar
Yes, understood :-)
The net tracer was intended as a GUI feature for layout debugging rather than a non-interactive tool but I see there are applications out there. I have to isolate the code in order to provide an API, so that won't be a quick task.
I am wondering if you have been working on the API for the net tracer feature? I would like to access this in Python. I have developed something similar to photonics (optical waveguides), namely netlist extraction, but there we are only using one layer. For multi-layer electrical connectivity, it would be nice to take advantage of what you already wrote.
yes, I have. I have just migrated the working repo to GitHub, so you can basically check out the latest state: https://github.com/klayoutmatthias/klayout.
There will then be a new class called "NetTracer".
can you give some examples of using NetTracing functionality from a script?
if you build and run KLayout, you will find an example and some documentation in the built-in help in the chapter about the NetTracer class. It's not available as public web page yet.
I find the Ruby example. However, I can not implement with Python. Could you please show me an example with python?