[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

Re: gEDA-user: wishful UI



Hello Paul,

On Aug 15, 2010, at 4:08 AM, Paul Tan wrote:

> Hi John Doty,
> 
> On Aug 14, 2010; 02:45pm; John Doty wrote:
>> No. It can happen whenever you have multiple
>> symbols with the same refdes, regardless of
>> the back end. Slotting is a particular case
>> of this, but not the only one. It's a pure
>> gnetlist problem, having nothing to do with
>> pcb.
> 
> That is the problem, "whenever you have multiple
> symbols with the same refdes", as I suspected
> and mentioned in my previous post.
> 
> You might already know, other backends such
> as Verilog, VHDL, etc do not have this
> problem, because they all expect unique
> "refdes" value for each symbol instance.

The data from multiple symbol instances with the same refdes is combined in the front end, regardless of the back end. This can therefore occur with any back end, I think. You can, for example, split a SPICE vcvs into two symbols if you wish to in gEDA, using either of the SPICE gnetlist back ends. The power of orthogonal design. 

> 
> Gnetlist frontend algorithm expects unique
> "refdes" from the schematic file to give you
> the correct result.

Except that many of us split components into functional blocks (not necessarily slots).

An extreme example is my pins2gsch script (http://www.gedasymbols.org/user/john_doty/tools/pins2gsch.html).

> This is reasonable,
> because the Gnetlist frontend treats "refdes"
> attribute value in .sch file as unique ID
> for "LOGICAL_SYMBOL"; instead of for
> "PCB_PACKAGE" which may contain variable
> numbers of "LOGICAL_SYMBOL"s.
> 
> The final PCB netlist wants to see "PACKAGE_refdes"
> instead of "LOGICAL_SYBOL_refdes". So one of the
> solution is (as I stated before and expalin
> here):
> 
> 1) Assign unique "refdes" value to all netlistable
>   logical symbols in the schematic. If the
>   logical symbol is one of several in a
>   "PHYSICAL_package", then assgined "refdes"
>   to each logical symbol such as "Uxx_yy";
>   where yy is the value to identify
>   a particular "LOGICAL_SYMBOL" among several
>   within a "PCB_PACKAGE"; and xx value is the
>   ID to differentiate among all "PCB_PACKAGE"
>   for your design. Uxx is what you want to
>   see in your PCB netlist.
> 
> 2) Your backend Scheme code should strip the
>   "_yy" from "Uxx_yy" when outputing your
>   PCB's "PACKAGE_refdes" Uxx.

But it's an issue that affects all back ends, not just the pcb back end (which I never use).

> 
> If this solution is not what you want, there
> are others I can suggest. Yes, ofcourse, you
> can fix it at the Gnetlist frontend, in which
> case, that fix should not affect other backends
> which require unique "refdes" for symbol instance.

A front end function gnetlist:get-all-symbol-attributes would make a pretty decent primitive factor here. It could return a nested list like:

(  (  ( "refdes" "U1" )
      ( "device" "7400" )  )
   (  ( "refdes" "U1" )
      ( "device" "14pwr" )
      ( "footprint" "dip14" )  )
   (  ( "refdes" "C1" )
      ( "device" "CAPACITOR" )
      ( "footprint" "0805" )
      ( "value" "0.1uF"  )  )
...
)

In this example, a 7400 is broken into two functional blocks, logic and power, an example of a rather common practice.

Then, several gnetlist primitives could be eliminated:

gnetlist:get-package-attribute
gnetlist:vams-get-package-attributes
gnetlist:get-slots
gnetlist:get-unique-slots

These would become convenience functions in gnetlist.scm, using the common primitive above. Existing front ends need them, and they're fine functions to have. They just aren't sensible as primitives.

John Doty              Noqsi Aerospace, Ltd.
http://www.noqsi.com/
jpd@xxxxxxxxx




_______________________________________________
geda-user mailing list
geda-user@xxxxxxxxxxxxxx
http://www.seul.org/cgi-bin/mailman/listinfo/geda-user