# Verilog netlister README

    Verilog netlister readme.

    THIS IS FREE SOFTWARE, see the included file COPYING for more info.

    Latest README:

    	This is the fifth release of the Verilog netlister for gEDA.

    	New in this release:

    	1) Escaped Verilog identifiers.

    	To facilitate board level simulations, the Verilog netlister now
    outputs `escaped' Verilog identifiers for any net, port or instance name
    that does not appear to be a valid Verilog identifier.  In this way,
    chips with numbered pins can be netlisted and models constructed to run
    digital simulations of complete circuits.

    		Mike Jarabek

    ----- OLDER README.verilog's -----

    	This is the fourth release of the Verilog netlister for gEDA.

    	New in this release:

    	1) Multiple width wires.

    How to use: (mostly taken from a previous readme... )

           Here's how to proceed to make a schematic that can be netlisted
    to verilog.

    	   1) Create your modules by the standard method, keep in mind
                  that you must supply a `pin#' attribute for each port
                  you want to create in the generated verilog.  gmk_sym is
                  useful for this.

    	   2) Place each of your newly created modules on the
                  schematic.  You may also place primitives from the
                  `verilog' symbol library.  Be sure to give a _unique_
                  `uref' to every symbol you place on the schematic,
                  unless two symbols are actually different parts of the
                  same module, and the pins listed on each symbol do not
                  have any names in common.  Otherwise they will not get
                  netlisted.

    	   3) Connect nets between the modules you want.  Remember, if
                  you want legible Verilog later, don't forget to name all
                  your nets by attaching `label' attributes to them.  For
                  Multiple bit wires just use standard Verilog notation.
                  The netlister will figure out which bit ordering you
                  want.  Be sure to have at least one net labeled with the
                  complete range expression, otherwise the netlister will
                  guess at whether you wanted net[15:0] or net[0:15] in
                  your declarations.  Any inconsistent ranges will be
                  reported as a warning.  Strings that appear to be
                  invalid Verilog identifiers will be printed with a
                  warning, but otherwise ignored. (If you get a warning
                  for a valid Verilog identifier, please post a bug
                  report!)

    	   4) Insert IPAD's, OPAD's, and IOPAD's for all the nets you
                  want to be visible in the module declaration statement.
                  It is especially important to make sure that the nets
                  you hook up to the pads are named, as the net names
                  could change from run to run, that's a bad thing. (I/O
                  pads would be a good place to put the aformentionned
                  full range expressions.  Range expressions on I/O pads
                  are ignored when outputting the module declaration, but
                  they are used in figuring out the final bit ranges.)
                  Every pad must have a unique uref, otherwise the
                  netlister will get confused.

     	   5) Add an unattached attribute `module_name=Your_Module'
    	      somewhere on the schematic, near the title block is
    	      good.  This will name the generated Verilog module
    	      `Your_Module'.

    	   6) Save your design.

    	   7) Run the schematic through the netlister:

    		  gnetlist -g verilog -o output.v schematic.sch

               7a) Check the output for correctness, _especially_ if you got
                   any warnings. (There should be no warnings.)

    	   8) Feed the netlist to your favorite simulator/synthesis tool.

    					Mike Jarabek

            This is the third release of the Verilog netlister for geda.

            Fixed in this release:

            1) Netlister no longer barfs if there are no
               Input/Output/InOut ports on the module.

            2) Module instantiation code much improved/cleaned up, mostly
               due to g_netlist.c patch.

            New in this release:

            1) A whole wack-load of symbols, I created a C program that
               generates n-input versions of and, nand, or, nor, xor, and
               xnor symbols

            2) Modules instantiated with positional port connections.
               Just add the attribute `VERILOG_PORTS=POSITIONAL' to your

              symbol file as an unattached attribute, or attach it to the
               symbol on the schematic.

            3) Added bufif?, notif?, not and buf symbols.

            4) Added example of positional port module instantiation to
               the example schematic

            5) Added 7447 example schematic

            Coming:

            1) Module instantiation parameters. (probably by an attribute)

            Included in this tar-ball are three patch files against the
            19990705 version of gEDA.  Apply g_netlist.c.diff and
            g_register.c.diff to the files in gnetlist/src/ and
            gnetlist.scm.diff to gnetlist.scm in the gnetlist/scheme
            directory. You may have to regenerate prototype.h, or manually
            patch it. Replace the symbols in the sym/verilog directory
            with the symbols in this distribution. (I have modified all of
            the symbols to use the new unattached attribute convention for
            device et al.) (if you have applied the patch I sent to the
            mailing list that fixes netlisting a module with no ports, you
            may have trouble applying the gnetlist.scm.diff patch.) Don't
            forget to do a `make all install' after applying the patches.

    	Once again, to netlist the example schematics to verilog type:
            (Assuming gnetlist has been patched and is properly installed.)

            gnetlist -g verilog -o test.v examples/sch/test.sch

            or

            gnetlist -g verilog -o 7447.v examples/sch/7447.sch

    (This README was from 19990629)
    Verilog netlister readme.

    THIS IS FREE SOFTWARE, see the included file COPYING for more info.

    	This is the second release of the Verilog netlister for geda.

    	Fixed in this release:

    	1) The last comma in the argument list to instantiations and
               module definitions is now suppressed

    	2) Better handling of `special' components has been added

    	New in this release:

    	1) Continuous assignments to 1'b0 and 1'b1 can now be
               generated by connecting the `high' or `low' symbol to a
               net.

    				Mike Jarabek
    				mjarabek@playground.net

    --

    	This the verilog netlister for gEDA.  Included in the tarball
    are several diff files against the 19990327 gEDA distribution.  All of
    the patches apply to the gnetlist subirectory.  You should be able to
    apply them with `patch -p1'.

          The netlister has its limitations:  (most of these will
    eventually get fixed, I hope..)

    	   1) Components connected by reference, (i.e. by having named
                  net stubs attached to pins, but not conected by a
                  continuous line) create duplicate entries in the wire
                  declaration section of the verilog code.

    	   2) Multiple width wires don't work.  (Busses will help
                  this)

    	   3) There is no way to force a signal to 1,0,z,x (yet).

    	   4) Some scheme code needs to be improved. (Mainly the
                  classification code, it inserts `()' elements into the
                  output lists. (I should know how to fix this in a day or
                  two.. too bad I never got a scheme course before..))

    	   5) I don't know if this will work on multiple page schematics.

    	   6) The top level module is outputted with the same name
                  every time, I don't currently think there is a way to
                  get at the name of the top level schematic.

          The netlister does some neat things:

    	   1) It outputs a verilog module with proper port
                  declarations, outputs are declared as outputs, inputs
                  are declared as inputs, and bidirectional signals are
                  declared as inouts.

    	   2) All nets that are found on the design are declared as
                  wires. (This is to allow for net attributes later to
                  declare wand's and such)

    	   3) Any components placed on the schematic that are given
                  uref attributes create a verilog instantiation for the
                  name of the module as stored in the `device' attribute,
                  the instatiated name is given as the `uref' attribute.

    	   4) All connections into and out of instantiated modules are
                  made by name, and not by order, because I can't be sure
                  that the order will be right coming off the schematic.
                  (anyway, that's better for the long run.)

    	   5) A comment is inserted at the top of the module to say
                  that the file was automatically generated.

           Here's how to proceed to make a schematic that can be netlisted
    to verilog.

    	   1) Create your modules by the standard method, keep in mind
                  that you must supply a `pin#' attribute for each port
                  you want to create in the generated verilog.  gmk_sym is
                  useful for this (with the patch to allow ascii pin names).

    	   2) Place each of your newly created modules on the
                  schematic

    	   3) Connect nets between the modules you want.  Remember, if
                  you want legible verilog later, don't forget to name all
                  your nets by attaching `label' attributes to them.

    	   4) Insert IPAD's, OPAD's, and IOPAD's for all the nets you
                  want to be visible in the module declaration statement.
                  It is especially important to make sure that the nets
                  you hook up to the pads are named, as the net names
                  could change from run to run, that's a bad thing.

    	   5) Save your design.

    	   6) Run the schematic through the netlister:

    		  gnetlist -g verilog -o output.v schematic.sch

               6a) Edit the output file to have the right module name, and
                   to remove any duplicate wires.

        There is an example schematic in the schematic directory, and a
        copy of the verilog netlist generated.

    The mechanics:

        The I/O ports for the module are detected by enumerating all of
        the nets attached to any symbol bearing the device name of `IPAD',
        `OPAD', or `IOPAD'.  If you name one of your blocks with that
        name, don't be surprised if you find `extra' ports in the module
        declaration.

        The wires are declared by walking through the list of nets
        returned by the function that I patched into gnetlist.  This is
        the source of the duplicate wire declarations.  This should
        probably get fixed when `net_is_duplicate' gets set for
        connections made by reference.

        Module instantiations are created by enumerating the pins found on
        a symbol and connecting the nets found to the pins.  If your block
        has spelling errors, then the module instantiation won't work.
        You will have to manually trace back to find the error.

    				Mike Jarabek

    ------------ Below is the previous version README -------------------

    Verilog netlister readme.

    THIS IS FREE SOFTWARE, see the included file COPYING for more info.

    	This the verilog netlister for gEDA.  Included in the tarball
    are several diff files against the 19990327 gEDA distribution.  All of
    the patches apply to the gnetlist subirectory.  You should be able to
    apply them with `patch -p1'.

    [ editor's note, if you are reading this file in a gEDA dist, then all
      the required patching and integration is already done ]

          The netlister has its limitations:  (most of these will
    eventually get fixed, I hope..)

    	   1) Components connected by reference, (i.e. by having named
                  net stubs attached to pins, but not conected by a
                  continuous line) create duplicate entries in the wire
                  declaration section of the verilog code.

    	   2) Multiple width wires don't work.  (Busses will help
                  this)

    	   3) There is no way to force a signal to 1,0,z,x (yet).

    	   4) Some scheme code needs to be improved. (Mainly the
                  classification code, it inserts `()' elements into the
                  output lists. (I should know how to fix this in a day or
                  two.. too bad I never got a scheme course before..))

    	   5) I don't know if this will work on multiple page schematics.

    	   6) The top level module is outputted with the same name
                  every time, I don't currently think there is a way to
                  get at the name of the top level schematic.

          The netlister does some neat things:

    	   1) It outputs a verilog module with proper port
                  declarations, outputs are declared as outputs, inputs
                  are declared as inputs, and bidirectional signals are
                  declared as inouts.

    	   2) All nets that are found on the design are declared as
                  wires. (This is to allow for net attributes later to
                  declare wand's and such)

    	   3) Any components placed on the schematic that are given
                  uref attributes create a verilog instantiation for the
                  name of the module as stored in the `device' attribute,
                  the instatiated name is given as the `uref' attribute.

    	   4) All connections into and out of instantiated modules are
                  made by name, and not by order, because I can't be sure
                  that the order will be right coming off the schematic.
                  (anyway, that's better for the long run.)

    	   5) A comment is inserted at the top of the module to say
                  that the file was automatically generated.

           Here's how to proceed to make a schematic that can be netlisted
    to verilog.

    	   1) Create your modules by the standard method, keep in mind
                  that you must supply a `pin#' attribute for each port
                  you want to create in the generated verilog.  gmk_sym is
                  useful for this (with the patch to allow ascii pin names).

    	   2) Place each of your newly created modules on the
                  schematic

    	   3) Connect nets between the modules you want.  Remember, if
                  you want legible verilog later, don't forget to name all
                  your nets by attaching `label' attributes to them.

    	   4) Insert IPAD's, OPAD's, and IOPAD's for all the nets you
                  want to be visible in the module declaration statement.
                  It is especially important to make sure that the nets
                  you hook up to the pads are named, as the net names
                  could change from run to run, that's a bad thing.

    	   5) Save your design.

    	   6) Run the schematic through the netlister:

    		  gnetlist -g verilog -o output.v schematic.sch

               6a) Edit the output file to have the right module name, and
                   to remove any duplicate wires.

        There is an example schematic in the schematic directory, and a
        copy of the verilog netlist generated.

    The mechanics:

        The I/O ports for the module are detected by enumerating all of
        the nets attached to any symbol bearing the device name of `IPAD',
        `OPAD', or `IOPAD'.  If you name one of your blocks with that
        name, don't be surprised if you find `extra' ports in the module
        declaration.

        The wires are declared by walking through the list of nets
        returned by the function that I patched into gnetlist.  This is
        the source of the duplicate wire declarations.  This should
        probably get fixed when `net_is_duplicate' gets set for
        connections made by reference.

        Module instantiations are created by enumerating the pins found on
        a symbol and connecting the nets found to the pins.  If your block
        has spelling errors, then the module instantiation won't work.
        You will have to manually trace back to find the error.

    				Mike Jarabek