mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-11-04 05:19:11 +00:00 
			
		
		
		
	Updated command reference in manual
This commit is contained in:
		
							parent
							
								
									85887de547
								
							
						
					
					
						commit
						b944fef925
					
				
					 1 changed files with 441 additions and 76 deletions
				
			
		| 
						 | 
				
			
			@ -23,36 +23,33 @@ library to a target architecture.
 | 
			
		|||
        if no -script parameter is given, the following scripts are used:
 | 
			
		||||
 | 
			
		||||
        for -liberty without -constr:
 | 
			
		||||
          strash; scorr -v; ifraig -v; retime -v {D}; strash; dch -vf;
 | 
			
		||||
               map -v {D}
 | 
			
		||||
          strash; scorr; ifraig; retime {D}; strash; dch -f; map {D}
 | 
			
		||||
 | 
			
		||||
        for -liberty with -constr:
 | 
			
		||||
          strash; scorr -v; ifraig -v; retime -v {D}; strash; dch -vf;
 | 
			
		||||
               map -v {D}; buffer -v; upsize -v {D}; dnsize -v {D};
 | 
			
		||||
               stime -p
 | 
			
		||||
          strash; scorr; ifraig; retime {D}; strash; dch -f; map {D};
 | 
			
		||||
               buffer; upsize {D}; dnsize {D}; stime -p
 | 
			
		||||
 | 
			
		||||
        for -lut:
 | 
			
		||||
          strash; scorr -v; ifraig -v; retime -v; strash; dch -vf; if -v
 | 
			
		||||
          strash; scorr; ifraig; retime; strash; dch -f; if
 | 
			
		||||
 | 
			
		||||
        otherwise:
 | 
			
		||||
          strash; scorr -v; ifraig -v; retime -v; strash; dch -vf; map -v
 | 
			
		||||
          strash; scorr; ifraig; retime; strash; dch -f; map
 | 
			
		||||
 | 
			
		||||
    -fast
 | 
			
		||||
        use different default scripts that are slightly faster (at the cost
 | 
			
		||||
        of output quality):
 | 
			
		||||
 | 
			
		||||
        for -liberty without -constr:
 | 
			
		||||
          retime -v {D}; map -v {D}
 | 
			
		||||
          retime {D}; map {D}
 | 
			
		||||
 | 
			
		||||
        for -liberty with -constr:
 | 
			
		||||
          retime -v {D}; map -v {D}; buffer -v; upsize -v {D};
 | 
			
		||||
               dnsize -v {D}; stime -p
 | 
			
		||||
          retime {D}; map {D}; buffer; upsize {D}; dnsize {D}; stime -p
 | 
			
		||||
 | 
			
		||||
        for -lut:
 | 
			
		||||
          retime -v; if -v
 | 
			
		||||
          retime; if
 | 
			
		||||
 | 
			
		||||
        otherwise:
 | 
			
		||||
          retime -v; map -v
 | 
			
		||||
          retime; map
 | 
			
		||||
 | 
			
		||||
    -liberty <file>
 | 
			
		||||
        generate netlists for the specified cell library (using the liberty
 | 
			
		||||
| 
						 | 
				
			
			@ -76,15 +73,20 @@ library to a target architecture.
 | 
			
		|||
    -lut <width>
 | 
			
		||||
        generate netlist using luts of (max) the specified width.
 | 
			
		||||
 | 
			
		||||
    -dff
 | 
			
		||||
        also pass $_DFF_?_ cells through ABC (only one clock domain, if many
 | 
			
		||||
        clock domains are present in a module, the one with the largest number
 | 
			
		||||
        of $_DFF_?_ cells in it is used)
 | 
			
		||||
    -lut <w1>:<w2>
 | 
			
		||||
        generate netlist using luts of (max) the specified width <w2>. All
 | 
			
		||||
        luts with width <= <w1> have constant cost. for luts larger than <w1>
 | 
			
		||||
        the area cost doubles with each additional input bit. the delay cost
 | 
			
		||||
        is still constant for all lut widths.
 | 
			
		||||
 | 
			
		||||
    -clk [!]<signal-name>
 | 
			
		||||
        use the specified clock domain. (when this option is used in combination
 | 
			
		||||
        with -dff, then it falls back to the automatic dection of clock domain
 | 
			
		||||
        if the specified clock is not found in a module.)
 | 
			
		||||
    -dff
 | 
			
		||||
        also pass $_DFF_?_ and $_DFFE_??_ cells through ABC. modules with many
 | 
			
		||||
        clock domains are automatically partitioned in clock domains and each
 | 
			
		||||
        domain is passed through ABC independently.
 | 
			
		||||
 | 
			
		||||
    -clk [!]<clock-signal-name>[,[!]<enable-signal-name>]
 | 
			
		||||
        use only the specified clock domain. this is like -dff, but only FF
 | 
			
		||||
        cells that belong to the specified clock domain are used.
 | 
			
		||||
 | 
			
		||||
    -keepff
 | 
			
		||||
        set the "keep" attribute on flip-flop output wires. (and thus preserve
 | 
			
		||||
| 
						 | 
				
			
			@ -94,6 +96,15 @@ library to a target architecture.
 | 
			
		|||
        when this option is used, the temporary files created by this pass
 | 
			
		||||
        are not removed. this is useful for debugging.
 | 
			
		||||
 | 
			
		||||
    -showtmp
 | 
			
		||||
        print the temp dir name in log. usually this is suppressed so that the
 | 
			
		||||
        command output is identical across runs.
 | 
			
		||||
 | 
			
		||||
    -markgroups
 | 
			
		||||
        set a 'abcgroup' attribute on all objects created by ABC. The value of
 | 
			
		||||
        this attribute is a unique integer for each ABC process started. This
 | 
			
		||||
        is useful for debugging the partitioning of clock domains.
 | 
			
		||||
 | 
			
		||||
When neither -liberty nor -lut is used, the Yosys standard cell library is
 | 
			
		||||
loaded into ABC before the ABC script is executed.
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -130,8 +141,8 @@ selected modules.
 | 
			
		|||
\begin{lstlisting}[numbers=left,frame=single]
 | 
			
		||||
    alumacc [selection]
 | 
			
		||||
 | 
			
		||||
This pass translates arithmetic operations $add, $mul, $lt, etc. to $alu and
 | 
			
		||||
$macc cells.
 | 
			
		||||
This pass translates arithmetic operations like $add, $mul, $lt, etc. to $alu
 | 
			
		||||
and $macc cells.
 | 
			
		||||
\end{lstlisting}
 | 
			
		||||
 | 
			
		||||
\section{cd -- a shortcut for 'select -module <name>'}
 | 
			
		||||
| 
						 | 
				
			
			@ -272,7 +283,7 @@ Hint: Use the following AWK command to consolidate Yosys coverage files:
 | 
			
		|||
      printf "%-60s %10d %s\n", p[i], c[i], i; }' {files} | sort -k3
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Coverage counters are only available in debug builds of Yosys for Linux.
 | 
			
		||||
Coverage counters are only available in Yosys for Linux.
 | 
			
		||||
\end{lstlisting}
 | 
			
		||||
 | 
			
		||||
\section{delete -- delete objects in the design}
 | 
			
		||||
| 
						 | 
				
			
			@ -335,16 +346,43 @@ evaluated in the other design.
 | 
			
		|||
Copy modules from the current design into the soecified one.
 | 
			
		||||
\end{lstlisting}
 | 
			
		||||
 | 
			
		||||
\section{dff2dffe -- transform $dff cells to $dffe cells}
 | 
			
		||||
\label{cmd:dff2dffe}
 | 
			
		||||
\begin{lstlisting}[numbers=left,frame=single]
 | 
			
		||||
    dff2dffe [selection]
 | 
			
		||||
 | 
			
		||||
This pass transforms $dff cells driven by a tree of multiplexers with one or
 | 
			
		||||
more feedback paths to $dffe cells. It also works on gate-level cells such as
 | 
			
		||||
$_DFF_P_, $_DFF_N_ and $_MUX_.
 | 
			
		||||
 | 
			
		||||
    -unmap
 | 
			
		||||
        operate in the opposite direction: replace $dffe cells with combinations
 | 
			
		||||
        of $dff and $mux cells. the options below are ignore in unmap mode.
 | 
			
		||||
 | 
			
		||||
    -direct <internal_gate_type> <external_gate_type>
 | 
			
		||||
        map directly to external gate type. <internal_gate_type> can
 | 
			
		||||
        be any internal gate-level FF cell (except $_DFFE_??_). the
 | 
			
		||||
        <external_gate_type> is the cell type name for a cell with an
 | 
			
		||||
        identical interface to the <internal_gate_type>, except it
 | 
			
		||||
        also has an high-active enable port 'E'.
 | 
			
		||||
          Usually <external_gate_type> is an intemediate cell type
 | 
			
		||||
        that is then translated to the final type using 'techmap'.
 | 
			
		||||
\end{lstlisting}
 | 
			
		||||
 | 
			
		||||
\section{dfflibmap -- technology mapping of flip-flops}
 | 
			
		||||
\label{cmd:dfflibmap}
 | 
			
		||||
\begin{lstlisting}[numbers=left,frame=single]
 | 
			
		||||
    dfflibmap -liberty <file> [selection]
 | 
			
		||||
    dfflibmap [-prepare] -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.
 | 
			
		||||
 | 
			
		||||
When called with -prepare, this command will convert the internal FF cells
 | 
			
		||||
to the internal cell types that best match the cells found in the given
 | 
			
		||||
liberty file.
 | 
			
		||||
\end{lstlisting}
 | 
			
		||||
 | 
			
		||||
\section{dump -- print parts of the design in ilang format}
 | 
			
		||||
| 
						 | 
				
			
			@ -362,10 +400,10 @@ ilang format.
 | 
			
		|||
    -n
 | 
			
		||||
        only dump the module headers if the entire module is selected
 | 
			
		||||
 | 
			
		||||
    -outfile <filename>
 | 
			
		||||
    -o <filename>
 | 
			
		||||
        write to the specified file.
 | 
			
		||||
 | 
			
		||||
    -append <filename>
 | 
			
		||||
    -a <filename>
 | 
			
		||||
        like -outfile but append instead of overwrite
 | 
			
		||||
\end{lstlisting}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -382,6 +420,133 @@ Print all commands to log before executing them.
 | 
			
		|||
Do not print all commands to log before executing them. (default)
 | 
			
		||||
\end{lstlisting}
 | 
			
		||||
 | 
			
		||||
\section{equiv\_add -- add a $equiv cell}
 | 
			
		||||
\label{cmd:equiv_add}
 | 
			
		||||
\begin{lstlisting}[numbers=left,frame=single]
 | 
			
		||||
    equiv_add gold_sig gate_sig
 | 
			
		||||
 | 
			
		||||
This command adds an $equiv cell for the specified signals.
 | 
			
		||||
\end{lstlisting}
 | 
			
		||||
 | 
			
		||||
\section{equiv\_induct -- proving $equiv cells using temporal induction}
 | 
			
		||||
\label{cmd:equiv_induct}
 | 
			
		||||
\begin{lstlisting}[numbers=left,frame=single]
 | 
			
		||||
    equiv_induct [options] [selection]
 | 
			
		||||
 | 
			
		||||
Uses a version of temporal induction to prove $equiv cells.
 | 
			
		||||
 | 
			
		||||
Only selected $equiv cells are proven and only selected cells are used to
 | 
			
		||||
perform the proof.
 | 
			
		||||
 | 
			
		||||
    -undef
 | 
			
		||||
        enable modelling of undef states
 | 
			
		||||
 | 
			
		||||
    -seq <N>
 | 
			
		||||
        the max. number of time steps to be considered (default = 4)
 | 
			
		||||
 | 
			
		||||
This command is very effective in proving complex sequential circuits, when
 | 
			
		||||
the internal state of the circuit quickly propagates to $equiv cells.
 | 
			
		||||
 | 
			
		||||
However, this command uses a weak definition of 'equivalence': This command
 | 
			
		||||
proves that the two circuits will not diverge after they produce equal
 | 
			
		||||
outputs (observable points via $equiv) for at least <N> cycles (the <N>
 | 
			
		||||
specified via -seq).
 | 
			
		||||
 | 
			
		||||
Combined with simulation this is very powerful because simulation can give
 | 
			
		||||
you confidence that the circuits start out synced for at least <N> cycles
 | 
			
		||||
after reset.
 | 
			
		||||
\end{lstlisting}
 | 
			
		||||
 | 
			
		||||
\section{equiv\_make -- prepare a circuit for equivalence checking}
 | 
			
		||||
\label{cmd:equiv_make}
 | 
			
		||||
\begin{lstlisting}[numbers=left,frame=single]
 | 
			
		||||
    equiv_make [options] gold_module gate_module equiv_module
 | 
			
		||||
 | 
			
		||||
This creates a module annotated with $equiv cells from two presumably
 | 
			
		||||
equivalent modules. Use commands such as 'equiv_simple' and 'equiv_status'
 | 
			
		||||
to work with the created equivalent checking module.
 | 
			
		||||
 | 
			
		||||
    -inames
 | 
			
		||||
        Also match cells and wires with $... names.
 | 
			
		||||
 | 
			
		||||
    -blacklist <file>
 | 
			
		||||
        Do not match cells or signals that match the names in the file.
 | 
			
		||||
 | 
			
		||||
    -encfile <file>
 | 
			
		||||
        Match FSM encodings using the desiption from the file.
 | 
			
		||||
        See 'help fsm_recode' for details.
 | 
			
		||||
 | 
			
		||||
Note: The circuit created by this command is not a miter (with something like
 | 
			
		||||
a trigger output), but instead uses $equiv cells to encode the equivalence
 | 
			
		||||
checking problem. Use 'miter -equiv' if you want to create a miter circuit.
 | 
			
		||||
\end{lstlisting}
 | 
			
		||||
 | 
			
		||||
\section{equiv\_miter -- extract miter from equiv circuit}
 | 
			
		||||
\label{cmd:equiv_miter}
 | 
			
		||||
\begin{lstlisting}[numbers=left,frame=single]
 | 
			
		||||
    equiv_miter [options] miter_module [selection]
 | 
			
		||||
 | 
			
		||||
This creates a miter module for further analysis of the selected $equiv cells.
 | 
			
		||||
 | 
			
		||||
    -trigger
 | 
			
		||||
        Create a trigger output
 | 
			
		||||
 | 
			
		||||
    -cmp
 | 
			
		||||
        Create cmp_* outputs for individual unproven $equiv cells
 | 
			
		||||
 | 
			
		||||
    -assert
 | 
			
		||||
        Create a $assert cell for each unproven $equiv cell
 | 
			
		||||
 | 
			
		||||
    -undef
 | 
			
		||||
        Create compare logic that handles undefs correctly
 | 
			
		||||
\end{lstlisting}
 | 
			
		||||
 | 
			
		||||
\section{equiv\_remove -- remove $equiv cells}
 | 
			
		||||
\label{cmd:equiv_remove}
 | 
			
		||||
\begin{lstlisting}[numbers=left,frame=single]
 | 
			
		||||
    equiv_remove [options] [selection]
 | 
			
		||||
 | 
			
		||||
This command removes the selected $equiv cells. If neither -gold nor -gate is
 | 
			
		||||
used then only proven cells are removed.
 | 
			
		||||
 | 
			
		||||
    -gold
 | 
			
		||||
        keep gold circuit
 | 
			
		||||
 | 
			
		||||
    -gate
 | 
			
		||||
        keep gate circuit
 | 
			
		||||
\end{lstlisting}
 | 
			
		||||
 | 
			
		||||
\section{equiv\_simple -- try proving simple $equiv instances}
 | 
			
		||||
\label{cmd:equiv_simple}
 | 
			
		||||
\begin{lstlisting}[numbers=left,frame=single]
 | 
			
		||||
    equiv_simple [options] [selection]
 | 
			
		||||
 | 
			
		||||
This command tries to prove $equiv cells using a simple direct SAT approach.
 | 
			
		||||
 | 
			
		||||
    -v
 | 
			
		||||
        verbose output
 | 
			
		||||
 | 
			
		||||
    -undef
 | 
			
		||||
        enable modelling of undef states
 | 
			
		||||
 | 
			
		||||
    -nogroup
 | 
			
		||||
        disabling grouping of $equiv cells by output wire
 | 
			
		||||
 | 
			
		||||
    -seq <N>
 | 
			
		||||
        the max. number of time steps to be considered (default = 1)
 | 
			
		||||
\end{lstlisting}
 | 
			
		||||
 | 
			
		||||
\section{equiv\_status -- print status of equivalent checking module}
 | 
			
		||||
\label{cmd:equiv_status}
 | 
			
		||||
\begin{lstlisting}[numbers=left,frame=single]
 | 
			
		||||
    equiv_status [options] [selection]
 | 
			
		||||
 | 
			
		||||
This command prints status information for all selected $equiv cells.
 | 
			
		||||
 | 
			
		||||
    -assert
 | 
			
		||||
        produce an error if any unproven $equiv cell is found
 | 
			
		||||
\end{lstlisting}
 | 
			
		||||
 | 
			
		||||
\section{eval -- evaluate the circuit given an input}
 | 
			
		||||
\label{cmd:eval}
 | 
			
		||||
\begin{lstlisting}[numbers=left,frame=single]
 | 
			
		||||
| 
						 | 
				
			
			@ -596,6 +761,7 @@ Options:
 | 
			
		|||
 | 
			
		||||
    -encoding tye
 | 
			
		||||
    -fm_set_fsm_file file
 | 
			
		||||
    -encfile file
 | 
			
		||||
        passed through to fsm_recode pass
 | 
			
		||||
\end{lstlisting}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -692,16 +858,24 @@ combination with the 'opt_clean' pass (see also 'help fsm').
 | 
			
		|||
\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]
 | 
			
		||||
    fsm_recode [options] [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'.
 | 
			
		||||
one-hot encoding and binary encoding is supported.
 | 
			
		||||
    -encoding <type>
 | 
			
		||||
        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.
 | 
			
		||||
    -fm_set_fsm_file <file>
 | 
			
		||||
        generate a file containing the mapping from old to new FSM encoding
 | 
			
		||||
        in form of Synopsys Formality set_fsm_* commands.
 | 
			
		||||
 | 
			
		||||
    -encfile <file>
 | 
			
		||||
        write the mappings from old to new FSM encoding to a file in the
 | 
			
		||||
        following format:
 | 
			
		||||
 | 
			
		||||
            .fsm <module_name> <state_signal>
 | 
			
		||||
            .map <old_bitpattern> <new_bitpattern>
 | 
			
		||||
\end{lstlisting}
 | 
			
		||||
 | 
			
		||||
\section{help -- display help messages}
 | 
			
		||||
| 
						 | 
				
			
			@ -826,8 +1000,8 @@ the resulting cells to more sophisticated PAD cells.
 | 
			
		|||
 | 
			
		||||
    -bits
 | 
			
		||||
        create individual bit-wide buffers even for ports that
 | 
			
		||||
        are wider. (the default behavio is to create word-wide
 | 
			
		||||
        buffers use -widthparam to set the word size on the cell.)
 | 
			
		||||
        are wider. (the default behavior is to create word-wide
 | 
			
		||||
        buffers using -widthparam to set the word size on the cell.)
 | 
			
		||||
\end{lstlisting}
 | 
			
		||||
 | 
			
		||||
\section{log -- print text and log files}
 | 
			
		||||
| 
						 | 
				
			
			@ -857,17 +1031,11 @@ logfiles.
 | 
			
		|||
\section{ls -- list modules or objects in modules}
 | 
			
		||||
\label{cmd:ls}
 | 
			
		||||
\begin{lstlisting}[numbers=left,frame=single]
 | 
			
		||||
    ls [pattern]
 | 
			
		||||
    ls [selection]
 | 
			
		||||
 | 
			
		||||
When no active module is selected, this prints a list of all modules.
 | 
			
		||||
When no active module is selected, this prints a list of modules.
 | 
			
		||||
 | 
			
		||||
When an active module is selected, this prints a list of objects in the module.
 | 
			
		||||
 | 
			
		||||
If a pattern is given, the objects matching the pattern are printed
 | 
			
		||||
 | 
			
		||||
Note that this command does not use the selection mechanism and always operates
 | 
			
		||||
on the whole design or whole active module. Use 'select -list' to show a list
 | 
			
		||||
of currently selected objects.
 | 
			
		||||
\end{lstlisting}
 | 
			
		||||
 | 
			
		||||
\section{maccmap -- mapping macc cells}
 | 
			
		||||
| 
						 | 
				
			
			@ -882,7 +1050,7 @@ used then the $macc cell is mapped to $and, $sub, etc. cells instead.
 | 
			
		|||
\section{memory -- translate memories to basic cells}
 | 
			
		||||
\label{cmd:memory}
 | 
			
		||||
\begin{lstlisting}[numbers=left,frame=single]
 | 
			
		||||
    memory [-nomap] [selection]
 | 
			
		||||
    memory [-nomap] [-bram <bram_rules>] [selection]
 | 
			
		||||
 | 
			
		||||
This pass calls all the other memory_* passes in a useful order:
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -891,12 +1059,98 @@ This pass calls all the other memory_* passes in a useful order:
 | 
			
		|||
    memory_share
 | 
			
		||||
    opt_clean
 | 
			
		||||
    memory_collect
 | 
			
		||||
    memory_map          (skipped if called with -nomap)
 | 
			
		||||
    memory_bram -rules <bram_rules>     (when called with -bram)
 | 
			
		||||
    memory_map                          (skipped if called with -nomap)
 | 
			
		||||
 | 
			
		||||
This converts memories to word-wide DFFs and address decoders
 | 
			
		||||
or multiport memory blocks if called with the -nomap option.
 | 
			
		||||
\end{lstlisting}
 | 
			
		||||
 | 
			
		||||
\section{memory\_bram -- map memories to block rams}
 | 
			
		||||
\label{cmd:memory_bram}
 | 
			
		||||
\begin{lstlisting}[numbers=left,frame=single]
 | 
			
		||||
    memory_bram -rules <rule_file> [selection]
 | 
			
		||||
 | 
			
		||||
This pass converts the multi-port $mem memory cells into block ram instances.
 | 
			
		||||
The given rules file describes the available resources and how they should be
 | 
			
		||||
used.
 | 
			
		||||
 | 
			
		||||
The rules file contains a set of block ram description and a sequence of match
 | 
			
		||||
rules. A block ram description looks like this:
 | 
			
		||||
 | 
			
		||||
    bram RAMB1024X32     # name of BRAM cell
 | 
			
		||||
      abits 10           # number of address bits
 | 
			
		||||
      dbits 32           # number of data bits
 | 
			
		||||
      groups 2           # number of port groups
 | 
			
		||||
      ports  1 1         # number of ports in each group
 | 
			
		||||
      wrmode 1 0         # set to '1' if this groups is write ports
 | 
			
		||||
      enable 4 0         # number of enable bits (for write ports)
 | 
			
		||||
      transp 0 2         # transparatent (for read ports)
 | 
			
		||||
      clocks 1 2         # clock configuration
 | 
			
		||||
      clkpol 2 2         # clock polarity configuration
 | 
			
		||||
    endbram
 | 
			
		||||
 | 
			
		||||
For the option 'transp' the value 0 means non-transparent, 1 means transparent
 | 
			
		||||
and a value greater than 1 means configurable. All groups with the same
 | 
			
		||||
value greater than 1 share the same configuration bit.
 | 
			
		||||
 | 
			
		||||
For the option 'clocks' the value 0 means non-clocked, and a value greater
 | 
			
		||||
than 0 means clocked. All groups with the same value share the same clock
 | 
			
		||||
signal.
 | 
			
		||||
 | 
			
		||||
For the option 'clkpol' the value 0 means negative edge, 1 means positive edge
 | 
			
		||||
and a value greater than 1 means configurable. All groups with the same value
 | 
			
		||||
greater than 1 share the same configuration bit.
 | 
			
		||||
 | 
			
		||||
Using the same bram name in different bram blocks will create different variants
 | 
			
		||||
of the bram. Verilog configration parameters for the bram are created as needed.
 | 
			
		||||
 | 
			
		||||
It is also possible to create variants by repeating statements in the bram block
 | 
			
		||||
and appending '@<label>' to the individual statements.
 | 
			
		||||
 | 
			
		||||
A match rule looks like this:
 | 
			
		||||
 | 
			
		||||
    match RAMB1024X32
 | 
			
		||||
      max waste 16384    # only use this bram if <= 16k ram bits are unused
 | 
			
		||||
      min efficiency 80  # only use this bram if efficiency is at least 80%
 | 
			
		||||
    endmatch
 | 
			
		||||
 | 
			
		||||
It is possible to match against the following values with min/max rules:
 | 
			
		||||
 | 
			
		||||
    words  ........  number of words in memory in design
 | 
			
		||||
    abits  ........  number of address bits on memory in design
 | 
			
		||||
    dbits  ........  number of data bits on memory in design
 | 
			
		||||
    wports  .......  number of write ports on memory in design
 | 
			
		||||
    rports  .......  number of read ports on memory in design
 | 
			
		||||
    ports  ........  number of ports on memory in design
 | 
			
		||||
    bits  .........  number of bits in memory in design
 | 
			
		||||
    dups ..........  number of duplications for more read ports
 | 
			
		||||
 | 
			
		||||
    awaste  .......  number of unused address slots for this match
 | 
			
		||||
    dwaste  .......  number of unused data bits for this match
 | 
			
		||||
    bwaste  .......  number of unused bram bits for this match
 | 
			
		||||
    waste  ........  total number of unused bram bits (bwaste*dups)
 | 
			
		||||
    efficiency  ...  total percentage of used and non-duplicated bits
 | 
			
		||||
 | 
			
		||||
    acells  .......  number of cells in 'address-direction'
 | 
			
		||||
    dcells  .......  number of cells in 'data-direction'
 | 
			
		||||
    cells  ........  total number of cells (acells*dcells*dups)
 | 
			
		||||
 | 
			
		||||
The interface for the created bram instances is dervived from the bram
 | 
			
		||||
description. Use 'techmap' to convert the created bram instances into
 | 
			
		||||
instances of the actual bram cells of your target architecture.
 | 
			
		||||
 | 
			
		||||
A match containing the command 'or_next_if_better' is only used if it
 | 
			
		||||
has a higher efficiency than the next match (and the one after that if
 | 
			
		||||
the next also has 'or_next_if_better' set, and so forth).
 | 
			
		||||
 | 
			
		||||
A match containing the command 'make_transp' will add external circuitry
 | 
			
		||||
to simulate 'transparent read', if necessary.
 | 
			
		||||
 | 
			
		||||
A match containing the command 'shuffle_enable A' will re-organize
 | 
			
		||||
the data bits to accommodate the enable pattern of port A.
 | 
			
		||||
\end{lstlisting}
 | 
			
		||||
 | 
			
		||||
\section{memory\_collect -- creating multi-port memory cells}
 | 
			
		||||
\label{cmd:memory_collect}
 | 
			
		||||
\begin{lstlisting}[numbers=left,frame=single]
 | 
			
		||||
| 
						 | 
				
			
			@ -1414,8 +1668,8 @@ and additional constraints passed as parameters.
 | 
			
		|||
        show the model for the specified signal. if no -show option is
 | 
			
		||||
        passed then a set of signals to be shown is automatically selected.
 | 
			
		||||
 | 
			
		||||
    -show-inputs, -show-outputs
 | 
			
		||||
        add all module input (output) ports to the list of shown signals
 | 
			
		||||
    -show-inputs, -show-outputs, -show-ports
 | 
			
		||||
        add all module (input/output) ports to the list of shown signals
 | 
			
		||||
 | 
			
		||||
    -ignore_div_by_zero
 | 
			
		||||
        ignore all solutions that involve a division by zero
 | 
			
		||||
| 
						 | 
				
			
			@ -1567,8 +1821,8 @@ marked with that label (until the next label) is executed.
 | 
			
		|||
\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 [ -assert-none | -assert-any ] <selection>
 | 
			
		||||
    select [ -add | -del | -set <name> ] {-read <filename> | <selection>}
 | 
			
		||||
    select [ -assert-none | -assert-any ] {-read <filename> | <selection>}
 | 
			
		||||
    select [ -list | -write <filename> | -count | -clear ]
 | 
			
		||||
    select -module <modname>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1610,6 +1864,9 @@ described here.
 | 
			
		|||
    -write <filename>
 | 
			
		||||
        like -list but write the output to the specified file
 | 
			
		||||
 | 
			
		||||
    -read <filename>
 | 
			
		||||
        read the specified file (written by -write)
 | 
			
		||||
 | 
			
		||||
    -count
 | 
			
		||||
        count all objects in the current selection
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1901,6 +2158,10 @@ to a graphics file (usually SVG or PostScript).
 | 
			
		|||
        for the random number generator. Change the seed value if the colored
 | 
			
		||||
        graph still is ambigous. A seed of zero deactivates the coloring.
 | 
			
		||||
 | 
			
		||||
    -colorattr <attribute_name>
 | 
			
		||||
        Use the specified attribute to assign colors. A unique color is
 | 
			
		||||
        assigned to each unique value of this attribute.
 | 
			
		||||
 | 
			
		||||
    -width
 | 
			
		||||
        annotate busses with a label indicating the width of the bus.
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -2055,6 +2316,12 @@ on partly selected designs.
 | 
			
		|||
    -top <module>
 | 
			
		||||
        use the specified module as top module (default='top')
 | 
			
		||||
 | 
			
		||||
    -encfile <file>
 | 
			
		||||
        passed to 'fsm_recode' via 'fsm'
 | 
			
		||||
 | 
			
		||||
    -noabc
 | 
			
		||||
        do not run abc (as if yosys was compiled without ABC support)
 | 
			
		||||
 | 
			
		||||
    -run <from_label>[:<to_label>]
 | 
			
		||||
        only run the commands between the labels (see below). an empty
 | 
			
		||||
        from label is synonymous to 'begin', and empty to label is
 | 
			
		||||
| 
						 | 
				
			
			@ -2096,16 +2363,12 @@ The following commands are executed by this synthesis command:
 | 
			
		|||
    synth_xilinx [options]
 | 
			
		||||
 | 
			
		||||
This command runs synthesis for Xilinx FPGAs. This command does not operate on
 | 
			
		||||
partly selected designs.
 | 
			
		||||
partly selected designs. At the moment this command creates netlists that are
 | 
			
		||||
compatible with 7-Series Xilinx devices.
 | 
			
		||||
 | 
			
		||||
    -top <module>
 | 
			
		||||
        use the specified module as top module (default='top')
 | 
			
		||||
 | 
			
		||||
    -arch <arch>
 | 
			
		||||
        select architecture. the following architectures are supported:
 | 
			
		||||
            spartan6 (default), artix7, kintex7, virtex7, zynq7000
 | 
			
		||||
            (this parameter is not used by the command at the moment)
 | 
			
		||||
 | 
			
		||||
    -edif <file>
 | 
			
		||||
        write the design to the specified edif file. writing of an output file
 | 
			
		||||
        is omitted if this parameter is not specified.
 | 
			
		||||
| 
						 | 
				
			
			@ -2115,40 +2378,46 @@ partly selected designs.
 | 
			
		|||
        from label is synonymous to 'begin', and empty to label is
 | 
			
		||||
        synonymous to the end of the command list.
 | 
			
		||||
 | 
			
		||||
    -flatten
 | 
			
		||||
        flatten design before synthesis
 | 
			
		||||
 | 
			
		||||
    -retime
 | 
			
		||||
        run 'abc' with -dff option
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
The following commands are executed by this synthesis command:
 | 
			
		||||
 | 
			
		||||
    begin:
 | 
			
		||||
        read_verilog -lib +/xilinx/cells_sim.v
 | 
			
		||||
        hierarchy -check -top <top>
 | 
			
		||||
 | 
			
		||||
    coarse:
 | 
			
		||||
    flatten:     (only if -flatten)
 | 
			
		||||
        proc
 | 
			
		||||
        opt
 | 
			
		||||
        memory
 | 
			
		||||
        clean
 | 
			
		||||
        fsm
 | 
			
		||||
        opt
 | 
			
		||||
        flatten
 | 
			
		||||
 | 
			
		||||
    coarse:
 | 
			
		||||
        synth -run coarse
 | 
			
		||||
        dff2dffe
 | 
			
		||||
 | 
			
		||||
    bram:
 | 
			
		||||
        memory_bram -rules +/xilinx/brams.txt
 | 
			
		||||
        techmap -map +/xilinx/brams_map.v
 | 
			
		||||
 | 
			
		||||
    fine:
 | 
			
		||||
        techmap
 | 
			
		||||
        opt
 | 
			
		||||
        opt -fast -full
 | 
			
		||||
        memory_map
 | 
			
		||||
        opt -full
 | 
			
		||||
        techmap -map +/techmap.v -map +/xilinx/arith_map.v
 | 
			
		||||
        opt -fast
 | 
			
		||||
 | 
			
		||||
    map_luts:
 | 
			
		||||
        abc -lut 6
 | 
			
		||||
        abc -lut 5:8 [-dff]
 | 
			
		||||
        clean
 | 
			
		||||
 | 
			
		||||
    map_cells:
 | 
			
		||||
        techmap -share_map xilinx/cells.v
 | 
			
		||||
        techmap -map +/xilinx/cells_map.v
 | 
			
		||||
        clean
 | 
			
		||||
 | 
			
		||||
    clkbuf:
 | 
			
		||||
        select -set xilinx_clocks <top>/t:FDRE %x:+FDRE[C] <top>/t:FDRE %d
 | 
			
		||||
        iopadmap -inpad BUFGP O:I @xilinx_clocks
 | 
			
		||||
 | 
			
		||||
    iobuf:
 | 
			
		||||
        select -set xilinx_nonclocks <top>/w:* <top>/t:BUFGP %x:+BUFGP[I] %d
 | 
			
		||||
        iopadmap -outpad OBUF I:O -inpad IBUF O:I @xilinx_nonclocks
 | 
			
		||||
 | 
			
		||||
    edif:
 | 
			
		||||
        write_edif synth.edif
 | 
			
		||||
\end{lstlisting}
 | 
			
		||||
| 
						 | 
				
			
			@ -2367,7 +2636,7 @@ Tests the internal implementation of the given cell type (for example '$add')
 | 
			
		|||
by comparing SAT solver, EVAL and TECHMAP implementations of the cell types..
 | 
			
		||||
 | 
			
		||||
Run with 'all' instead of a cell type to run the test on all supported
 | 
			
		||||
cell types.
 | 
			
		||||
cell types. Use for example 'all /$add' for all cell types except $add.
 | 
			
		||||
 | 
			
		||||
    -n {integer}
 | 
			
		||||
        create this number of cell instances and test them (default = 100).
 | 
			
		||||
| 
						 | 
				
			
			@ -2378,12 +2647,20 @@ cell types.
 | 
			
		|||
    -f {ilang_file}
 | 
			
		||||
        don't generate circuits. instead load the specified ilang file.
 | 
			
		||||
 | 
			
		||||
    -w {filename_prefix}
 | 
			
		||||
        don't test anything. just generate the circuits and write them
 | 
			
		||||
        to ilang files with the specified prefix
 | 
			
		||||
 | 
			
		||||
    -map {filename}
 | 
			
		||||
        pass this option to techmap.
 | 
			
		||||
 | 
			
		||||
    -simlib
 | 
			
		||||
        use "techmap -map +/simlib.v -max_iter 2 -autoproc"
 | 
			
		||||
 | 
			
		||||
    -muxdiv
 | 
			
		||||
        when creating test benches with dividers, create an additional mux
 | 
			
		||||
        to mask out the division-by-zero case
 | 
			
		||||
 | 
			
		||||
    -script {script_file}
 | 
			
		||||
        instead of calling "techmap", call "script {script_file}".
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -2510,9 +2787,17 @@ Write the current design to an BLIF file.
 | 
			
		|||
    -buf <cell-type> <in-port> <out-port>
 | 
			
		||||
        use cells of type <cell-type> with the specified port names for buffers
 | 
			
		||||
 | 
			
		||||
    -unbuf <cell-type> <in-port> <out-port>
 | 
			
		||||
        replace buffer cells with the specified name and port names with
 | 
			
		||||
        a .names statement that models a buffer
 | 
			
		||||
 | 
			
		||||
    -true <cell-type> <out-port>
 | 
			
		||||
    -false <cell-type> <out-port>
 | 
			
		||||
        use the specified cell types to drive nets that are constant 1 or 0
 | 
			
		||||
    -undef <cell-type> <out-port>
 | 
			
		||||
        use the specified cell types to drive nets that are constant 1, 0, or
 | 
			
		||||
        undefined. when '-' is used as <cell-type>, then <out-port> specifies
 | 
			
		||||
        the wire name to be used for the constant signal and no cell driving
 | 
			
		||||
        that wire is generated.
 | 
			
		||||
 | 
			
		||||
The following options can be useful when the generated file is not going to be
 | 
			
		||||
read by a BLIF parser but a custom tool. It is recommended to not name the output
 | 
			
		||||
| 
						 | 
				
			
			@ -2533,8 +2818,11 @@ file *.blif when any of this options is used.
 | 
			
		|||
    -param
 | 
			
		||||
        use the non-standard .param statement to write module parameters
 | 
			
		||||
 | 
			
		||||
    -blackbox
 | 
			
		||||
        write blackbox cells with .blackbox statement.
 | 
			
		||||
 | 
			
		||||
    -impltf
 | 
			
		||||
        do not write definitions for the $true and $false wires.
 | 
			
		||||
        do not write definitions for the $true, $false and $undef wires.
 | 
			
		||||
\end{lstlisting}
 | 
			
		||||
 | 
			
		||||
\section{write\_btor -- write design to BTOR file}
 | 
			
		||||
| 
						 | 
				
			
			@ -2615,6 +2903,83 @@ a tool for Coarse-Grain Example-Driven Interconnect Synthesis.
 | 
			
		|||
http://www.clifford.at/intersynth/
 | 
			
		||||
\end{lstlisting}
 | 
			
		||||
 | 
			
		||||
\section{write\_smt2 -- write design to SMT-LIBv2 file}
 | 
			
		||||
\label{cmd:write_smt2}
 | 
			
		||||
\begin{lstlisting}[numbers=left,frame=single]
 | 
			
		||||
    write_smt2 [options] [filename]
 | 
			
		||||
 | 
			
		||||
Write a SMT-LIBv2 [1] description of the current design. For a module with name
 | 
			
		||||
'<mod>' this will declare the sort '<mod>_s' (state of the module) and the the
 | 
			
		||||
function '<mod>_t' (state transition function).
 | 
			
		||||
 | 
			
		||||
The '<mod>_s' sort represents a module state. Additional '<mod>_n' functions
 | 
			
		||||
are provided that can be used to access the values of the signals in the module.
 | 
			
		||||
Only ports, and signals with the 'keep' attribute set are made available via
 | 
			
		||||
such functions. Without the -bv option, multi-bit wires are exported as
 | 
			
		||||
separate functions of type Bool for the individual bits. With the -bv option
 | 
			
		||||
multi-bit wires are exported as single functions of type BitVec.
 | 
			
		||||
 | 
			
		||||
The '<mod>_t' function evaluates to 'true' when the given pair of states
 | 
			
		||||
describes a valid state transition.
 | 
			
		||||
 | 
			
		||||
    -bv
 | 
			
		||||
        enable support for BitVec (FixedSizeBitVectors theory). with this
 | 
			
		||||
        option set multi-bit wires are represented using the BitVec sort and
 | 
			
		||||
        support for coarse grain cells (incl. arithmetic) is enabled.
 | 
			
		||||
 | 
			
		||||
    -tpl <template_file>
 | 
			
		||||
        use the given template file. the line containing only the token '%%'
 | 
			
		||||
        is replaced with the regular output of this command.
 | 
			
		||||
 | 
			
		||||
[1] For more information on SMT-LIBv2 visit http://smt-lib.org/ or read David
 | 
			
		||||
R. Cok's tutorial: http://www.grammatech.com/resources/smt/SMTLIBTutorial.pdf
 | 
			
		||||
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
Example:
 | 
			
		||||
 | 
			
		||||
Consider the following module (test.v). We want to prove that the output can
 | 
			
		||||
never transition from a non-zero value to a zero value.
 | 
			
		||||
 | 
			
		||||
        module test(input clk, output reg [3:0] y);
 | 
			
		||||
          always @(posedge clk)
 | 
			
		||||
            y <= (y << 1) | ^y;
 | 
			
		||||
        endmodule
 | 
			
		||||
 | 
			
		||||
For this proof we create the following template (test.tpl).
 | 
			
		||||
 | 
			
		||||
        ; we need QF_UFBV for this poof
 | 
			
		||||
        (set-logic QF_UFBV)
 | 
			
		||||
 | 
			
		||||
        ; insert the auto-generated code here
 | 
			
		||||
        %%
 | 
			
		||||
 | 
			
		||||
        ; declare two state variables s1 and s2
 | 
			
		||||
        (declare-fun s1 () test_s)
 | 
			
		||||
        (declare-fun s2 () test_s)
 | 
			
		||||
 | 
			
		||||
        ; state s2 is the successor of state s1
 | 
			
		||||
        (assert (test_t s1 s2))
 | 
			
		||||
 | 
			
		||||
        ; we are looking for a model with y non-zero in s1
 | 
			
		||||
        (assert (distinct (|test_n y| s1) #b0000))
 | 
			
		||||
 | 
			
		||||
        ; we are looking for a model with y zero in s2
 | 
			
		||||
        (assert (= (|test_n y| s2) #b0000))
 | 
			
		||||
 | 
			
		||||
        ; is there such a model?
 | 
			
		||||
        (check-sat)
 | 
			
		||||
 | 
			
		||||
The following yosys script will create a 'test.smt2' file for our proof:
 | 
			
		||||
 | 
			
		||||
        read_verilog test.v
 | 
			
		||||
        hierarchy; proc; techmap; opt -fast
 | 
			
		||||
        write_smt2 -bv -tpl test.tpl test.smt2
 | 
			
		||||
 | 
			
		||||
Running 'cvc4 test.smt2' will print 'unsat' because y can never transition
 | 
			
		||||
from non-zero to zero in the test design.
 | 
			
		||||
\end{lstlisting}
 | 
			
		||||
 | 
			
		||||
\section{write\_spice -- write design to SPICE netlist file}
 | 
			
		||||
\label{cmd:write_spice}
 | 
			
		||||
\begin{lstlisting}[numbers=left,frame=single]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue