At 11:26 AM 6/9/01 +1000, Geoff Harland wrote:
>Protel should *not*
>contemplate removing support for split planes (and should even *still*
>contemplate acting on a previous suggestion of mine: that the capability be
>provided for split plane polygons to reside *entirely* within other split
>plane polygons).
I want to underscore what Mr. Harland has written. Split plane support
should have been provided for nested planes from the beginning. It is not
more difficult to define copper affiliation with nested planes than with
regular distinct planes, it is merely a different alogrithm.
An algorithm description (skip between *** if this stuff is not of interest):
***
I'd use a line crossing algorithm; to determine the affiliation of a point,
one would scan all points with, say, the same y coordinate, beginning with,
say negative infinity (or perhaps workspace edge, but no reason to not use
the minimum x coordinate of all primitives, and the latter would be safer).
A "scan" is a sorted list of all nodes and boundary crossings with a given
y coordinate. The node locations exist in the database; the boundaries will
usually need to be calculated from intersection with the polygon segments.
When a split plane edge belonging to a new split is crossed, the current
affiliation (which begins with default net affiliation for the plane layer
itself) is pushed onto a stack and the current affiliation becomes that of
the polygon entered. With the affiliations, current and stacked, a polygon
identifier is also kept. Crossing the boundary of a split which is current
causes the removal of the current affiliation, which becomes what is on the
top of the stack. Crossing a boundary which belongs to a polygon in the
stack other than the current polygon causes the removal of that polygon
from the stack; but [a set of nodes assigned since the previous boundary
crossing will become ambiguous]. When coincident boundaries are crossed,
any polygon whose boundary is crossed at that point is removed from current
or stack. If only a single boundary remains among those which were
coincident, the affiliated net and polygon become current. If more than one
boundary remains subsequent nodes are marked as pending, belonging
potentially to any one of the involved polygons. When another boundary is
crossed belonging to one of the pending polygons, intermediate nodes are
assigned to that polygon and its net and that polygon is removed from
current and the list of pending polygons. When only one polygon remains in
the pending list, it becomes current.
If the next boundary crossing, while there are pending polygons, is
coincident for more than one of the pending polygons, there is a length of
the scan which is, so far, undefined. A simple solution, as with the
ambiguous condition above, would be to mark the polygons as illegally
coincident, asking the user to split at least one of them so that there is
not any ambiguity. (Double crossings would be relatively unusual and easy
to split; a tool could be provided that would automatically split the
polygons into unambiguous and ambiguous sections; the user would then edit
the ambiguous sections -- now independent polygons -- to specify the net to
which they belong. In fact, such a tool would be useful for other reasons
as well; right now there is no easy way to split a polygon into two
polygons without basically redrawing both.) It would be possible to
intelligently assign the ambiguous sections in some cases (basically, any
polygon which includes no area outside that of another is either
unambiguous, even if the algorithm described considers it so, or it is
coincident, which is an error condition.
I'm not satisfied with the completeness of this description, but that's
about as far as I'll go with it now.
****
Now, right now we could make a tool which would discover ambiguous sections
and split them; but Protel will not handle even unambiguous,
fully-contained nested split planes, and planes are calculated, so there is
no workaround. And as soon as I write "no workaround," the gears start
turning. It would not be easy, but it would be possible to write a tool
which would split the outer plane in such a way as to leave the inner
polyon uncontained, and *maybe* the segments that do this could be moved to
another layer or something like that so that the plane would plot properly.
But I'm not sure, I'd have to experiment some.
>The other desirable enhancement for Power Plane layers has been mentioned on
>assorted previous occasions, but for the record, I will repeat it now. It
>would be nice if the Design Rule checking procedure could detect (through
>hole) pads and vias which are disconnected from *other* pads and vias
>connected to the *same* net on each Power Plane layer (or in an extension of
>this concept, whenever the "quality" of each such connection is not
>compliant with a minimum standard defined by the user). But this is easier
>said than done, and I think that it is realistic to say that it would be
>more difficult to implement than supporting split planes being totally
>surrounded by other split planes on each of these layers. (However, the fact
>that it would not be straightforward to implement still does not alter the
>desirability of having it provided.)
I consider this improvement essential, in fact. It is a major hole in the
DRC process. Some solutions have been discussed in the past. One is to go
to positive-negative merges, requiring an explicit connection (positive)
with the negative planes merely filling out the space and being correct by
design (i.e., they are kept clear of possible shorts by design rule, and
they would *not* by themselves create any connections.) Another solution is
to use some of the autorouter code or another flood router to identify the
existence of paths of the required width between nodes, entirely contained
within the copper of the negative plane.
Going to a positive/negative solution would be better because it would also
have other uses, but best would be a combination solution:
positive/negative, and the positive tracks are added by an autorouter.
Among other things, this would completely solve the nested plane problem.
This would be the procedure:
(1) Place a plane polygon, similar to a copper pour. (In fact, the present
copper pours would become unnecessary). This plane would define all space
within itself, clear of other conductive primitives by design rule
distances, as copper, assigned to a net. But it would not itself connect to
any pads or vias. It would remain clear of pads and vias net-affiliated
with it by the thermal relief distance defined by rule. (Direct connect
pads and vias would likewise be clear by this distance)
(2) Automatically or by command, an autoroute routine identifies paths
contained entirely within the plane which implement any possible
connections to the plane. The thermal relief connecting spokes would be
added as necessary (or sufficient positive copper to direct-connect vias or
pads as required) and track would be put down connecting the spokes. If a
path cannot be found, the pad or via will not be connected, which will be
detected by DRC.
[EMAIL PROTECTED]
Abdulrahman Lomax
P.O. Box 690
El Verano, CA 95433
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* To post a message: mailto:[EMAIL PROTECTED]
*
* To leave this list visit:
* http://www.techservinc.com/protelusers/subscrib.html
* - or email -
* mailto:[EMAIL PROTECTED]?body=leave%20proteledaforum
*
* Contact the list manager:
* mailto:[EMAIL PROTECTED]
*
* Browse or Search previous postings:
* http://www.mail-archive.com/[email protected]
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *