It looks like you're new here. If you want to get involved, click one of these buttons!
Hi sir,
I got a hard issue as attached file and figure below.
as this shown I want to draw a path by 13um , like the red-line I maked in picture.
This line start from left side of layer 71/0 , end at right side of layer 71/0 for the X-asix.
Path width is 13um and here is limitation:
1.keep it out of Mask pattern by 1um.
2.path "connections" can be "Diagonal" only.
3.Can been drawing run into the area of up-edge to down-edge by Y-asix.
as this case in GDS , we have around 1000um for the routing space.
this is a simple sample , in the real case we have so many Mask pattern and it is reason we can't make the path as a straight line.
Now , we make the path by manu manual , do you have any idea to make a scrpit for that?
in this case , we have so many path solution can be using , just make it keep the 3 rules.
I guess that I have to using xor or other function to find/define where the path routing area.
But I have no idea for the more detail .
Is it possible to make a script for that?
Comments
Hi jiunnweiyeh
Here's a example that sometimes works under certain senerio.
Because this scrip is not clever enough to optimize to the pattern and path, you might need to fiddle around those magic numbers that hard coded in the script in order to make it even just show something if layout is changed.
The script involves three main sections:
genNodes :
L(110, 0)
genGridNodes:
L(110, 0)
nodeHash
.nodeHash
with X values, so now we get groups ofnode columns
that is ready to be connected.nodeHash
for path routinggenNodePath:
nodeHash
fromgenGridNodes
, loop through each columns and find minium path for routing(1) genNodes simplify the patterns into orange boxes, later use layer space to extract spaced region.
(2) genNodes space extracted by layer.space, however if the pads are not exactly aligned othogonally, or the pitch change between sections than this part will not work correctly.
(3) genNodes simplify the space into nodes, again, if the pitch diviates alot from each other, this part also will not work.
(4) after genGridNodes, the nodes is being grouped by column, iterate throuth each column and find nodes that is close to previous one.
You probably can tell by now, this method cannot provide perfect 45 deg routing, and is not capable of doing tight routing, basically a run-and-prey type of algorithm.
Hi RawrRanger ,
Thanks for your code , I will check it and try to make it into what my code if it is fine.
Thanks.
Holy cow!
@jiunnweiyeh You like these kind of puzzles do you?
From the academic viewpoint that looks like a variant of the path finding problem (see https://en.wikipedia.org/wiki/Pathfinding). "A*" is an algorithm often used in routers for manhattan paths, so maybe this applies here. For any-angle paths algorithms are more complex though (see https://en.wikipedia.org/wiki/Any-angle_path_planning).
I wonder if there is a generic library for that case. As there is a Python module for everything, maybe someone published a useful implementation already?
Matthias
Hi @Matthias
Let me explain this request...
This function , we called "stitching" .
cause the (customer's design) DIE size is large than our exposure machine limitation.
we have to cut our DIE as 2 part for photo Mask design.
but we have some process issue and request for this line ... that must to make it keep out IO/line and other something pattern.
I can't provided full GDS and rule in here , but the guildline would be what I means.
in the real case, IO/Bump/line will more than the sample GDS I provided.
so our designer has make the path as my first post by manual .
when I using RawRanger 's code , I found some of issue and I am tring to fix it or list down the condination.
Thanks very much for all of your help.
Hi jiunnweiyeh,
Here's a revised version, the major differences are:
1) Can route multiple path in predefined regions, the script will perform auto route if routing is not successful
2) Now it can route mostly at 45 deg
3) Reduces huge swing during routing, will propagate using small zig-zag when ever possible
To make it route multiple paths, a guiding layer is required, in this case the layer in teal "L(72, 0) in code" is drawn for thsi purpose.
And for optimizing the route, implementing an A* or other type of path finding algorithms will be neccessary if the layout becomes complicated, without this type of optimization, the path might no always get all the way through to another side.
Due to the example shown here got a quite distinct characteristic, that is the each obsticles is small enough, and in most cases thay don't populated at a way that makes dead ends, so brute forcing this becomes a quick and somewhat feasible method.