| |
| \chapter{Technology Mapping} |
| \label{chapter:techmap} |
| |
| Previous chapters outlined how HDL code is transformed into an RTL netlist. The |
| RTL netlist is still based on abstract coarse-grain cell types like arbitrary |
| width adders and even multipliers. This chapter covers how an RTL netlist is |
| transformed into a functionally equivalent netlist utilizing the cell types |
| available in the target architecture. |
| |
| Technology mapping is often performed in two phases. In the first phase RTL cells |
| are mapped to an internal library of single-bit cells (see Sec.~\ref{sec:celllib_gates}). |
| In the second phase this netlist of internal gate types is transformed to a netlist |
| of gates from the target technology library. |
| |
| When the target architecture provides coarse-grain cells (such as block ram |
| or ALUs), these must be mapped to directly form the RTL netlist, as information |
| on the coarse-grain structure of the design is lost when it is mapped to |
| bit-width gate types. |
| |
| \section{Cell Substitution} |
| |
| The simplest form of technology mapping is cell substitution, as performed by |
| the {\tt techmap} pass. This pass, when provided with a Verilog file that |
| implements the RTL cell types using simpler cells, simply replaces the RTL |
| cells with the provided implementation. |
| |
| When no map file is provided, {\tt techmap} uses a built-in map file that |
| maps the Yosys RTL cell types to the internal gate library used by Yosys. |
| The curious reader may find this map file as {\tt techlibs/common/techmap.v} in |
| the Yosys source tree. |
| |
| Additional features have been added to {\tt techmap} to allow for conditional |
| mapping of cells (see {\tt help techmap} or Sec.~\ref{cmd:techmap}). This can |
| for example be useful if the target architecture supports hardware multipliers for |
| certain bit-widths but not for others. |
| |
| A usual synthesis flow would first use the {\tt techmap} pass to directly map |
| some RTL cells to coarse-grain cells provided by the target architecture (if |
| any) and then use techmap with the built-in default file to map the remaining |
| RTL cells to gate logic. |
| |
| \section{Subcircuit Substitution} |
| |
| Sometimes the target architecture provides cells that are more powerful than |
| the RTL cells used by Yosys. For example a cell in the target architecture that can |
| calculate the absolute-difference of two numbers does not match any single |
| RTL cell type but only combinations of cells. |
| |
| For these cases Yosys provides the {\tt extract} pass that can match a given set |
| of modules against a design and identify the portions of the design that are |
| identical (i.e.~isomorphic subcircuits) to any of the given modules. These |
| matched subcircuits are then replaced by instances of the given modules. |
| |
| The {\tt extract} pass also finds basic variations of the given modules, |
| such as swapped inputs on commutative cell types. |
| |
| In addition to this the {\tt extract} pass also has limited support for |
| frequent subcircuit mining, i.e.~the process of finding recurring subcircuits |
| in the design. This has a few applications, including the design of new |
| coarse-grain architectures \cite{intersynthFdlBookChapter}. |
| |
| The hard algorithmic work done by the {\tt extract} pass (solving the |
| isomorphic subcircuit problem and frequent subcircuit mining) is performed |
| using the SubCircuit library that can also be used stand-alone without Yosys |
| (see Sec.~\ref{sec:SubCircuit}). |
| |
| \section{Gate-Level Technology Mapping} |
| \label{sec:techmap_extern} |
| |
| On the gate-level the target architecture is usually described by a ``Liberty |
| file''. The Liberty file format is an industry standard format that can be |
| used to describe the behaviour and other properties of standard library cells |
| \citeweblink{LibertyFormat}. |
| |
| Mapping a design utilizing the Yosys internal gate library (e.g.~as a result |
| of mapping it to this representation using the {\tt techmap} pass) is |
| performed in two phases. |
| |
| First the register cells must be mapped to the registers that are available |
| on the target architectures. The target architecture might not provide all |
| variations of d-type flip-flops with positive and negative clock edge, |
| high-active and low-active asynchronous set and/or reset, etc. Therefore the |
| process of mapping the registers might add additional inverters to the design |
| and thus it is important to map the register cells first. |
| |
| Mapping of the register cells may be performed by using the {\tt dfflibmap} |
| pass. This pass expects a Liberty file as argument (using the {\tt -liberty} |
| option) and only uses the register cells from the Liberty file. |
| |
| Secondly the combinational logic must be mapped to the target architecture. |
| This is done using the external program ABC \citeweblink{ABC} via the |
| {\tt abc} pass by using the {\tt -liberty} option to the pass. Note that |
| in this case only the combinatorial cells are used from the cell library. |
| |
| Occasionally Liberty files contain trade secrets (such as sensitive timing |
| information) that cannot be shared freely. This complicates processes such as |
| reporting bugs in the tools involved. When the information in the Liberty file |
| used by Yosys and ABC are not part of the sensitive information, the additional |
| tool {\tt yosys-filterlib} (see Sec.~\ref{sec:filterlib}) can be used to strip |
| the sensitive information from the Liberty file. |
| |