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

Re: gEDA-user: uEDA .. was .. Re: Heavy Symbols and such



On Thursday 06 December 2007, Steve Meier wrote:
> Perhaps what Al is
> suggesting is that vhdl has all the elements needed for
> constructing an internal data structure?

Not really ... The idea is a common interchange format.  Even if 
the data is different, the syntax can be the same.

Steve also said this in private mail (I hope you don't mind my 
repeating it in public):
> I actually think that one of the rather remarkable things
> about geda is the use of a macro language to generate the
> output.
 .... repeated because I agree with it, strongly.

On Thursday 06 December 2007, John Doty wrote:
>  I have no strong preference as  
> long as the result retains gEDA's flexibility.
... also repeated because I agree with it, strongly.

Those last two points are so strong that if the format fails to 
meet either, it must be rejected.

ok ... let's look at the requirements

First, the data.

All of the tools dealing with structure need files consisting of 
the following:

-- The ability to encapsulate into some kind of modules.

Each module contains a list of objects .. "instances".

Each "instance" statement contains 4 parts:

1. The type.
2. The name or label.
3. A list of connections.
4. A list of parameters or attributes.

If you disagree at this point, address it now.

If you can accept that, let's look at some formats.

The obvious one is the Spice format.

R1 1 3 10k
Q2 2 4 5 2n2222
X1 3 5 block

Let's do something a little harder ..
parameterized values, fancy sources, arguments to subcircuit 
calls ...

R1 1 3 bob
Q2 2 3 5 6 lateral area=2
X1 2 4 block d=4 e=6
V1 1 0 pulse (.001 23 44.55 6 0)
X2 a b c d e f g h i j

What is the letter for an op-amp?
What is the letter for an SCR?
What is the letter for a trace on a PC board?
What is the letter for a Via?
Do you remember the order of those arguments on the V1 line? 
-- I don't .
On the X2 line, can you figure out which arguments are nodes, 
which is the name of the subcircuit being called, which are 
parameters?
 -- remember, the ()[]= are all just whitespace!
It seems that every type has different syntax.
Type is encoded in the letter.
It was a good format in 1975.  We have outgrown it.
----- fails both the macro language and flexibility criteria.


The logical outgrowth of this is the Spectre format.
R1 (1 3) resistor r=bob
Q1 (2 3 5 6) lateral area=2
X1 (2 4) block d=4 e=6
V1 (1 0) vsource type=pulse width=1u rise=.1u delay=1u
X2 (a b c) d (e=f g=h i=j)

---- much better.
Still, the parentheses are optional.  You need to scan forward 
to the first "=" to figure out what is where.
It is nice from a human viewpoint, but as is fails the macro 
language test.  It is easy to fix, but they didn't.
Every type has the same syntax, regardless of what it is.

If the parentheses were required it would be an excellent 
format.

One big problem .....
The spec is proprietary.  It belongs to Cadence.

We should support standards, not proprietary formats, except as 
import and export.


How about VHDL ...
r1: entity resistor port map (p => 1, n => 3) generic map
    (resistance => bob);
Q2: entity lateral port map (c => 2, b => 3, e => 5, sub => 6)
    generic map (area => 2);

---- it's regular.  Could be adequate, but lots of extra stuff.
Every type has the same syntax, regardless of what it is.

The full spec (which mostly covers stuff not relevant here) is 
published and available for a price.  The price pays for the 
document itself, no restrictions on implementation.

It is certainly flexible enough.  Does it pass the macro 
language requirement?



Verilog....
resistor #(.r(bob)) r1 (1,3);
lateral #(.area(2)) Q2 (2, 3, 5, 6);
block #(.d(4), .e(6)) b1 (.hot(2), .cold(4));

--- it's not as pretty as the Spectre format, but it is easy to 
parse.

The first argument is always the type.
The parameters, which are optional, are marked with #, and 
enclosed in parentheses.
The label is next,
The ports are enclosed in parentheses.

Either list (ports or parameters) can be listed with the values 
in order, or by name in any order.  By name they always have 
the form .name(value) .. 

So, it meets the needs of retaining the flexibility, and being 
parsable with a macro language.  A statement can be generated 
with one line of code in most programming languages.

Every type has the same syntax, regardless of what it is.

The offical spec can be downloaded at no charge.  Mostly it 
covers behavioral modeling, which is beyond the scope of what 
we need here.


These formats were all designed by people who know Spice and 
needed something more flexible, and more parsable.



You could also make an XML based format to do this.  Note that I 
didn't say "use XML as the format".  Just saying XML doesn't 
say enough.  More info is needed.  It can be done, but there is 
no precedent for it.  There is a library for it, but do we want 
another dependency?  Can you easily parse it with a macro 
language?



Now, to generalize to things other than simulation netlists..

To represent a layout, "types" might say whether it is a via, 
trace, fill block, footprint by name.  The attributes are 
length, width, forms, scaling.  The connections are physical 
locations.  This is the same info that is in a PCB file now.  
(or any layout program)

To represent a schematic, "types" might say whether it is a 
line, dot, or a symbol by name.  The attributes are the 
attributes you specify now, and also perhaps color.  The 
connections are physical locations.  This is the same info that 
is in a gschem file now.  (or any schematic program)

You could extend this to just about anything that can be 
described as such a list of objects.


My proposal is (and has been) to pick one, and make the 
translators go through it as an intermediate format.  Ideally, 
tools could use it directly, but that is not necessary.

There is no standard for languages used by schematic and layout, 
so no basis there for choice.

The high end EDA tools are using something called "open access" 
as a generalized communication format.  There is a library 
available for reading and writing it.  It has several problems.  
The first is that it fails the macro language requirement.  The 
second is that the licensing on the library is not appropriate, 
and it is too complicated to consider rewriting.

The Spice, Spectre, VHDL, and Verilog languages are used by 
simulation and synthesis tools, extensively.  Other than Spice, 
it is easy to translate one to another.

Using a simulation language makes it easy to simulate directly 
from a schematic or layout, with no simulator extensions 
needed, other than to define what the types mean in that scope.

In research settings, I have seen all of these used to represent 
things more general than circuits.

For other uses, just use a different definition of what the 
types mean.

For simulation a PCB trace is a transmission line.
For layout a PCB trace is a box with dimensions.
That part is supplied externally.
The part in the data file can be the same.



So, .. the idea is: pick a syntax.  It must be sufficiently 
flexible and parsable with a macro language.
Then map it.

You could invent a new syntax, but there is no precedent for its 
use in this area, so you are on your own.  Pick one that people 
are already using, we get support from people who are using it, 
including some EDA researchers who would love to be able to use 
gEDA.....  (and have actually asked me about a way to do this, 
that isn't "open access" which isn't really open).








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