mirror of https://github.com/YosysHQ/yosys.git
240 lines
8.9 KiB
TeX
240 lines
8.9 KiB
TeX
|
|
% IEEEtran howto:
|
|
% http://ftp.univie.ac.at/packages/tex/macros/latex/contrib/IEEEtran/IEEEtran_HOWTO.pdf
|
|
\documentclass[9pt,technote,a4paper]{IEEEtran}
|
|
|
|
\usepackage[T1]{fontenc} % required for luximono!
|
|
\usepackage[scaled=0.8]{luximono} % typewriter font with bold face
|
|
|
|
% To install the luximono font files:
|
|
% getnonfreefonts-sys --all or
|
|
% getnonfreefonts-sys luximono
|
|
%
|
|
% when there are trouble you might need to:
|
|
% - Create /etc/texmf/updmap.d/99local-luximono.cfg
|
|
% containing the single line: Map ul9.map
|
|
% - Run update-updmap followed by mktexlsr and updmap-sys
|
|
%
|
|
% This commands must be executed as root with a root environment
|
|
% (i.e. run "sudo su" and then execute the commands in the root
|
|
% shell, don't just prefix the commands with "sudo").
|
|
|
|
\usepackage[unicode,bookmarks=false]{hyperref}
|
|
\usepackage[english]{babel}
|
|
\usepackage[utf8]{inputenc}
|
|
\usepackage{amssymb}
|
|
\usepackage{amsmath}
|
|
\usepackage{amsfonts}
|
|
\usepackage{units}
|
|
\usepackage{nicefrac}
|
|
\usepackage{eurosym}
|
|
\usepackage{graphicx}
|
|
\usepackage{verbatim}
|
|
\usepackage{algpseudocode}
|
|
\usepackage{scalefnt}
|
|
\usepackage{xspace}
|
|
\usepackage{color}
|
|
\usepackage{colortbl}
|
|
\usepackage{multirow}
|
|
\usepackage{hhline}
|
|
\usepackage{listings}
|
|
\usepackage{float}
|
|
|
|
\usepackage{tikz}
|
|
\usetikzlibrary{calc}
|
|
\usetikzlibrary{arrows}
|
|
\usetikzlibrary{scopes}
|
|
\usetikzlibrary{through}
|
|
\usetikzlibrary{shapes.geometric}
|
|
|
|
\def\FIXME{{\color{red}\bf FIXME}}
|
|
|
|
\lstset{basicstyle=\ttfamily,frame=trBL,xleftmargin=2em,xrightmargin=1em,numbers=left}
|
|
|
|
\begin{document}
|
|
|
|
\title{Yosys Application Note 011: \\ Interactive Design Investigation}
|
|
\author{Clifford Wolf \\ November 2013}
|
|
\maketitle
|
|
|
|
\begin{abstract}
|
|
Yosys \cite{yosys} can be a great environment for building custom synthesis
|
|
flows \cite{glaserwolf}. It can also be an excellent tool for teaching and
|
|
learning Verilog based RTL synthesis. In both applications it is of great
|
|
importance to be able to analyze the designs produces easily.
|
|
|
|
This Yosys application note covers the generation of circuit diagrams with the
|
|
Yosys {\tt show} command and the selection of interesting parts of the circuit
|
|
using the {\tt select} command.
|
|
\end{abstract}
|
|
|
|
\section{Installation and Prerequisites}
|
|
|
|
This Application Note is based on GIT Rev. {\tt \FIXME} from \FIXME{} of
|
|
Yosys \cite{yosys}. The {\tt README} file covers how to install Yosys. The
|
|
{\tt show} command requires a working installation of GraphViz \cite{graphviz}
|
|
for generating the actual circuit diagrams. Yosys must be build with Qt
|
|
support in order to activate the built-in SVG viewer. Alternatively an
|
|
external viewer can be used.
|
|
|
|
\section{Introduction to the {\tt show} command}
|
|
|
|
The {\tt show} command generates a circuit diagram for the design in its
|
|
current state. Various options can be used to change the appearance of the
|
|
circuit diagram, set the name and format for the output file, and so forth.
|
|
When called without any special options, it saves the circuit diagram in
|
|
a temporary file and launches {\tt yosys-svgviewer} to display the diagram.
|
|
Subsequent calls to {\tt show} re-use the {\tt yosys-svgviewer} instance
|
|
(if still running).
|
|
|
|
Fig.~\ref{example_src} shows a simple synthesis script and Verilog file that
|
|
demonstrates the usage of {\tt show} in a simple setting. Note that {\tt show}
|
|
is called with the {\tt -pause} option, that halts execution of the Yosys
|
|
script until the user presses the Enter key. The {\tt show -pause} command
|
|
also allows the user to enter an interactive shell to further investigate the
|
|
circuit before continuing synthesis.
|
|
|
|
\begin{figure}[b]
|
|
\begin{lstlisting}
|
|
$ cat example.ys
|
|
read_verilog example.v
|
|
show -pause
|
|
proc
|
|
show -pause
|
|
opt
|
|
show -pause
|
|
|
|
$ cat example.v
|
|
module example(input clk, a, b, c,
|
|
output reg [1:0] y);
|
|
always @(posedge clk)
|
|
if (c)
|
|
y <= c ? a + b : 2'd0;
|
|
endmodule
|
|
\end{lstlisting}
|
|
\caption{Yosys script with {\tt show} commands and example design}
|
|
\label{example_src}
|
|
\end{figure}
|
|
|
|
So this script, when executed, will show the design after each of the three
|
|
synthesis commands. The generated circuit diagrams are shown in Fig.~\ref{example_out}.
|
|
|
|
The first diagram (from top to bottom) shows the design directly after being
|
|
read by the Verilog front-end. Input and output ports are visualized using
|
|
octagonal shapes. Cells are visualized as rectangles with inputs on the left
|
|
and outputs on the right side. The cell labels are two lines long: The first line
|
|
contains the cell name (or a {\tt \_<number\_} placeholder for cells without
|
|
a name from the original Verilog, such as cells created from Verilog
|
|
expressions) and the second line contains the cell type. Internal cell types
|
|
are prefixed with a dollar sign. The Yosys manual contains a chapter on the
|
|
internal cell library used in Yosys.
|
|
|
|
Constants are shown as ellipses with the constant value as label. The syntax
|
|
{\tt <bit\_width>'<bits>} is used for for constants that are not 32-bit wide
|
|
and/or contain bits that are not 0 or 1 (but {\tt x} or {\tt z}). Ordinary
|
|
32-bit constants are written using decimal numbers.
|
|
|
|
Single-bit signals are shown as thin arrows pointing from the driver to the
|
|
load. Signals that are multiple bits wide are shown as think arrows.
|
|
|
|
Finally {\it processes\/} are shown in boxes with round corners. Processes
|
|
are Yosys' internal representation of the decision-trees and synchronization
|
|
events modelled in a Verilog {\tt always}-block. The label reads {\tt PROC} in the
|
|
first line and contains the source code location of the original {\tt
|
|
always}-block in the 2nd line. Not how the multiplexer from the {\tt ?:}-expression
|
|
is represented as a {\tt \$mux} cell but the multiplexer from the {\tt if}-statement
|
|
is yet still hidden within the process.
|
|
|
|
\medskip
|
|
|
|
The {\tt proc} command transforms the process from the first diagram into a
|
|
multiplexer and a d-type flip-flip, which brings us to the 2nd diagram.
|
|
|
|
Note that the auto-generated numbers for the cells have changed since the first
|
|
diagram, because they are just placeholders . We will cover how to avoid this
|
|
later in this document.
|
|
|
|
|
|
\begin{figure}[b!]
|
|
\includegraphics[width=\linewidth]{APPNOTE_011_Design_Investigation/example_00.pdf}
|
|
\includegraphics[width=\linewidth]{APPNOTE_011_Design_Investigation/example_01.pdf}
|
|
\includegraphics[width=\linewidth]{APPNOTE_011_Design_Investigation/example_02.pdf}
|
|
\caption{Output of the three {\tt show} commands from Fig.~\ref{example_src}}
|
|
\label{example_out}
|
|
\end{figure}
|
|
|
|
Also note that the design now contains two instances of a {\tt BUF}-node. The
|
|
Rhombus shape to the right is a dangling wire. (Wire nodes are only shown if
|
|
they are dangling or have names assigned from the Verilog input.) This are
|
|
artefacts left behind by the {\tt proc}-command. It is quite usual to see such
|
|
artefacts after calling commands that perform changes in the design, as most
|
|
commands only care about doing the transformation in a foolproof way, not about
|
|
cleaning up after them. The next call to {\tt clean} (or {\tt opt}, which
|
|
includes {\tt clean} as one of its operations) will clean up this artefacts.
|
|
This operation is so common in Yosys scripts that it can simply be abbreviated
|
|
by using the {\tt ;;} token, which doubles as separator for commands. Unless
|
|
one wants to specifically analyze this artefacts left behind some operations,
|
|
it is therefore recommended to call {\tt clean} before calling {\tt show}.
|
|
|
|
\medskip
|
|
|
|
In this script we directly call {\tt opt} as next step, which finally leads us to
|
|
the 3rd diagram in Fig.~\ref{example_out}. Here we see that the {\tt opt} command
|
|
not only has removed the artifacts left behind by {\tt proc}, but also determined
|
|
correctly that it can remove the first {\tt \$mux} cell without changing the behavior
|
|
of the circuit.
|
|
|
|
\begin{figure}[b!]
|
|
\includegraphics[width=\linewidth,trim=0 2cm 0 0]{APPNOTE_011_Design_Investigation/splice.pdf}
|
|
\caption{Output of {\tt yosys -p 'proc; opt; show' splice.v}}
|
|
\label{example_src}
|
|
\end{figure}
|
|
|
|
\begin{figure}[b!]
|
|
\begin{lstlisting}
|
|
module splice_demo(a, b, c, d, e, f, x, y);
|
|
|
|
input [1:0] a, b, c, d, e, f;
|
|
output [1:0] x = {a[0], a[1]};
|
|
|
|
output [11:0] y;
|
|
assign {y[11:4], y[1:0], y[3:2]} =
|
|
{a, b, -{c, d}, ~{e, f}};
|
|
|
|
endmodule
|
|
\end{lstlisting}
|
|
\caption{\tt splice.v}
|
|
\label{example_src}
|
|
\end{figure}
|
|
|
|
\FIXME{} --- Splicing, Cell libraries
|
|
|
|
\section{Navigating the design}
|
|
|
|
\FIXME{} --- cd and ls, multi-page diagrams, select, cones and boolean operations
|
|
|
|
\section{Advanced investigation techniques}
|
|
|
|
\FIXME{} --- dump, eval, sat
|
|
|
|
\begin{thebibliography}{9}
|
|
|
|
\bibitem{yosys}
|
|
Clifford Wolf. The Yosys Open SYnthesis Suite.
|
|
\url{http://www.clifford.at/yosys/}
|
|
|
|
\bibitem{glaserwolf}
|
|
Johann Glaser. Clifford Wolf. Methodology and Example-Driven Interconnect
|
|
Synthesis for Designing Heterogeneous Coarse-Grain Reconfigurable
|
|
Architectures. In: Jan Haase (Editor). {\it Models, Methods, and Tools for Complex Chip Design.
|
|
Lecture Notes in Electrical Engineering. Volume 265, 2014, pp 201-221.\/}
|
|
\href{http://dx.doi.org/10.1007/978-3-319-01418-0_12}{DOI 10.1007/978-3-319-01418-0\_12}
|
|
|
|
\bibitem{graphviz}
|
|
Graphviz - Graph Visualization Software.
|
|
\url{http://www.graphviz.org/}
|
|
|
|
\end{thebibliography}
|
|
|
|
\end{document}
|