waywardgeek / gnetman

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Gnetman is a netlist manipulation package.  It's primary goal is to
help provide interoperability between open-source EDA tools.  Gnetman
can currently:

-- Create block symbols for new schematics that are gnetman compatible
-- Read entire gschem schematic designs.
-- Read/write SPICE netlists (various formats)
-- Read/write verilog gate-level netlists
-- Write PCB netlists for the 'pcb' tool on linux

Hopefully, additional capabilities will be added, such as a schematic
generator, or LVS capability.  The gnetman database is designed for just
such tool support.

---------------------------------------------------------------------------
Copyright and license:  All originhal files in this project are licensed under
the GPL 2.0 license.  See COPYING for details.  The copyright on all original
files, as of Sept 5, 2019, belong to ViASIC, which has been bought by Triad
Semiconductor, which now owns the copyright.

The file src/include/tk.h is copyrighted according to the (permissive) license
terms in src/include/tcl_license.terms.  The files src/sch/schtypes.h and
src/sch/schcolors.h are copyrighted by Ales V. Hvezda, under the GNU Library
General Public license, version 2.0.  Generated files by bison and flex are also
licensed under LGPL.  The SWIG generated file src/tcl/tclfunc_wrap.c is
copyrighted by under the TCL license terms in src/include/tcl_license.terms.
---------------------------------------------------------------------------

Using gnetman:

The executable for gnetman is now in the bin directory.  To use gnetman,
the easiest way is command line parameters:

    gnetman -g myschem.sch

will generate a default block symbol for a schematic.

    gnetman -c myschem.sch

will create myschem.cir, which is a hierarchical spice netlist.  If you need the
top level to be a .subcir, use:

    gnetman -C myshem.sch

Some other flags that effect how gnetman runs include:

   -i -- Enter an interactive TCL shell after processing command line
   -r <TCL file> -- Use this file as the initialization file, rather than
                    ${HOME}\.gEDA\gnetmanrc.tcl
   -S <spice type> -- Choose a spice target format: pspice, hspice, tclspice,                      or ltspice

The output netlist format defaults to PSpice.

After processing arguments, any TCL files listed on the command line are
executed.
As long as all your symbols and schematics are in the current directory,
the commands above should work.  To tell gnetman how to find schematics
and symbols elsewhere, you need to create a ${HOME}/.gEDA/gnetmanrc.tcl script
of the form:

    component_library {${HOME}/gnetman/sym}
    component_library {${HOME}/mydir1}
    source_library {${HOME}/mydir1}
    component_library {${HOME}/mydir1/mydir2}
    source_library {${HOME}/mydir1/mydir2}
    ...

Note that gnetman supports relative paths in the 'source' attributes on
symbols.  You'll also need to add these commands to the ${HOME}/.gEDA/gschemrc
file:

    (component-library "${HOME}/gnetman/sym")
    (component-library "${HOME}/mydir1")
    (source-library "${HOME}/mydir1")
    (component-library "${HOME}/mydir1/mydir2")
    (source-library "${HOME}/mydir1/mydir2")
    (component-library ".")
    (source-library ".")
    ...

In addition, For CMOS IC design, I recommend the additional commands at the
top of the gschemrc file:

    (reset-component-library)
    (reset-source-library)


These simply remove the default symbol libraries, making it easier to find
the IC ones.

To build schematics compatible with gnetman, you should use the symbols
in the sym directory.  These symbols have gnetman compatible attributes to
help support hierarchy, busses, parameter inheritance, instance arrays, etc.

To test out gnetman, try the following:

    cd test
    gnetman -c reg32.sch           #This creates reg32.cir SPICE netlist
    gnetman -g reg32.sch           #This creates reg32.sym

Bug reports should go to bill@viasic.com 

Copyright ViASIC, 2003-2011, all rights reserved.

---------------------------------------------------------------------------
Schematic feature support:

Gnetman supports several features needed in IC design.  First, hierarchy.
As described in the master attribute document for gschem, the source
attribute is used to locate a sub-schematic.  To connect signals, we have
these additions:

device=FLAG

This says that a symbol is a schematic flag.  The type (in, out, etc) is
determined from the pin on the flag, of which there may be only one.  For
an input flag, make the pin type an output.  Good symbols to use for flags
are "in.sym", "out.sym", and "io.sym" in the sym directory.

Net and bus names will be infered from flags if there is no netname attribute
present.  Unnamed nets will be numbered in each schematic starting from N1.
Unamed instances will be numbered starting from U1.  Any instance name
ending with a '?' is taken to be an unnamed instance, in which case the
prefix of the '?' is used to make a unique name in the schematic by appending
an integer.

Both bus and instance names can be of the form IDENT[<integer>:<integer>].
If an instance has a range, it will instantiate an array of instances,
much like what happens in Verilog or VHDL with arrays of instances.

In CMOS design, it's common to place attributes such as transistor width
on symbols and have them propogate down.  This is supported.  An attribute
of the form "W={P}" on a mosfet will take the value of the "P" attribute
placed on the higher level symbol.

SPICE device types are currently infered from the first letter of the name
of an instance.  This will probably be improved to double check the device
attribute as well in the near future.

Block symbols can be generated from a schematic automaticall by gnetman.
The I/Os are determined by the flags found in the schematic.  Any I/O
capable of driving will be placed on the right, and input-only I/Os will
be on the left.  The order of the I/Os is determined by the Y coordinate
of the flags in the schematics.  The pinseq attribute is currently ignored.

For examples of all of these features, check out schematics in the test
directory.

---------------------------------------------------------------------------
Creating new SPICE symbols:

The spice netlister in gnetman is meant to be highly configurable.  To
create a new spice symbol, you might want to start by copying an existing
one from the sym directory, such as the nmos or pmos symbol.  Be careful
to edit the symbol file directly with an ASCII editor to make sure the
attributes look OK.  For example, if you copy the nmos.sym file, be sure
to delete the attribute that define the base tie-off ("net=vdd:B").

The key attribute that identifies a component to the spice netlister as
a special spice device is the "spicetype" attribute that should be placed
as a floating attribute somewhere on the symbol.  It should not be visible.
The device types found in LT-Spice are currently built-in as defaults that
are recognised by gnetman.  These types are:

'arbitrary behavioral source' B n+ n- [V=<equation>] [I=<equation>]
'capacitor' C n+ n- <capacitance> [ic=<value>] [Rser=<value>]
    [Lser=<value>] [Rpar=<value>] [Cpar=<value>] [m=<value>]
'diode' D A K <model> [<area>]
'voltage dependent voltage' E n+ n- nc+ nc- <gain>
'current dependent current' F n+ n- <Vnam> <gain>
'voltage dependent current' G n+ n- nc+ nc- <transconductance>
'current dependent voltage' H n+ n- <Vnam> <transres>
'independent current source' I n+ n- <current>
'JFET transistor' J D G S <model> [area] [off] [IC=<Vds,Vgs>] [temp=<T>]
'mutual inductance' K L1 L2 <coefficient>
'inductance' L n+ n- <inductance> [ic=<value>] [Rser=<value>] [Rpar=<value>]
    [Cpar=<value>] [m=<value>]
'MOSFET transistor' M D G S B <model> [L=<length>] [W=<width>] [AD=<area>] [AS=<area>]
    [PD=<perim>] [PS=<perim>] [NRD=<value>] [NRS=<value>] [off]
    [IC=<Vds,Vgs,Vbs>] [temp=<T>]
'lossy transmission line' O L+ L- R+ R- <model>
'bipolar transistor' Q C B E [S] <model> [area] [off] [IC=<Vbe,Vce>] [temp=<T>]
'resistance' R n1 n2 <value>
'voltage controlled switch' S n1 n2 nc+ nc- <model> [on] [off]
'lossless transmission line' T L+ L- R+ R- ZO=<value> TD=<value>
'uniform RC-line' U n1 n2 ncommon <model> L=<len> [N=<lumps>]
'independent voltage source' V n+ n- <voltage>
'current controlled switch' W n1 n2 <Vnam> <model> [on] [off]
'MESFET transistor' Z D G S <model> [area] [off] [IC=<Vds,Vgs>]

Attributes in the above list in angle brackets are manditory attributes
that must appear either on the symbol or the instance.  If an attribute
appears in both places, the instance attribute overrides the symbol
attribute.  Attributes in square brackets are optional attributes.

The syntax shown above is literally parsed by the spice netlister to determine
how to write out device types.  To add a new device type, just add a command
to your gnetmanrc file of the form:

    add_spice_device {<string>}

The string should look just like one of the lines above.

If you do make new devices, consider sharing them with others.  If you
e-mail them to bill@viasic.com, I'll put them in.

---------------------------------------------------------------------------
Compilation:

Ubuntu Linux:

To compile this project on Ubuntu, do the following:

    cd src/batch
    ./configure
    make

The result of make is a bin/gnetman program.

Other Linux:

This has not been well tested, so if you run into trouble, let me know!

Windows:

There is a .dsp project file in src/batch that can be used to build gnetman
for Windows using Microsoft Visual C++.  It's old, and needs work.

---------------------------------------------------------------------------
TCL scripting:

Gnetman also can execute TCL scripts.  If you specify any TCL scripts
on the command line, the TCL files should contain TCL code, and can
execute the additional TCL commands:

$config_dir - A variable pointing to the configuration file directory
set_current_design designName 
set_current_netlist netlistName 
set_root_netlist netlistName 
create_net netName 
merge_net_into_net sourceNetName destNetName 
get_current_design 
read_spice_netlist designName spiceFileName 
component_library dirName 
source_library dirName 
reset_source_library 
reset_component_library 
set_spice_target spiceType 
add_spice_device device 
create_default_symbol schemName 
read_schematic designName schemName 
write_spice_netlist spiceFileName includeTopLevelPorts maxLineLength 
write_verilog_netlist verilogFileName 
read_verilog_netlist designName verilogFileName 
generate_devices 
convert_power_insts_to_globals 
thread_global_through_hierarchy globalName createTopLevelPorts 
thread_globals_through_hierarchy createTopLevelPorts 
rename_global globalName newGlobalName 
set_netlist_value netlistName propName value 
get_netlist_value netlistName propName 
set_inst_value instName propName value 
get_inst_value instName propName 
set_net_value netName propName value 
get_net_value netName propName 
explode_instance_arrays 
get_first_inst 
get_next_inst instName 
get_first_net 
get_next_net netName 
get_first_netlist 
get_next_netlist netlistName 
get_inst_internal_netlist instName 
net_exists netName 
inst_exists instName 

Note that TCL uses {}'s to enclose strings without any substitution,
unlike bash or other shells, which use single quotes.

If there is a gnetemanrc.tcl file in ~/.gEDA, it will be executed before
processing command line arguments.  This makes a good place to put a
set_spice_target command, for example.  If there is a gnetmanrc.tcl file
in the current working directory, it will be executed next.

About

License:GNU General Public License v2.0


Languages

Language:C 93.0%Language:C++ 2.7%Language:Yacc 1.7%Language:Lex 1.4%Language:Shell 0.5%Language:Tcl 0.4%Language:HTML 0.2%