====== 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