diff options
| author | Clifford Wolf <clifford@clifford.at> | 2013-07-20 15:19:12 +0200 | 
|---|---|---|
| committer | Clifford Wolf <clifford@clifford.at> | 2013-07-20 15:19:12 +0200 | 
| commit | 61ed6b32d1f5fbfda9c6effdaa678092f8156bfa (patch) | |
| tree | 3a53692cbd93a09eabeb67eff5e9e4ace5cf1a3e /manual/command-reference-manual.tex | |
| parent | 3650fd7fbe45a00792770d9ecb9397bc27ea0845 (diff) | |
| download | yosys-61ed6b32d1f5fbfda9c6effdaa678092f8156bfa.tar.gz yosys-61ed6b32d1f5fbfda9c6effdaa678092f8156bfa.tar.bz2 yosys-61ed6b32d1f5fbfda9c6effdaa678092f8156bfa.zip  | |
Added Yosys Manual
Diffstat (limited to 'manual/command-reference-manual.tex')
| -rw-r--r-- | manual/command-reference-manual.tex | 1135 | 
1 files changed, 1135 insertions, 0 deletions
diff --git a/manual/command-reference-manual.tex b/manual/command-reference-manual.tex new file mode 100644 index 000000000..ce71ce1e0 --- /dev/null +++ b/manual/command-reference-manual.tex @@ -0,0 +1,1135 @@ +% Generated using the yosys 'help -write-tex-command-reference-manual' command. + +\section{abc -- use ABC for technology mapping} +\label{cmd:abc} +\begin{lstlisting}[numbers=left,frame=single] +    abc [options] [selection] + +This pass uses the ABC tool [1] for technology mapping of yosys's internal gate +library to a target architecture. + +    -exe <command> +        use the specified command name instead of "yosys-abc" to execute ABC. +        This can e.g. be used to call a specific version of ABC or a wrapper. + +    -script <file> +        use the specified ABC script file instead of the default script. + +    -liberty <file> +        generate netlists for the specified cell library (using the liberty +        file format). Without this option, ABC is used to optimize the netlist +        but keeps using yosys's internal gate library. This option is ignored if +        the -script option is also used. + +    -nocleanup +        when this option is used, the temporary files created by this pass +        are not removed. this is useful for debugging. + +This pass does not operate on modules with unprocessed processes in it. +(I.e. the 'proc' pass should be used first to convert processes to netlists.) + +[1] http://www.eecs.berkeley.edu/~alanmi/abc/ +\end{lstlisting} + +\section{cd -- a shortcut for 'select -module <name>'} +\label{cmd:cd} +\begin{lstlisting}[numbers=left,frame=single] +    cd <modname> + +This is just a shortcut for 'select -module <modname>'. + + +    cd <cellname> + +When no module with the specified name is found, but there is a cell +with the specified name in the current module, then this is equivialent +to 'cd <celltype>'. + +    cd .. + +This is just a shortcut for 'select -clear'. +\end{lstlisting} + +\section{dfflibmap -- technology mapping of flip-flops} +\label{cmd:dfflibmap} +\begin{lstlisting}[numbers=left,frame=single] +    dfflibmap -liberty <file> [selection] + +Map internal flip-flop cells to the flip-flop cells in the technology +library specified in the given liberty file. + +This pass may add inverters as needed. Therefore it is recommended to +first run this pass and then map the logic paths to the target technology. +\end{lstlisting} + +\section{dump -- print parts of the design in ilang format} +\label{cmd:dump} +\begin{lstlisting}[numbers=left,frame=single] +    dump [options] [selection] + +Write the selected parts of the design to the console or specified file in +ilang format. + +    -outfile <filename> +        Write to the specified file. +\end{lstlisting} + +\section{eval -- evaluate the circuit given an input} +\label{cmd:eval} +\begin{lstlisting}[numbers=left,frame=single] +    eval [options] [selection] + +This command evaluates the value of a signal given the value of all required +inputs. + +    -set <signal> <value> +        set the specified signal to the specified value. + +    -show <signal> +        show the value for the specified signal. if no -show option is passed +        then all output ports of the current module are used. +\end{lstlisting} + +\section{extract -- find subcircuits and replace them with cells} +\label{cmd:extract} +\begin{lstlisting}[numbers=left,frame=single] +    extract -map <map_file> [options] [selection] +    extract -mine <out_file> [options] [selection] + +This pass looks for subcircuits that are isomorphic to any of the modules +in the given map file and replaces them with instances of this modules. The +map file can be a verilog source file (*.v) or an ilang file (*.il). + +    -map <map_file> +        use the modules in this file as reference + +    -verbose +        print debug output while analyzing + +    -constports +        also find instances with constant drivers. this may be much +        slower than the normal operation. + +    -nodefaultswaps +        normally builtin port swapping rules for internal cells are used per +        default. This turns that off, so e.g. 'a^b' does not match 'b^a' +        when this option is used. + +    -compat <needle_type> <haystack_type> +        Per default, the cells in the map file (needle) must have the +        type as the cells in the active design (haystack). This option +        can be used to register additional pairs of types that should +        match. This option can be used multiple times. + +    -swap <needle_type> <port1>,<port2>[,...] +        Register a set of swapable ports for a needle cell type. +        This option can be used multiple times. + +    -perm <needle_type> <port1>,<port2>[,...] <portA>,<portB>[,...] +        Register a valid permutation of swapable ports for a needle +        cell type. This option can be used multiple times. + +    -cell_attr <attribute_name> +        Attributes on cells with the given name must match. + +    -wire_attr <attribute_name> +        Attributes on wires with the given name must match. + +This pass does not operate on modules with uprocessed processes in it. +(I.e. the 'proc' pass should be used first to convert processes to netlists.) + +This pass can also be used for mining for frequent subcircuits. In this mode +the following options are to be used instead of the -map option. + +    -mine <out_file> +        mine for frequent subcircuits and write them to the given ilang file + +    -mine_cells_span <min> <max> +        only mine for subcircuits with the specified number of cells +        default value: 3 5 + +    -mine_min_freq <num> +        only mine for subcircuits with at least the specified number of matches +        default value: 10 + +    -mine_limit_matches_per_module <num> +        when calculating the number of matches for a subcircuit, don't count +        more than the specified number of matches per module + +    -mine_max_fanout <num> +        don't consider internal signals with more than <num> connections + +The modules in the map file may have the attribute 'extract_order' set to an +integer value. Then this value is used to determine the order in which the pass +tries to map the modules to the design (ascending, default value is 0). + +See 'help techmap' for a pass that does the opposite thing. +\end{lstlisting} + +\section{flatten -- flatten design} +\label{cmd:flatten} +\begin{lstlisting}[numbers=left,frame=single] +    flatten [selection] + +This pass flattens the design by replacing cells by their implementation. This +pass is very simmilar to the 'techmap' pass. The only difference is that this +pass is using the current design as mapping library. +\end{lstlisting} + +\section{fsm -- extract and optimize finite state machines} +\label{cmd:fsm} +\begin{lstlisting}[numbers=left,frame=single] +    fsm [options] [selection] + +This pass calls all the other fsm_* passes in a useful order. This performs +FSM extraction and optimiziation. It also calls opt_clean as needed: + +    fsm_detect          unless got option -nodetect +    fsm_extract + +    fsm_opt +    opt_clean +    fsm_opt + +    fsm_expand          if got option -expand +    opt_clean           if got option -expand +    fsm_opt             if got option -expand + +    fsm_recode          unless got option -norecode + +    fsm_info + +    fsm_export          if got option -export +    fsm_map             unless got option -nomap + +Options: + +    -expand, -norecode, -export, -nomap +        enable or disable passes as indicated above + +    -encoding tye +    -fm_set_fsm_file file +        passed through to fsm_recode pass +\end{lstlisting} + +\section{fsm\_detect -- finding FSMs in design} +\label{cmd:fsm_detect} +\begin{lstlisting}[numbers=left,frame=single] +    fsm_detect [selection] + +This pass detects finite state machines by identifying the state signal. +The state signal is then marked by setting the attribute 'fsm_encoding' +on the state signal to "auto". + +Existing 'fsm_encoding' attributes are not changed by this pass. + +Signals can be protected from being detected by this pass by setting the +'fsm_encoding' attribute to "none". +\end{lstlisting} + +\section{fsm\_expand -- expand FSM cells by merging logic into it} +\label{cmd:fsm_expand} +\begin{lstlisting}[numbers=left,frame=single] +    fsm_expand [selection] + +The fsm_extract pass is conservative about the cells that belong to a finite +state machine. This pass can be used to merge additional auxiliary gates into +the finate state machine. +\end{lstlisting} + +\section{fsm\_export -- exporting FSMs to KISS2 files} +\label{cmd:fsm_export} +\begin{lstlisting}[numbers=left,frame=single] +    fsm_export [-noauto] [-o filename] [-origenc] [selection] + +This pass creates a KISS2 file for every selected FSM. For FSMs with the +'fsm_export' attribute set, the attribute value is used as filename, otherwise +the module and cell name is used as filename. If the parameter '-o' is given, +the first exported FSM is written to the specified filename. This overwrites +the setting as specified with the 'fsm_export' attribute. All other FSMs are +exported to the default name as mentioned above. + +    -noauto +        only export FSMs that have the 'fsm_export' attribute set + +    -o filename +        filename of the first exported FSM + +    -origenc +        use binary state encoding as state names instead of s0, s1, ... +\end{lstlisting} + +\section{fsm\_extract -- extracting FSMs in design} +\label{cmd:fsm_extract} +\begin{lstlisting}[numbers=left,frame=single] +    fsm_extract [selection] + +This pass operates on all signals marked as FSM state signals using the +'fsm_encoding' attribute. It consumes the logic that creates the state signal +and uses the state signal to generate control signal and replaces it with an +FSM cell. + +The generated FSM cell still generates the original state signal with its +original encoding. The 'fsm_opt' pass can be used in combination with the +'opt_clean' pass to eliminate this signal. +\end{lstlisting} + +\section{fsm\_info -- print information on finite state machines} +\label{cmd:fsm_info} +\begin{lstlisting}[numbers=left,frame=single] +    fsm_info [selection] + +This pass dumps all internal information on FSM cells. It can be useful for +analyzing the synthesis process and is called automatically by the 'fsm' +pass so that this information is included in the synthesis log file. +\end{lstlisting} + +\section{fsm\_map -- mapping FSMs to basic logic} +\label{cmd:fsm_map} +\begin{lstlisting}[numbers=left,frame=single] +    fsm_map [selection] + +This pass translates FSM cells to flip-flops and logic. +\end{lstlisting} + +\section{fsm\_opt -- optimize finite state machines} +\label{cmd:fsm_opt} +\begin{lstlisting}[numbers=left,frame=single] +    fsm_opt [selection] + +This pass optimizes FSM cells. It detects which output signals are actually +not used and removes them from the FSM. This pass is usually used in +combination with the 'opt_clean' pass (see also 'help fsm'). +\end{lstlisting} + +\section{fsm\_recode -- recoding finite state machines} +\label{cmd:fsm_recode} +\begin{lstlisting}[numbers=left,frame=single] +    fsm_recode [-encoding type] [-fm_set_fsm_file file] [selection] + +This pass reassign the state encodings for FSM cells. At the moment only +one-hot encoding and binary encoding is supported. The option -encoding +can be used to specify the encoding scheme used for FSMs without the +`fsm_encoding' attribute (or with the attribute set to `auto'. + +The option -fm_set_fsm_file can be used to generate a file containing the +mapping from old to new FSM encoding in form of Synopsys Formality set_fsm_* +commands. +\end{lstlisting} + +\section{help -- display help messages} +\label{cmd:help} +\begin{lstlisting}[numbers=left,frame=single] +    help  .............  list all commands +    help <command>  ...  print help message for given command +    help -all  ........  print complete command reference +\end{lstlisting} + +\section{hierarchy -- check, expand and clean up design hierarchy} +\label{cmd:hierarchy} +\begin{lstlisting}[numbers=left,frame=single] +    hierarchy [-check] [-top <module>] +    hierarchy -generate <cell-types> <port-decls> + +In parametric designs, a module might exists in serveral variations with +different parameter values. This pass looks at all modules in the current +design an re-runs the language frontends for the parametric modules as +needed. + +    -check +        also check the design hierarchy. this generates an error when +        an unknown module is used as cell type. + +    -top <module> +        use the specified top module to built a design hierarchy. modules +        outside this tree (unused modules) are removed. + +In -generate mode this pass generates placeholder modules for the given cell +types (wildcards supported). For this the design is searched for cells that +match the given types and then the given port declarations are used to +determine the direction of the ports. The syntax for a port declaration is: + +    {i|o|io}[@<num>]:<portname> + +Input ports are specified with the 'i' prefix, output ports with the 'o' +prefix and inout ports with the 'io' prefix. The optional <num> specifies +the position of the port in the parameter list (needed when instanciated +using positional arguments). When <num> is not specified, the <portname> can +also contain wildcard characters. + +This pass ignores the current selection and always operates on all modules +in the current design. +\end{lstlisting} + +\section{ls -- list modules or objects in modules} +\label{cmd:ls} +\begin{lstlisting}[numbers=left,frame=single] +    ls + +When no active module is selected, this prints a list of all module. + +When an active module is selected, this prints a list of objects in the module. +\end{lstlisting} + +\section{memory -- translate memories to basic cells} +\label{cmd:memory} +\begin{lstlisting}[numbers=left,frame=single] +    memory [-nomap] [selection] + +This pass calls all the other memory_* passes in a useful order: + +    memory_dff +    memory_collect +    memory_map          (skipped if called with -nomap) + +This converts memories to word-wide DFFs and address decoders +or moultiport memory blocks if called with the -nomap option. +\end{lstlisting} + +\section{memory\_collect -- creating multi-port memory cells} +\label{cmd:memory_collect} +\begin{lstlisting}[numbers=left,frame=single] +    memory_collect [selection] + +This pass collects memories and memory ports and creates generic multiport +memory cells. +\end{lstlisting} + +\section{memory\_dff -- merge input/output DFFs into memories} +\label{cmd:memory_dff} +\begin{lstlisting}[numbers=left,frame=single] +    memory_dff [selection] + +This pass detects DFFs at memory ports and merges them into the memory port. +I.e. it consumes an asynchronous memory port and the flip-flops at its +interface and yields a synchronous memory port. +\end{lstlisting} + +\section{memory\_map -- translate multiport memories to basic cells} +\label{cmd:memory_map} +\begin{lstlisting}[numbers=left,frame=single] +    memory_map [selection] + +This pass converts multiport memory cells as generated by the memory_collect +pass to word-wide DFFs and address decoders. +\end{lstlisting} + +\section{opt -- perform simple optimizations} +\label{cmd:opt} +\begin{lstlisting}[numbers=left,frame=single] +    opt [selection] + +This pass calls all the other opt_* passes in a useful order. This performs +a series of trivial optimizations and cleanups. This pass executes the other +passes in the following order: + +    opt_const +    opt_share -nomux + +    do +        opt_muxtree +        opt_reduce +        opt_share +        opt_rmdff +        opt_clean +        opt_const +    while [changed design] +\end{lstlisting} + +\section{opt\_clean -- remove unused cells and wires} +\label{cmd:opt_clean} +\begin{lstlisting}[numbers=left,frame=single] +    opt_clean [options] [selection] + +This pass identifies wires and cells that are unused and removes them. Other +passes often remove cells but leave the wires in the design or reconnect the +wires but leave the old cells in the design. This pass can be used to clean up +after the passes that do the actual work. + +This pass only operates on completely selected modules without processes. + +    -purge +        also remove internal nets if they have a public name +\end{lstlisting} + +\section{opt\_const -- perform const folding} +\label{cmd:opt_const} +\begin{lstlisting}[numbers=left,frame=single] +    opt_const [selection] + +This pass performs const folding on internal cell types with constant inputs. +\end{lstlisting} + +\section{opt\_muxtree -- eliminate dead trees in multiplexer trees} +\label{cmd:opt_muxtree} +\begin{lstlisting}[numbers=left,frame=single] +    opt_muxtree [selection] + +This pass analyzes the control signals for the multiplexer trees in the design +and identifies inputs that can never be active. It then removes this dead +branches from the multiplexer trees. + +This pass only operates on completely selected modules without processes. +\end{lstlisting} + +\section{opt\_reduce -- simplify large MUXes and AND/OR gates} +\label{cmd:opt_reduce} +\begin{lstlisting}[numbers=left,frame=single] +    opt_reduce [selection] + +This pass performs two interlinked optimizations: + +1. it consolidates trees of large AND gates or OR gates and eliminates +duplicated inputs. + +2. it identifies duplicated inputs to MUXes and replaces them with a single +input with the original control signals OR'ed together. +\end{lstlisting} + +\section{opt\_rmdff -- remove DFFs with constant inputs} +\label{cmd:opt_rmdff} +\begin{lstlisting}[numbers=left,frame=single] +    opt_rmdff [selection] + +This pass identifies flip-flops with constant inputs and replaces them with +a constant driver. +\end{lstlisting} + +\section{opt\_share -- consolidate identical cells} +\label{cmd:opt_share} +\begin{lstlisting}[numbers=left,frame=single] +    opt_share [-nomux] [selection] + +This pass identifies cells with identical type and input signals. Such cells +are then merged to one cell. + +    -nomux +        Do not merge MUX cells. +\end{lstlisting} + +\section{proc -- translate processes to netlists} +\label{cmd:proc} +\begin{lstlisting}[numbers=left,frame=single] +    proc [selection] + +This pass calls all the other proc_* passes in the most common order. + +    proc_clean +    proc_rmdead +    proc_arst +    proc_mux +    proc_dff +    proc_clean + +This replaces the processes in the design with multiplexers and flip-flops. +\end{lstlisting} + +\section{proc\_arst -- detect asynchronous resets} +\label{cmd:proc_arst} +\begin{lstlisting}[numbers=left,frame=single] +    proc_arst [selection] + +This pass identifies asynchronous resets in the processes and converts them +to a different internal representation that is suitable for generating +flip-flop cells with asynchronous resets. +\end{lstlisting} + +\section{proc\_clean -- remove empty parts of processes} +\label{cmd:proc_clean} +\begin{lstlisting}[numbers=left,frame=single] +    proc_clean [selection] + +This pass removes empty parts of processes and ultimately removes a process +if it contains only empty structures. +\end{lstlisting} + +\section{proc\_dff -- extract flip-flops from processes} +\label{cmd:proc_dff} +\begin{lstlisting}[numbers=left,frame=single] +    proc_dff [selection] + +This pass identifies flip-flops in the processes and converts them to +d-type flip-flop cells. +\end{lstlisting} + +\section{proc\_mux -- convert decision trees to multiplexers} +\label{cmd:proc_mux} +\begin{lstlisting}[numbers=left,frame=single] +    proc_mux [selection] + +This pass converts the decision trees in processes (originating from if-else +and case statements) to trees of multiplexer cells. +\end{lstlisting} + +\section{proc\_rmdead -- eliminate dead trees in decision trees} +\label{cmd:proc_rmdead} +\begin{lstlisting}[numbers=left,frame=single] +    proc_rmdead [selection] + +This pass identifies unreachable branches in decision trees and removes them. +\end{lstlisting} + +\section{read\_ilang -- read modules from ilang file} +\label{cmd:read_ilang} +\begin{lstlisting}[numbers=left,frame=single] +    read_ilang [filename] + +Load modules from an ilang file to the current design. (ilang is a text +representation of a design in yosys's internal format.) +\end{lstlisting} + +\section{read\_verilog -- read modules from verilog file} +\label{cmd:read_verilog} +\begin{lstlisting}[numbers=left,frame=single] +    read_verilog [filename] + +Load modules from a verilog file to the current design. A large subset of +Verilog-2005 is supported. + +    -dump_ast +        dump abstract syntax tree (after simplification) + +    -dump_ast_diff +        dump ast differences before and after simplification + +    -dump_vlog +        dump ast as verilog code (after simplification) + +    -yydebug +        enable parser debug output + +    -nolatches +        usually latches are synthesized into logic loops +        this option prohibits this and sets the output to 'x' +        in what would be the latches hold condition + +        this behavior can also be achieved by setting the +        'nolatches' attribute on the respective module or +        always block. + +    -nomem2reg +        under certain conditions memories are converted to registers +        early during simplification to ensure correct handling of +        complex corner cases. this option disables this behavior. + +        this can also be achieved by setting the 'nomem2reg' +        attribute on the respective module or register. + +    -mem2reg +        always convert memories to registers. this can also be +        achieved by setting the 'mem2reg' attribute on the respective +        module or register. + +    -ppdump +        dump verilog code after pre-processor + +    -nopp +        do not run the pre-processor + +    -lib +        only create empty placeholder modules + +    -noopt +        don't perform basic optimizations (such as const folding) in the +        high-level front-end. + +    -Dname[=definition] +        define the preprocessor symbol 'name' and set its optional value +        'definition' +\end{lstlisting} + +\section{rename -- rename object in the design} +\label{cmd:rename} +\begin{lstlisting}[numbers=left,frame=single] +    rename old_name new_name + +Rename the specified object. Note that selection patterns are not supported +by this command. +\end{lstlisting} + +\section{sat -- solve a SAT problem in the circuit} +\label{cmd:sat} +\begin{lstlisting}[numbers=left,frame=single] +    sat [options] [selection] + +This command solves a SAT problem defined over the currently selected circuit +and additional constraints passed as parameters. + +    -all +        show all solutions to the problem (this can grow exponentially, use +        -max <N> instead to get <N> solutions) + +    -max <N> +        like -all, but limit number of solutions to <N> + +    -set <signal> <value> +        set the specified signal to the specified value. + +    -show <signal> +        show the model for the specified signal. if no -show option is +        passed then a set of signals to be shown is automatically selected. + +The following options can be used to set up a sequential problem: + +    -seq <N> +        set up a sequential problem with <N> time steps. The steps will +        be numbered from 1 to N. + +    -set-at <N> <signal> <value> +    -unset-at <N> <signal> +        set or unset the specified signal to the specified value in the +        given timestep. this has priority over a -set for the same signal. + +The following additional options can be used to set up a proof. If also -seq +is passed, a temporal induction proof is performed. + +    -prove <signal> <value> +        Attempt to proof that <signal> is always <value>. In a temporal +        induction proof it is proven that the condition holds forever after +        the number of time steps passed using -seq. + +    -maxsteps <N> +        Set a maximum length for the induction. + +    -timeout <N> +        Maximum number of seconds a single SAT instance may take. + +    -verify +        Return an error and stop the synthesis script if the proof fails. + +    -verify-no-timeout +        Like -verify but do not return an error for timeouts. +\end{lstlisting} + +\section{scatter -- add additional intermediate nets} +\label{cmd:scatter} +\begin{lstlisting}[numbers=left,frame=single] +    scatter [selection] + +This command adds additional intermediate nets on all cell ports. This is used +for testing the correct use of the SigMap halper in passes. If you don't know +what this means: don't worry -- you only need this pass when testing your own +extensions to Yosys. + +Use the opt_clean command to get rid of the additional nets. +\end{lstlisting} + +\section{scc -- detect strongly connected components (logic loops)} +\label{cmd:scc} +\begin{lstlisting}[numbers=left,frame=single] +    scc [options] [selection] + +This command identifies strongly connected components (aka logic loops) in the +design. + +    -max_depth <num> +        limit to loops not longer than the specified number of cells. This can +        e.g. be useful in identifying local loops in a module that turns out +        to be one gigantic SCC. + +    -all_cell_types +        Usually this command only considers internal non-memory cells. With +        this option set, all cells are considered. For unkown cells all ports +        are assumed to be bidirectional 'inout' ports. + +    -set_attr <name> <value> +    -set_cell_attr <name> <value> +    -set_wire_attr <name> <value> +        set the specified attribute on all cells and/or wires that are part of +        a logic loop. the special token {} in the value is replaced with a +        unique identifier for the logic loop. + +    -select +        replace the current selection with a selection of all cells and wires +        that are part of a found logic loop +\end{lstlisting} + +\section{script -- execute commands from script file} +\label{cmd:script} +\begin{lstlisting}[numbers=left,frame=single] +    script <filename> + +This command executes the yosys commands in the specified file. +\end{lstlisting} + +\section{select -- modify and view the list of selected objects} +\label{cmd:select} +\begin{lstlisting}[numbers=left,frame=single] +    select [ -add | -del | -set <name> ] <selection> +    select [ -list | -write <filename> | -count | -clear ] +    select -module <modname> + +Most commands use the list of currently selected objects to determine which part +of the design to operate on. This command can be used to modify and view this +list of selected objects. + +Note that many commands support an optional [selection] argument that can be +used to override the global selection for the command. The syntax of this +optional argument is identical to the syntax of the <selection> argument +described here. + +    -add, -del +        add or remove the given objects to the current selection. +        without this options the current selection is replaced. + +    -set <name> +        do not modify the current selection. instead save the new selection +        under the given name (see @<name> below). + +    -list +        list all objects in the current selection + +    -write <filename> +        like -list but write the output to the specified file + +    -count +        count all objects in the current selection + +    -clear +        clear the current selection. this effectively selects the +        whole design. + +    -module <modname> +        limit the current scope to the specified module. +        the difference between this and simply selecting the module +        is that all object names are interpreted relative to this +        module after this command until the selection is cleared again. + +When this command is called without an argument, the current selection +is displayed in a compact form (i.e. only the module name when a whole module +is selected). + +The <selection> argument itself is a series of commands for a simple stack +machine. Each element on the stack represents a set of selected objects. +After this commands have been executed, the union of all remaining sets +on the stack is computed and used as selection for the command. + +Pushing (selecting) object when not in -module mode: + +    <mod_pattern> +        select the specified module(s) + +    <mod_pattern>/<obj_pattern> +        select the specified object(s) from the module(s) + +Pushing (selecting) object when in -module mode: + +    <obj_pattern> +        select the specified object(s) from the current module + +A <mod_pattern> can be a module name or wildcard expression (*, ?, [..]) +matching module names. + +An <obj_pattern> can be an object name, wildcard expression, or one of +the following: + +    w:<pattern> +        all wires with a name matching the given wildcard pattern + +    m:<pattern> +        all memories with a name matching the given pattern + +    c:<pattern> +        all cells with a name matching the given pattern + +    t:<pattern> +        all cells with a type matching the given pattern + +    p:<pattern> +        all processes with a name matching the given pattern + +    a:<pattern> +        all objects with an attribute name matching the given pattern + +    a:<pattern>=<pattern> +        all objects with a matching attribute name-value-pair + +    n:<pattern> +        all objects with a name matching the given pattern +        (i.e. 'n:' is optional as it is the default matching rule) + +    @<name> +        push the selection saved prior with 'select -set <name> ...' + +The following actions can be performed on the top sets on the stack: + +    % +        push a copy of the current selection to the stack + +    %% +        replace the stack with a union of all elements on it + +    %n +        replace top set with its invert + +    %u +        replace the two top sets on the stack with their union + +    %i +        replace the two top sets on the stack with their intersection + +    %d +        pop the top set from the stack and subtract it from the new top + +    %x[<num1>|*][.<num2>][:<rule>[:<rule>..]] +        expand top set <num1> num times according to the specified rules. +        (i.e. select all cells connected to selected wires and select all +        wires connected to selected cells) The rules specify which cell +        ports to use for this. the syntax for a rule is a '-' for exclusion +        and a '+' for inclusion, followed by an optional comma seperated +        list of cell types followed by an optional comma separated list of +        cell ports in square brackets. a rule can also be just a cell or wire +        name that limits the expansion (is included but does not go beyond). +        select at most <num2> objects. a warning message is printed when this +        limit is reached. When '*' is used instead of <num1> then the process +        is repeated until no further object are selected. + +    %ci[<num1>|*][.<num2>][:<rule>[:<rule>..]] +    %co[<num1>|*][.<num2>][:<rule>[:<rule>..]] +        simmilar to %x, but only select input (%ci) or output cones (%co) + +Example: the following command selects all wires that are connected to a +'GATE' input of a 'SWITCH' cell: + +    select */t:SWITCH %x:+[GATE] */t:SWITCH %d +\end{lstlisting} + +\section{shell -- enter interactive command mode} +\label{cmd:shell} +\begin{lstlisting}[numbers=left,frame=single] +    shell + +This command enters the interactive command mode. This can be useful +in a script to interrupt the script at a certain point and allow for +interactive inspection or manual synthesis of the design at this point. + +The command prompt of the interactive shell indicates the current +selection (see 'help select'): + +    yosys> +        the entire design is selected + +    yosys*> +        only part of the design is selected + +    yosys [modname]> +        the entire module 'modname' is selected using 'select -module modname' + +    yosys [modname]*> +        only part of current module 'modname' is selected + +When in interactive shell, some errors (e.g. invalid command arguments) +do not terminate yosys but return to the command prompt. + +This command is the default action if nothing else has been specified +on the command line. + +Press Ctrl-D or type 'exit' to leave the interactive shell. +\end{lstlisting} + +\section{show -- generate schematics using graphviz} +\label{cmd:show} +\begin{lstlisting}[numbers=left,frame=single] +    show [options] [selection] + +Create a graphviz DOT file for the selected part of the design and compile it +to a graphics file (usually SVG or PostScript). + +    -viewer <viewer> +        Run the specified command with the graphics file as parameter. + +    -format <format> +        Generate a graphics file in the specified format. +        Usually <format> is 'svg' or 'ps'. + +    -lib <verilog_or_ilang_file> +        Use the specified library file for determining whether cell ports are +        inputs or outputs. This option can be used multiple times to specify +        more than one library. + +    -prefix <prefix> +        generate <prefix>.dot and <prefix>.ps instead of ~/.yosys_show.{dot,ps} + +    -color <color> <wire> +        assign the specified color to the specified wire. The object can be +        a single selection wildcard expressions or a saved set of objects in +        the @<name> syntax (see "help select" for details). + +    -colors <seed> +        Randomly assign colors to the wires. The integer argument is the seed +        for the random number generator. Change the seed value if the colored +        graph still is ambigous. A seed of zero deactivates the coloring. + +    -width +        annotate busses with a label indicating the width of the bus. + +    -stretch +        stretch the graph so all inputs are on the left side and all outputs +        (including inout ports) are on the right side. + +When no <format> is specified, SVG is used. When no <format> and <viewer> is +specified, 'yosys-svgviewer' is used to display the schematic. + +The generated output files are '~/.yosys_show.dot' and '~/.yosys_show.<format>', +unless another prefix is specified using -prefix <prefix>. +\end{lstlisting} + +\section{splitnets -- split up multi-bit nets} +\label{cmd:splitnets} +\begin{lstlisting}[numbers=left,frame=single] +    splitnets [options] [selection] + +This command splits multi-bit nets into single-bit nets. + +    -ports +        also split module ports. per default only internal signals are split. +\end{lstlisting} + +\section{submod -- moving part of a module to a new submodule} +\label{cmd:submod} +\begin{lstlisting}[numbers=left,frame=single] +    submod [selection] + +This pass identifies all cells with the 'submod' attribute and moves them to +a newly created module. The value of the attribute is used as name for the +cell that replaces the group of cells with the same attribute value. + +This pass can be used to create a design hierarchy in flat design. This can +be useful for analyzing or reverse-engineering a design. + +This pass only operates on completely selected modules with no processes +or memories. + + +    submod -name <name> [selection] + +As above, but don't use the 'submod' attribute but instead use the selection. +Only objects from one module might be selected. The value of the -name option +is used as the value of the 'submod' attribute above. +\end{lstlisting} + +\section{tcl -- execute a TCL script file} +\label{cmd:tcl} +\begin{lstlisting}[numbers=left,frame=single] +    tcl <filename> + +This command executes the tcl commands in the specified file. +Use 'yosys cmd' to run the yosys command 'cmd' from tcl. + +The tcl command 'yosys -import' can be used to import all yosys +commands directly as tcl commands to the tcl shell. The yosys +command 'proc' is wrapped using the tcl command 'procs' in order +to avoid a name collision with the tcl builting command 'proc'. +\end{lstlisting} + +\section{techmap -- simple technology mapper} +\label{cmd:techmap} +\begin{lstlisting}[numbers=left,frame=single] +    techmap [-map filename] [selection] + +This pass implements a very simple technology mapper that replaces cells in +the design with implementations given in form of a verilog or ilang source +file. + +    -map filename +        the library of cell implementations to be used. +        without this parameter a builtin library is used that +        transforms the internal RTL cells to the internal gate +        library. + +When a module in the map file has the 'celltype' attribute set, it will match +cells with a type that match the text value of this attribute. + +When a module in the map file contains a wire with the name 'TECHMAP_FAIL' (or +one matching '*.TECHMAP_FAIL') then no substitution will be performed. The +modules in the map file are tried in alphabetical order. + +When a module in the map file has a parameter where the according cell in the +design has a port, the module from the map file is only used if the port in +the design is connected to a constant value. The parameter is then set to the +constant value. + +See 'help extract' for a pass that does the opposite thing. + +See 'help flatten' for a pass that does flatten the design (which is +esentially techmap but using the design itself as map library). +\end{lstlisting} + +\section{write\_autotest -- generate simple test benches} +\label{cmd:write_autotest} +\begin{lstlisting}[numbers=left,frame=single] +    write_autotest [filename] + +Automatically create primitive verilog test benches for all modules in the +design. The generated testbenches toggle the input pins of the module in +a semi-random manner and dumps the resulting output signals. + +This can be used to check the synthesis results for simple circuits by +comparing the testbench output for the input files and the synthesis results. + +The backend automatically detects clock signals. Additionally a signal can +be forced to be interpreted as clock signal by setting the attribute +'gentb_clock' on the signal. + +The attribute 'gentb_constant' can be used to force a signal to a constant +value after initialization. This can e.g. be used to force a reset signal +low in order to explore more inner states in a state machine. +\end{lstlisting} + +\section{write\_ilang -- write design to ilang file} +\label{cmd:write_ilang} +\begin{lstlisting}[numbers=left,frame=single] +    write_ilang [filename] + +Write the current design to an 'ilang' file. (ilang is a text representation +of a design in yosys's internal format.) +\end{lstlisting} + +\section{write\_intersynth -- write design to InterSynth netlist file} +\label{cmd:write_intersynth} +\begin{lstlisting}[numbers=left,frame=single] +    write_intersynth [options] [filename] + +Write the current design to an 'intersynth' netlist file. InterSynth is +a tool for Coarse-Grain Example-Driven Interconnect Synthesis. + +    -notypes +        do not generate celltypes and conntypes commands. i.e. just output +        the netlists. this is used for postsilicon synthesis. + +    -lib <verilog_or_ilang_file> +        Use the specified library file for determining whether cell ports are +        inputs or outputs. This option can be used multiple times to specify +        more than one library. + +http://www.clifford.at/intersynth/ +\end{lstlisting} + +\section{write\_verilog -- write design to verilog file} +\label{cmd:write_verilog} +\begin{lstlisting}[numbers=left,frame=single] +    write_verilog [options] [filename] + +Write the current design to a verilog file. + +    -norename +        without this option all internal object names (the ones with a dollar +        instead of a backslash prefix) are changed to short names in the +        format '_<number>_'. + +    -noattr +        with this option no attributes are included in the output + +    -attr2comment +        with this option attributes are included as comments in the output + +    -noexpr +        without this option all internal cells are converted to verilog +        expressions. + +    -placeholders +        usually modules with the 'placeholder' attribute are ignored. with +        this option set only the modules with the 'placeholder' attribute +        are written to the output file. +\end{lstlisting} +  | 
